TF-2202 Use InternetConnectionChecker to check internet connection on mobile device

(cherry picked from commit 451ebbda2218e11428fdc7d9c6ae80fa254ea2f5)
This commit is contained in:
dab246
2023-10-03 16:30:18 +07:00
committed by Dat H. Pham
parent db12672599
commit f7cbdf101c
5 changed files with 73 additions and 16 deletions
@@ -1,76 +1,119 @@
import 'dart:async';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:core/core.dart';
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/utils/app_toast.dart';
import 'package:core/presentation/views/toast/tmail_toast.dart';
import 'package:core/utils/app_logger.dart';
import 'package:core/utils/platform_info.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:internet_connection_checker/internet_connection_checker.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
class NetworkConnectionController extends GetxController {
final connectivityResult = Rxn<ConnectivityResult>();
final _connectivityResult = Rxn<ConnectivityResult>();
final _internetConnectionStatus = Rxn<InternetConnectionStatus>();
final Connectivity _connectivity;
final InternetConnectionChecker _internetConnectionChecker;
final ImagePaths _imagePaths;
final AppToast _appToast;
bool _isEnableShowToastDisconnection = true;
late StreamSubscription<ConnectivityResult> subscription;
StreamSubscription<ConnectivityResult>? _subscription;
StreamSubscription<InternetConnectionStatus>? _internetSubscription;
NetworkConnectionController(
this._connectivity,
this._internetConnectionChecker,
this._imagePaths,
this._appToast
this._appToast,
);
@override
void onInit() {
super.onInit();
log('NetworkConnectionController::onInit():');
_listenNetworkConnectionChanged();
}
@override
void onReady() {
super.onReady();
log('NetworkConnectionController::onReady():');
_getCurrentNetworkConnectionState();
}
@override
void onClose() {
subscription.cancel();
_subscription?.cancel();
if (PlatformInfo.isMobile) {
_internetSubscription?.cancel();
}
super.onClose();
}
void _getCurrentNetworkConnectionState() async {
final currentConnectionResult = await _connectivity.checkConnectivity();
log('NetworkConnectionController::onReady():_getCurrentNetworkConnectionState: $currentConnectionResult');
_setNetworkConnectivityState(currentConnectionResult);
final listConnectionResult = await Future.wait([
_connectivity.checkConnectivity(),
if (PlatformInfo.isMobile)
_internetConnectionChecker.connectionStatus,
]);
log('NetworkConnectionController::_getCurrentNetworkConnectionState():listConnectionResult: $listConnectionResult');
if (listConnectionResult[0] is ConnectivityResult) {
_setNetworkConnectivityState(listConnectionResult[0] as ConnectivityResult);
}
if (PlatformInfo.isMobile && listConnectionResult[1] is InternetConnectionStatus) {
_setInternetConnectivityStatus(listConnectionResult[1] as InternetConnectionStatus);
}
_handleNetworkConnectionState();
}
void _listenNetworkConnectionChanged() {
subscription = _connectivity.onConnectivityChanged.listen(
_subscription = _connectivity.onConnectivityChanged.listen(
(result) {
log('NetworkConnectionController::_listenNetworkConnectionChanged():onConnectivityChanged: $result');
log('NetworkConnectionController::_listenNetworkConnectionChanged()::onConnectivityChanged: $result');
_setNetworkConnectivityState(result);
_handleNetworkConnectionState();
},
onError: (error, stackTrace) {
logError('NetworkConnectionController::_listenNetworkConnectionChanged():error: $error');
logError('NetworkConnectionController::_listenNetworkConnectionChanged():stackTrace: $stackTrace');
logError('NetworkConnectionController::_listenNetworkConnectionChanged()::onConnectivityChanged:error: $error | stackTrace: $stackTrace');
}
);
if (PlatformInfo.isMobile) {
_internetSubscription = _internetConnectionChecker.onStatusChange.listen(
(status) {
log('NetworkConnectionController::_listenNetworkConnectionChanged()::onStatusChange: $status');
_setInternetConnectivityStatus(status);
},
onError: (error, stackTrace) {
logError('NetworkConnectionController::_listenNetworkConnectionChanged()::onStatusChange:error: $error | stackTrace: $stackTrace');
}
);
}
}
void _setNetworkConnectivityState(ConnectivityResult newConnectivityResult) {
connectivityResult.value = newConnectivityResult;
_connectivityResult.value = newConnectivityResult;
}
void _setInternetConnectivityStatus(InternetConnectionStatus newStatus) {
_internetConnectionStatus.value = newStatus;
}
bool isNetworkConnectionAvailable() {
return connectivityResult.value != ConnectivityResult.none;
if (PlatformInfo.isWeb) {
return _connectivityResult.value != ConnectivityResult.none;
} else {
return _connectivityResult.value != ConnectivityResult.none &&
_internetConnectionStatus.value == InternetConnectionStatus.connected;
}
}
void _handleNetworkConnectionState() {
@@ -8,6 +8,7 @@ import 'package:dio/dio.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter_appauth/flutter_appauth.dart';
import 'package:get/get.dart';
import 'package:internet_connection_checker/internet_connection_checker.dart';
import 'package:jmap_dart_client/http/http_client.dart';
import 'package:tmail_ui_user/features/email/data/local/html_analyzer.dart';
import 'package:tmail_ui_user/features/email/data/network/email_api.dart';
@@ -102,6 +103,7 @@ class NetworkBindings extends Bindings {
void _bindingConnection() {
Get.put(Connectivity());
Get.put(InternetConnectionChecker());
}
void _bindingException() {
@@ -2,6 +2,7 @@ import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/utils/app_toast.dart';
import 'package:get/get.dart';
import 'package:internet_connection_checker/internet_connection_checker.dart';
import 'package:tmail_ui_user/features/network_connection/presentation/network_connection_controller.dart';
class NetWorkConnectionBindings extends Bindings {
@@ -10,6 +11,7 @@ class NetWorkConnectionBindings extends Bindings {
void dependencies() {
Get.put(NetworkConnectionController(
Get.find<Connectivity>(),
Get.find<InternetConnectionChecker>(),
Get.find<ImagePaths>(),
Get.find<AppToast>(),
));
+8
View File
@@ -974,6 +974,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.1.0"
internet_connection_checker:
dependency: "direct main"
description:
name: internet_connection_checker
sha256: "1c683e63e89c9ac66a40748b1b20889fd9804980da732bf2b58d6d5456c8e876"
url: "https://pub.dev"
source: hosted
version: "1.0.0+1"
intl:
dependency: "direct main"
description:
+2
View File
@@ -213,6 +213,8 @@ dependencies:
dotted_border: 2.1.0
internet_connection_checker: 1.0.0+1
dev_dependencies:
flutter_test:
sdk: flutter