TF-2202 Use InternetConnectionChecker to check internet connection on mobile device
(cherry picked from commit 451ebbda2218e11428fdc7d9c6ae80fa254ea2f5)
This commit is contained in:
@@ -1,76 +1,119 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:connectivity_plus/connectivity_plus.dart';
|
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:flutter/material.dart';
|
||||||
import 'package:get/get.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/localizations/app_localizations.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
|
|
||||||
class NetworkConnectionController extends GetxController {
|
class NetworkConnectionController extends GetxController {
|
||||||
final connectivityResult = Rxn<ConnectivityResult>();
|
final _connectivityResult = Rxn<ConnectivityResult>();
|
||||||
|
final _internetConnectionStatus = Rxn<InternetConnectionStatus>();
|
||||||
|
|
||||||
final Connectivity _connectivity;
|
final Connectivity _connectivity;
|
||||||
|
final InternetConnectionChecker _internetConnectionChecker;
|
||||||
final ImagePaths _imagePaths;
|
final ImagePaths _imagePaths;
|
||||||
final AppToast _appToast;
|
final AppToast _appToast;
|
||||||
|
|
||||||
bool _isEnableShowToastDisconnection = true;
|
bool _isEnableShowToastDisconnection = true;
|
||||||
|
|
||||||
late StreamSubscription<ConnectivityResult> subscription;
|
StreamSubscription<ConnectivityResult>? _subscription;
|
||||||
|
StreamSubscription<InternetConnectionStatus>? _internetSubscription;
|
||||||
|
|
||||||
NetworkConnectionController(
|
NetworkConnectionController(
|
||||||
this._connectivity,
|
this._connectivity,
|
||||||
|
this._internetConnectionChecker,
|
||||||
this._imagePaths,
|
this._imagePaths,
|
||||||
this._appToast
|
this._appToast,
|
||||||
);
|
);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
super.onInit();
|
super.onInit();
|
||||||
log('NetworkConnectionController::onInit():');
|
|
||||||
_listenNetworkConnectionChanged();
|
_listenNetworkConnectionChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onReady() {
|
void onReady() {
|
||||||
super.onReady();
|
super.onReady();
|
||||||
log('NetworkConnectionController::onReady():');
|
|
||||||
_getCurrentNetworkConnectionState();
|
_getCurrentNetworkConnectionState();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onClose() {
|
void onClose() {
|
||||||
subscription.cancel();
|
_subscription?.cancel();
|
||||||
|
if (PlatformInfo.isMobile) {
|
||||||
|
_internetSubscription?.cancel();
|
||||||
|
}
|
||||||
super.onClose();
|
super.onClose();
|
||||||
}
|
}
|
||||||
|
|
||||||
void _getCurrentNetworkConnectionState() async {
|
void _getCurrentNetworkConnectionState() async {
|
||||||
final currentConnectionResult = await _connectivity.checkConnectivity();
|
final listConnectionResult = await Future.wait([
|
||||||
log('NetworkConnectionController::onReady():_getCurrentNetworkConnectionState: $currentConnectionResult');
|
_connectivity.checkConnectivity(),
|
||||||
_setNetworkConnectivityState(currentConnectionResult);
|
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();
|
_handleNetworkConnectionState();
|
||||||
}
|
}
|
||||||
|
|
||||||
void _listenNetworkConnectionChanged() {
|
void _listenNetworkConnectionChanged() {
|
||||||
subscription = _connectivity.onConnectivityChanged.listen(
|
_subscription = _connectivity.onConnectivityChanged.listen(
|
||||||
(result) {
|
(result) {
|
||||||
log('NetworkConnectionController::_listenNetworkConnectionChanged():onConnectivityChanged: $result');
|
log('NetworkConnectionController::_listenNetworkConnectionChanged()::onConnectivityChanged: $result');
|
||||||
_setNetworkConnectivityState(result);
|
_setNetworkConnectivityState(result);
|
||||||
_handleNetworkConnectionState();
|
_handleNetworkConnectionState();
|
||||||
},
|
},
|
||||||
onError: (error, stackTrace) {
|
onError: (error, stackTrace) {
|
||||||
logError('NetworkConnectionController::_listenNetworkConnectionChanged():error: $error');
|
logError('NetworkConnectionController::_listenNetworkConnectionChanged()::onConnectivityChanged:error: $error | stackTrace: $stackTrace');
|
||||||
logError('NetworkConnectionController::_listenNetworkConnectionChanged():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) {
|
void _setNetworkConnectivityState(ConnectivityResult newConnectivityResult) {
|
||||||
connectivityResult.value = newConnectivityResult;
|
_connectivityResult.value = newConnectivityResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
void _setInternetConnectivityStatus(InternetConnectionStatus newStatus) {
|
||||||
|
_internetConnectionStatus.value = newStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isNetworkConnectionAvailable() {
|
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() {
|
void _handleNetworkConnectionState() {
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import 'package:dio/dio.dart';
|
|||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter_appauth/flutter_appauth.dart';
|
import 'package:flutter_appauth/flutter_appauth.dart';
|
||||||
import 'package:get/get.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: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/local/html_analyzer.dart';
|
||||||
import 'package:tmail_ui_user/features/email/data/network/email_api.dart';
|
import 'package:tmail_ui_user/features/email/data/network/email_api.dart';
|
||||||
@@ -102,6 +103,7 @@ class NetworkBindings extends Bindings {
|
|||||||
|
|
||||||
void _bindingConnection() {
|
void _bindingConnection() {
|
||||||
Get.put(Connectivity());
|
Get.put(Connectivity());
|
||||||
|
Get.put(InternetConnectionChecker());
|
||||||
}
|
}
|
||||||
|
|
||||||
void _bindingException() {
|
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/resources/image_paths.dart';
|
||||||
import 'package:core/presentation/utils/app_toast.dart';
|
import 'package:core/presentation/utils/app_toast.dart';
|
||||||
import 'package:get/get.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';
|
import 'package:tmail_ui_user/features/network_connection/presentation/network_connection_controller.dart';
|
||||||
|
|
||||||
class NetWorkConnectionBindings extends Bindings {
|
class NetWorkConnectionBindings extends Bindings {
|
||||||
@@ -10,6 +11,7 @@ class NetWorkConnectionBindings extends Bindings {
|
|||||||
void dependencies() {
|
void dependencies() {
|
||||||
Get.put(NetworkConnectionController(
|
Get.put(NetworkConnectionController(
|
||||||
Get.find<Connectivity>(),
|
Get.find<Connectivity>(),
|
||||||
|
Get.find<InternetConnectionChecker>(),
|
||||||
Get.find<ImagePaths>(),
|
Get.find<ImagePaths>(),
|
||||||
Get.find<AppToast>(),
|
Get.find<AppToast>(),
|
||||||
));
|
));
|
||||||
|
|||||||
@@ -974,6 +974,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.0"
|
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:
|
intl:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|||||||
@@ -213,6 +213,8 @@ dependencies:
|
|||||||
|
|
||||||
dotted_border: 2.1.0
|
dotted_border: 2.1.0
|
||||||
|
|
||||||
|
internet_connection_checker: 1.0.0+1
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
|
|||||||
Reference in New Issue
Block a user