diff --git a/assets/images/ic_not_connection.svg b/assets/images/ic_not_connection.svg
index 3b806bfe1..e87d1904c 100644
--- a/assets/images/ic_not_connection.svg
+++ b/assets/images/ic_not_connection.svg
@@ -1,3 +1,8 @@
diff --git a/core/lib/presentation/utils/app_toast.dart b/core/lib/presentation/utils/app_toast.dart
index 6e96530d9..cbf0e2755 100644
--- a/core/lib/presentation/utils/app_toast.dart
+++ b/core/lib/presentation/utils/app_toast.dart
@@ -47,6 +47,7 @@ class AppToast {
Widget? actionIcon,
Widget? leadingIcon,
double? maxWidth,
+ bool infinityToast = false,
Color? backgroundColor,
Color? textColor,
Color? textActionColor,
@@ -103,6 +104,7 @@ class AppToast {
message,
maxWidth: maxWidth,
backgroundColor: backgroundColor,
+ infinityToast: infinityToast,
textColor: textColor,
leading: leadingIcon,
trailing: trailingAction);
@@ -113,6 +115,7 @@ class AppToast {
String message, {
Color? textColor,
Widget? leading,
+ bool infinityToast = false,
Widget? trailing,
double? maxWidth,
Color? backgroundColor
@@ -138,7 +141,7 @@ class AppToast {
child: PointerInterceptor(child: leading))
: null,
toastBorderRadius: 10.0,
- toastDuration: 3
+ toastDuration: infinityToast ? null : 3,
);
}
diff --git a/core/lib/presentation/views/toast/tmail_toast.dart b/core/lib/presentation/views/toast/tmail_toast.dart
index a832227c6..954aeba66 100644
--- a/core/lib/presentation/views/toast/tmail_toast.dart
+++ b/core/lib/presentation/views/toast/tmail_toast.dart
@@ -50,9 +50,9 @@ class TMailToast {
}) {
assert(text != null);
ToastView.dismiss();
- ToastView.createView(text, context, toastDuration, toastPosition,
+ ToastView.createView(text, context, toastPosition,
backgroundColor, textStyle, toastBorderRadius, border, trailing,
- leading, width);
+ leading, width, toastDuration: toastDuration,);
}
}
@@ -69,21 +69,24 @@ class ToastView {
// ignore: avoid_void_async
static void createView(
- String text,
- BuildContext context,
- int? toastDuration,
- ToastPosition? toastPosition,
- Color backgroundColor,
- TextStyle textStyle,
- double toastBorderRadius,
- Border? border,
- Widget? trailing,
- Widget? leading,
- double? width) async {
+ String text,
+ BuildContext context,
+ ToastPosition? toastPosition,
+ Color backgroundColor,
+ TextStyle textStyle,
+ double toastBorderRadius,
+ Border? border,
+ Widget? trailing,
+ Widget? leading,
+ double? width,
+ {int? toastDuration = 2}
+ ) async {
overlayState = Overlay.of(context, rootOverlay: false);
- final Widget toastChild = ToastCard(
- Container(
+ final Widget child = Center(
+ child: Material(
+ color: Colors.transparent,
+ child: Container(
width: width,
decoration: BoxDecoration(
color: backgroundColor,
@@ -92,27 +95,36 @@ class ToastView {
),
margin: const EdgeInsets.symmetric(horizontal: 16),
padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 16),
- child: trailing == null && leading == null
- ? Text(text, softWrap: true, style: textStyle)
- : Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: [
- if (leading != null) leading,
- Expanded(child: Text(text, style: textStyle)),
- if (trailing != null) trailing
- ],
- ),
+ child: trailing == null && leading == null ?
+ Text(text, softWrap: true, style: textStyle) :
+ Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ if (leading != null) leading,
+ Expanded(child: Text(text, style: textStyle)),
+ if (trailing != null) trailing
+ ],
+ ),
),
- Duration(seconds: toastDuration ?? 2), fadeDuration: 500);
+ ),
+ );
+
+ final Widget toastChild = ToastCard(
+ child,
+ Duration(seconds: toastDuration ?? 2),
+ fadeDuration: 500,
+ );
_overlayEntry = OverlayEntry(
builder: (BuildContext context) =>
- _showWidgetBasedOnPosition(toastChild, toastPosition));
+ _showWidgetBasedOnPosition(toastDuration != null ? toastChild : child, toastPosition));
_isVisible = true;
overlayState!.insert(_overlayEntry!);
- await Future.delayed(Duration(seconds: toastDuration ?? 2));
- await dismiss();
+ if (toastDuration != null) {
+ await Future.delayed(Duration(seconds: toastDuration));
+ await dismiss();
+ }
}
static Positioned _showWidgetBasedOnPosition(
@@ -209,11 +221,6 @@ class ToastStateFulState extends State
@override
Widget build(BuildContext context) => FadeTransition(
opacity: _fadeAnimation as Animation,
- child: Center(
- child: Material(
- color: Colors.transparent,
- child: widget.child,
- ),
- ),
+ child: widget.child,
);
}
diff --git a/lib/features/base/base_controller.dart b/lib/features/base/base_controller.dart
index 04c22343c..8825cf611 100644
--- a/lib/features/base/base_controller.dart
+++ b/lib/features/base/base_controller.dart
@@ -1,4 +1,3 @@
-import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:contact/contact/model/capability_contact.dart';
import 'package:core/core.dart';
import 'package:dartz/dartz.dart';
@@ -13,7 +12,6 @@ import 'package:tmail_ui_user/main/error/capability_validator.dart';
abstract class BaseController extends GetxController with MessageDialogActionMixin, PopupContextMenuActionMixin {
final viewState = Rx>(Right(UIState.idle));
- final connectivityResult = Rxn();
FpsCallback? fpsCallback;
void consumeState(Stream> newStateStream) async {
@@ -28,14 +26,6 @@ abstract class BaseController extends GetxController with MessageDialogActionMix
viewState.value = newState;
}
- void setNetworkConnectivityState(ConnectivityResult newConnectivityResult) {
- connectivityResult.value = newConnectivityResult;
- }
-
- bool isNetworkConnectionAvailable() {
- return connectivityResult.value != ConnectivityResult.none;
- }
-
void getState(Future> newStateStream) async {
final state = await newStateStream;
state.fold(
diff --git a/lib/features/base/mixin/network_connection_mixin.dart b/lib/features/base/mixin/network_connection_mixin.dart
deleted file mode 100644
index fb8528d61..000000000
--- a/lib/features/base/mixin/network_connection_mixin.dart
+++ /dev/null
@@ -1,33 +0,0 @@
-
-import 'package:core/core.dart';
-import 'package:flutter/material.dart';
-import 'package:flutter_svg/flutter_svg.dart';
-import 'package:get/get.dart';
-import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
-
-mixin NetworkConnectionMixin {
-
- final _imagePaths = Get.find();
-
- Widget buildNetworkConnectionWidget(BuildContext context) {
- return Container(
- decoration: BoxDecoration(
- color: Colors.white,
- borderRadius: BorderRadius.circular(16)),
- width: 320,
- margin: const EdgeInsets.only(bottom: 150),
- child: Material(
- elevation: 2,
- shape: const RoundedRectangleBorder(
- borderRadius: BorderRadius.all(Radius.circular(10.0)),
- ),
- child: ListTile(
- leading: SvgPicture.asset(_imagePaths.icNotConnection),
- title: Text(
- AppLocalizations.of(context).no_internet_connection,
- style: const TextStyle(fontSize: 15, color: Colors.black)),
- )
- )
- );
- }
-}
\ No newline at end of file
diff --git a/lib/features/email/presentation/email_view.dart b/lib/features/email/presentation/email_view.dart
index d91398aeb..40b6d82f0 100644
--- a/lib/features/email/presentation/email_view.dart
+++ b/lib/features/email/presentation/email_view.dart
@@ -6,7 +6,6 @@ import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
import 'package:model/model.dart';
-import 'package:tmail_ui_user/features/base/mixin/network_connection_mixin.dart';
import 'package:tmail_ui_user/features/composer/presentation/extensions/prefix_email_address_extension.dart';
import 'package:tmail_ui_user/features/email/domain/state/get_email_content_state.dart';
import 'package:tmail_ui_user/features/email/presentation/email_controller.dart';
@@ -18,7 +17,7 @@ import 'package:tmail_ui_user/features/manage_account/presentation/extensions/va
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/widgets/vacation_notification_message_widget.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
-class EmailView extends GetWidget with NetworkConnectionMixin {
+class EmailView extends GetWidget {
static const double maxSizeFullDisplayEmailAddressArrowDownButton = 30.0;
diff --git a/lib/features/login/presentation/base_login_view.dart b/lib/features/login/presentation/base_login_view.dart
index ba7a3ea90..159d23ab3 100644
--- a/lib/features/login/presentation/base_login_view.dart
+++ b/lib/features/login/presentation/base_login_view.dart
@@ -5,7 +5,6 @@ import 'package:core/presentation/views/text/text_builder.dart';
import 'package:core/presentation/views/text/text_field_builder.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
-import 'package:tmail_ui_user/features/base/mixin/network_connection_mixin.dart';
import 'package:tmail_ui_user/features/login/domain/state/get_oidc_configuration_state.dart';
import 'package:tmail_ui_user/features/login/domain/state/get_token_oidc_state.dart';
import 'package:tmail_ui_user/features/login/presentation/login_controller.dart';
@@ -15,7 +14,7 @@ import 'package:tmail_ui_user/features/login/presentation/widgets/login_input_de
import 'package:tmail_ui_user/features/login/presentation/widgets/login_text_input_builder.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
-abstract class BaseLoginView extends GetWidget with NetworkConnectionMixin {
+abstract class BaseLoginView extends GetWidget {
BaseLoginView({Key? key}) : super(key: key);
final loginController = Get.find();
@@ -72,14 +71,14 @@ abstract class BaseLoginView extends GetWidget with NetworkConn
margin: const EdgeInsets.only(bottom: 16, left: 24, right: 24),
width: responsiveUtils.getDeviceWidth(context),height: 48,
child: AbsorbPointer(
- absorbing: !controller.isNetworkConnectionAvailable(),
+ absorbing: !controller.networkConnectionController.isNetworkConnectionAvailable(),
child: ElevatedButton(
key: const Key('loginSubmitForm'),
style: ButtonStyle(
foregroundColor: MaterialStateProperty.resolveWith((Set states) => Colors.white),
backgroundColor: MaterialStateProperty.resolveWith(
(Set states) => AppColor.primaryColor.withOpacity(
- controller.isNetworkConnectionAvailable() ? 1 : 0.5)),
+ controller.networkConnectionController.isNetworkConnectionAvailable() ? 1 : 0.5)),
shape: MaterialStateProperty.all(RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
side: const BorderSide(width: 0, color: AppColor.primaryColor)
diff --git a/lib/features/login/presentation/login_controller.dart b/lib/features/login/presentation/login_controller.dart
index 4304f0d0e..36c54f926 100644
--- a/lib/features/login/presentation/login_controller.dart
+++ b/lib/features/login/presentation/login_controller.dart
@@ -1,6 +1,3 @@
-import 'dart:async';
-
-import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:core/core.dart';
import 'package:dartz/dartz.dart';
import 'package:flutter/cupertino.dart';
@@ -26,6 +23,7 @@ import 'package:tmail_ui_user/features/login/domain/usecases/get_token_oidc_inte
import 'package:tmail_ui_user/features/login/presentation/login_form_type.dart';
import 'package:tmail_ui_user/features/login/presentation/model/login_arguments.dart';
import 'package:tmail_ui_user/features/login/presentation/state/login_state.dart';
+import 'package:tmail_ui_user/features/network_status_handle/presentation/network_connnection_controller.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
import 'package:tmail_ui_user/main/utils/app_config.dart';
@@ -43,11 +41,9 @@ class LoginController extends BaseController {
final GetAuthenticationInfoInteractor _getAuthenticationInfoInteractor;
final GetStoredOidcConfigurationInteractor _getStoredOidcConfigurationInteractor;
- final Connectivity _connectivity = Get.find();
final TextEditingController urlInputController = TextEditingController();
-
- late StreamSubscription _connectivityStreamSubscription;
+ final NetworkConnectionController networkConnectionController = Get.find();
LoginController(
this._authenticationInteractor,
@@ -88,12 +84,6 @@ class LoginController extends BaseController {
? Password(password.trim())
: null;
- @override
- void onInit() {
- _registerNetworkConnectivityState();
- super.onInit();
- }
-
@override
void onReady() {
if (BuildUtils.isWeb) {
@@ -337,18 +327,9 @@ class LoginController extends BaseController {
setUrlText(urlInputController.text);
}
- void _registerNetworkConnectivityState() async {
- setNetworkConnectivityState(await _connectivity.checkConnectivity());
- _connectivityStreamSubscription = _connectivity.onConnectivityChanged.listen((ConnectivityResult result) {
- log('LoginController::_registerNetworkConnectivityState(): ConnectivityResult: ${result.name}');
- setNetworkConnectivityState(result);
- });
- }
-
@override
void onClose() {
urlInputController.clear();
- _connectivityStreamSubscription.cancel();
super.onClose();
}
diff --git a/lib/features/login/presentation/login_view.dart b/lib/features/login/presentation/login_view.dart
index 374a535db..97962fbbe 100644
--- a/lib/features/login/presentation/login_view.dart
+++ b/lib/features/login/presentation/login_view.dart
@@ -49,14 +49,6 @@ class LoginView extends BaseLoginView {
),
),
),
- Obx(() {
- if (controller.isNetworkConnectionAvailable()) {
- return const SizedBox.shrink();
- }
- return Align(
- alignment: Alignment.bottomCenter,
- child: buildNetworkConnectionWidget(context));
- }),
]));
}
@@ -169,14 +161,14 @@ class LoginView extends BaseLoginView {
margin: const EdgeInsets.only(bottom: 16, left: 24, right: 24),
width: responsiveUtils.getDeviceWidth(context),height: 48,
child: AbsorbPointer(
- absorbing: !controller.isNetworkConnectionAvailable(),
+ absorbing: !controller.networkConnectionController.isNetworkConnectionAvailable(),
child: ElevatedButton(
key: const Key('nextToCredentialForm'),
style: ButtonStyle(
foregroundColor: MaterialStateProperty.resolveWith((Set states) => Colors.white),
backgroundColor: MaterialStateProperty.resolveWith(
(Set states) => AppColor.primaryColor.withOpacity(
- controller.isNetworkConnectionAvailable() ? 1 : 0.5)),
+ controller.networkConnectionController.isNetworkConnectionAvailable() ? 1 : 0.5)),
shape: MaterialStateProperty.all(RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
side: const BorderSide(width: 0, color: AppColor.primaryColor)
diff --git a/lib/features/login/presentation/login_view_web.dart b/lib/features/login/presentation/login_view_web.dart
index 18e56cf14..b456cfc55 100644
--- a/lib/features/login/presentation/login_view_web.dart
+++ b/lib/features/login/presentation/login_view_web.dart
@@ -24,14 +24,6 @@ class LoginView extends BaseLoginView {
desktop: _buildWebForm(context),
)))
),
- Obx(() {
- if (controller.isNetworkConnectionAvailable()) {
- return const SizedBox.shrink();
- }
- return Align(
- alignment: Alignment.bottomCenter,
- child: buildNetworkConnectionWidget(context));
- }),
]),
);
}
@@ -280,14 +272,14 @@ class LoginView extends BaseLoginView {
margin: const EdgeInsets.only(bottom: 16, left: 24, right: 24),
width: responsiveUtils.getDeviceWidth(context),height: 48,
child: AbsorbPointer(
- absorbing: !controller.isNetworkConnectionAvailable(),
+ absorbing: !controller.networkConnectionController.isNetworkConnectionAvailable(),
child: ElevatedButton(
key: const Key('ssoSubmitForm'),
style: ButtonStyle(
foregroundColor: MaterialStateProperty.resolveWith((Set states) => Colors.white),
backgroundColor: MaterialStateProperty.resolveWith(
(Set states) => AppColor.primaryColor.withOpacity(
- controller.isNetworkConnectionAvailable() ? 1 : 0.5)),
+ controller.networkConnectionController.isNetworkConnectionAvailable() ? 1 : 0.5)),
shape: MaterialStateProperty.all(RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
side: const BorderSide(width: 0, color: AppColor.primaryColor)
diff --git a/lib/features/mailbox_dashboard/presentation/base_mailbox_dashboard_view.dart b/lib/features/mailbox_dashboard/presentation/base_mailbox_dashboard_view.dart
index 015f30b8e..fed9861f3 100644
--- a/lib/features/mailbox_dashboard/presentation/base_mailbox_dashboard_view.dart
+++ b/lib/features/mailbox_dashboard/presentation/base_mailbox_dashboard_view.dart
@@ -3,14 +3,13 @@ import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart';
import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
-import 'package:tmail_ui_user/features/base/mixin/network_connection_mixin.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mixin/filter_email_popup_menu_mixin.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mixin/user_setting_popup_menu_mixin.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/quick_search_filter.dart';
abstract class BaseMailboxDashBoardView extends GetWidget
- with NetworkConnectionMixin, UserSettingPopupMenuMixin, FilterEmailPopupMenuMixin,
+ with UserSettingPopupMenuMixin, FilterEmailPopupMenuMixin,
AppLoaderMixin {
BaseMailboxDashBoardView({Key? key}) : super(key: key);
diff --git a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart
index 9e64c32a8..be1f21ec6 100644
--- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart
+++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart
@@ -1,6 +1,5 @@
import 'dart:async';
-import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:core/core.dart';
import 'package:dartz/dartz.dart';
import 'package:flutter/foundation.dart';
@@ -63,6 +62,7 @@ import 'package:tmail_ui_user/features/manage_account/domain/usecases/update_vac
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/vacation_response_extension.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/model/account_menu_item.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/model/manage_account_arguments.dart';
+import 'package:tmail_ui_user/features/network_status_handle/presentation/network_connnection_controller.dart';
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart';
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
import 'package:tmail_ui_user/features/thread/domain/state/empty_trash_folder_state.dart';
@@ -85,12 +85,12 @@ class MailboxDashBoardController extends ReloadableController {
final AppToast _appToast = Get.find();
final ImagePaths _imagePaths = Get.find();
final RemoveEmailDraftsInteractor _removeEmailDraftsInteractor = Get.find();
- final Connectivity _connectivity = Get.find();
final ResponsiveUtils _responsiveUtils = Get.find();
final EmailReceiveManager _emailReceiveManager = Get.find();
final SearchController searchController = Get.find();
final DownloadController downloadController = Get.find();
final AppGridDashboardController _appGridDashboardController = Get.find();
+ final NetworkConnectionController networkConnectionController = Get.find();
final MoveToMailboxInteractor _moveToMailboxInteractor;
final DeleteEmailPermanentlyInteractor _deleteEmailPermanentlyInteractor;
@@ -128,7 +128,6 @@ class MailboxDashBoardController extends ReloadableController {
PresentationMailbox? outboxMailbox;
RouterArguments? routerArguments;
- late StreamSubscription _connectivityStreamSubscription;
late StreamSubscription _emailReceiveManagerStreamSubscription;
late StreamSubscription _fileReceiveManagerStreamSubscription;
@@ -158,8 +157,6 @@ class MailboxDashBoardController extends ReloadableController {
@override
void onInit() {
_registerProgressState();
- _registerNetworkConnectivityState();
-
super.onInit();
}
@@ -287,17 +284,6 @@ class MailboxDashBoardController extends ReloadableController {
@override
void onError(error) {}
- void _registerNetworkConnectivityState() async {
- setNetworkConnectivityState(await _connectivity.checkConnectivity());
- _connectivityStreamSubscription = _connectivity.onConnectivityChanged.listen((ConnectivityResult result) {
- log('MailboxDashBoardController::_registerNetworkConnectivityState(): ConnectivityResult: ${result.name}');
- setNetworkConnectivityState(result);
- if (userProfile.value == null && result != ConnectivityResult.none) {
- _getUserProfile();
- }
- });
- }
-
void _registerPendingEmailAddress() {
_emailReceiveManagerStreamSubscription =
_emailReceiveManager.pendingEmailAddressInfo.stream.listen((emailAddress) {
@@ -1150,7 +1136,6 @@ class MailboxDashBoardController extends ReloadableController {
_emailReceiveManager.closeEmailReceiveManagerStream();
_emailReceiveManagerStreamSubscription.cancel();
_fileReceiveManagerStreamSubscription.cancel();
- _connectivityStreamSubscription.cancel();
_progressStateController.close();
Get.delete();
super.onClose();
diff --git a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view.dart b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view.dart
index 16513461c..06946d3ce 100644
--- a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view.dart
+++ b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view.dart
@@ -91,14 +91,6 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
mobile: ThreadView());
}
}),
- Obx(() {
- if (controller.isNetworkConnectionAvailable()) {
- return const SizedBox.shrink();
- }
- return Align(
- alignment: Alignment.bottomCenter,
- child: buildNetworkConnectionWidget(context));
- }),
]),
);
}
diff --git a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart
index 0a0b3b558..f788dd47f 100644
--- a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart
+++ b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart
@@ -206,15 +206,6 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
Obx(() => controller.composerOverlayState.value == ComposerOverlayState.active
? ComposerView()
: const SizedBox.shrink()),
- Obx(() {
- if (controller.isNetworkConnectionAvailable()) {
- return const SizedBox.shrink();
- } else {
- return Align(
- alignment: Alignment.bottomCenter,
- child: buildNetworkConnectionWidget(context));
- }
- }),
_buildDownloadTaskStateWidget(),
]),
),
diff --git a/lib/features/network_status_handle/presentation/network_connnection_controller.dart b/lib/features/network_status_handle/presentation/network_connnection_controller.dart
new file mode 100644
index 000000000..e1bff2fb7
--- /dev/null
+++ b/lib/features/network_status_handle/presentation/network_connnection_controller.dart
@@ -0,0 +1,77 @@
+import 'dart:async';
+
+import 'package:connectivity_plus/connectivity_plus.dart';
+import 'package:core/core.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_svg/flutter_svg.dart';
+import 'package:get/get.dart';
+import 'package:tmail_ui_user/features/base/base_controller.dart';
+import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
+import 'package:tmail_ui_user/main/routes/route_navigation.dart';
+
+class NetworkConnectionController extends BaseController {
+ final connectivityResult = Rxn();
+ final _imagePaths = Get.find();
+ final Connectivity _connectivity;
+ final AppToast _appToast = Get.find();
+ final ResponsiveUtils _responsiveUtils = Get.find();
+
+ bool _isEnableShowToastDisConnection = true;
+
+ late StreamSubscription subscription;
+
+ NetworkConnectionController(this._connectivity);
+ @override
+ void onReady() {
+ subscription = _connectivity.onConnectivityChanged.listen((ConnectivityResult result) {
+ connectivityResult.value = result;
+ if (_isEnableShowToastDisConnection && result == ConnectivityResult.none) {
+ _showToastLostConnection();
+ }
+ }) ;
+ super.onReady();
+ }
+
+ @override
+ void onClose() {
+ subscription.cancel();
+ super.onClose();
+ }
+ @override
+ void onDone() {}
+
+ @override
+ void onError(error) {}
+
+ void setNetworkConnectivityState(ConnectivityResult newConnectivityResult) {
+ connectivityResult.value = newConnectivityResult;
+ }
+
+ bool isNetworkConnectionAvailable() {
+ return connectivityResult.value != ConnectivityResult.none;
+ }
+
+ void _showToastLostConnection() {
+ if (currentContext != null && currentOverlayContext != null) {
+ _appToast.showBottomToast(
+ currentOverlayContext!,
+ AppLocalizations.of(currentContext!).no_internet_connection,
+ actionName: AppLocalizations.of(currentContext!).skip,
+ onActionClick: () {
+ _isEnableShowToastDisConnection = false;
+ ToastView.dismiss();
+ },
+ leadingIcon: SvgPicture.asset(
+ _imagePaths.icNotConnection,
+ width: 24,
+ height: 24,
+ fit: BoxFit.fill),
+ backgroundColor: Colors.redAccent,
+ textColor: Colors.white,
+ textActionColor: Colors.white,
+ maxWidth: _responsiveUtils.getMaxWidthToast(currentContext!),
+ infinityToast: true,
+ );
+ }
+ }
+}
\ No newline at end of file
diff --git a/lib/l10n/intl_messages.arb b/lib/l10n/intl_messages.arb
index f74825770..d18d7eca0 100644
--- a/lib/l10n/intl_messages.arb
+++ b/lib/l10n/intl_messages.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2022-10-12T16:44:35.025767",
+ "@@last_modified": "2022-10-18T14:05:06.644786",
"initializing_data": "Initializing data...",
"@initializing_data": {
"type": "text",
@@ -664,6 +664,12 @@
"placeholders_order": [],
"placeholders": {}
},
+ "skip": "Skip",
+ "@skip": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
"hint_input_create_new_mailbox": "Enter name of mailbox",
"@hint_input_create_new_mailbox": {
"type": "text",
diff --git a/lib/main/bindings/main_bindings.dart b/lib/main/bindings/main_bindings.dart
index 523a5bedd..2035dc015 100644
--- a/lib/main/bindings/main_bindings.dart
+++ b/lib/main/bindings/main_bindings.dart
@@ -4,6 +4,7 @@ import 'package:tmail_ui_user/main/bindings/credential/credential_bindings.dart'
import 'package:tmail_ui_user/main/bindings/local/local_bindings.dart';
import 'package:tmail_ui_user/main/bindings/network/network_bindings.dart';
import 'package:tmail_ui_user/main/bindings/network/network_isolate_binding.dart';
+import 'package:tmail_ui_user/main/bindings/network_connection/network_connection_bindings.dart';
import 'package:tmail_ui_user/main/bindings/session/session_bindings.dart';
class MainBindings extends Bindings {
@@ -14,6 +15,7 @@ class MainBindings extends Bindings {
NetworkBindings().dependencies();
NetworkIsolateBindings().dependencies();
CredentialBindings().dependencies();
+ NetWorkConnectionBindings().dependencies();
SessionBindings().dependencies();
}
}
\ No newline at end of file
diff --git a/lib/main/bindings/network/network_bindings.dart b/lib/main/bindings/network/network_bindings.dart
index 85b1b35e8..859aa5a54 100644
--- a/lib/main/bindings/network/network_bindings.dart
+++ b/lib/main/bindings/network/network_bindings.dart
@@ -25,9 +25,9 @@ class NetworkBindings extends Bindings {
@override
void dependencies() {
+ _bindingConnection();
_bindingDio();
_bindingApi();
- _bindingConnection();
_bindingException();
}
diff --git a/lib/main/bindings/network_connection/network_connection_bindings.dart b/lib/main/bindings/network_connection/network_connection_bindings.dart
new file mode 100644
index 000000000..14db154a9
--- /dev/null
+++ b/lib/main/bindings/network_connection/network_connection_bindings.dart
@@ -0,0 +1,32 @@
+import 'package:connectivity_plus/connectivity_plus.dart';
+import 'package:get/get.dart';
+import 'package:tmail_ui_user/features/base/base_bindings.dart';
+import 'package:tmail_ui_user/features/network_status_handle/presentation/network_connnection_controller.dart';
+
+class NetWorkConnectionBindings extends BaseBindings {
+
+ @override
+ void bindingsController() {
+ Get.put(NetworkConnectionController(Get.find()));
+ }
+
+ @override
+ void bindingsDataSource() {
+ }
+
+ @override
+ void bindingsDataSourceImpl() {
+ }
+
+ @override
+ void bindingsInteractor() {
+ }
+
+ @override
+ void bindingsRepository() {
+ }
+
+ @override
+ void bindingsRepositoryImpl() {
+ }
+}
\ No newline at end of file
diff --git a/lib/main/localizations/app_localizations.dart b/lib/main/localizations/app_localizations.dart
index 7993e1daa..f6086fc67 100644
--- a/lib/main/localizations/app_localizations.dart
+++ b/lib/main/localizations/app_localizations.dart
@@ -687,6 +687,13 @@ class AppLocalizations {
);
}
+ String get skip {
+ return Intl.message(
+ 'Skip',
+ name: 'skip'
+ );
+ }
+
String get hint_input_create_new_mailbox {
return Intl.message(
'Enter name of mailbox',