TF-1042:Connection pop up never be disappear

This commit is contained in:
ManhNTX
2022-10-18 14:36:33 +07:00
committed by Dat H. Pham
parent 9626d12c77
commit df7f9b89ba
20 changed files with 191 additions and 165 deletions
+6 -1
View File
@@ -1,3 +1,8 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12 2C6.48 2 2 6.48 2 12C2 17.52 6.48 22 12 22C17.52 22 22 17.52 22 12C22 6.48 17.52 2 12 2ZM11 16V12C11 11.4477 11.4477 11 12 11C12.5523 11 13 11.4477 13 12V16C13 16.5523 12.5523 17 12 17C11.4477 17 11 16.5523 11 16ZM10.7502 8.24998V7.7502C10.7502 7.19791 11.1979 6.7502 11.7502 6.7502H12.25C12.8023 6.7502 13.25 7.19791 13.25 7.7502V8.24998C13.25 8.80226 12.8023 9.24998 12.25 9.24998H11.7502C11.1979 9.24998 10.7502 8.80226 10.7502 8.24998Z" fill="#FF0000"/>
<mask id="mask0_6922_18397" style="mask-type:alpha" x="1" y="1" width="22" height="22">
<path d="M14.896 1.71429C15.4643 1.71429 16.0093 1.94006 16.4112 2.34192L21.658 7.58877C22.0599 7.99063 22.2857 8.53568 22.2857 9.104V14.896C22.2857 15.4643 22.0599 16.0094 21.658 16.4112L16.4112 21.6581C16.0093 22.06 15.4643 22.2857 14.896 22.2857H9.10394C8.53562 22.2857 7.99057 22.06 7.58871 21.6581L2.34186 16.4112C1.94 16.0094 1.71423 15.4643 1.71423 14.896V9.104C1.71423 8.53568 1.94 7.99063 2.34186 7.58877L7.58871 2.34192C7.99057 1.94006 8.53562 1.71429 9.10394 1.71429H14.896ZM14.896 3.42858H9.10394C8.99027 3.42858 8.88126 3.47373 8.80089 3.55411L3.55404 8.80095C3.47367 8.88133 3.42852 8.99033 3.42852 9.104V14.896C3.42852 15.0097 3.47367 15.1187 3.55404 15.1991L8.80089 20.4459C8.88126 20.5263 8.99027 20.5714 9.10394 20.5714H14.896C15.0096 20.5714 15.1186 20.5263 15.199 20.4459L20.4459 15.1991C20.5262 15.1187 20.5714 15.0097 20.5714 14.896V9.104C20.5714 8.99033 20.5262 8.88133 20.4459 8.80095L15.199 3.55411C15.1186 3.47373 15.0096 3.42858 14.896 3.42858ZM11.9999 14.4001L12.1052 14.4054C12.6238 14.4581 13.0285 14.8961 13.0285 15.4286C13.0285 15.9966 12.5681 16.4571 12 16.4571L11.8948 16.4518C11.3762 16.3991 10.9715 15.9611 10.9715 15.4286C10.9715 14.8606 11.4319 14.4001 11.9999 14.4001ZM11.9999 6.85715C12.4733 6.85715 12.8571 7.24091 12.8571 7.71429V12C12.8571 12.4734 12.4733 12.8572 11.9999 12.8572C11.5266 12.8572 11.1428 12.4734 11.1428 12V7.71429C11.1428 7.24091 11.5266 6.85715 11.9999 6.85715Z" fill="#007AFF"/>
</mask>
<g mask="url(#mask0_6922_18397)">
<rect width="24" height="24" fill="white"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 574 B

After

Width:  |  Height:  |  Size: 1.7 KiB

+4 -1
View File
@@ -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,
);
}
@@ -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<ToastCard>
@override
Widget build(BuildContext context) => FadeTransition(
opacity: _fadeAnimation as Animation<double>,
child: Center(
child: Material(
color: Colors.transparent,
child: widget.child,
),
),
child: widget.child,
);
}
-10
View File
@@ -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<Either<Failure, Success>>(Right(UIState.idle));
final connectivityResult = Rxn<ConnectivityResult>();
FpsCallback? fpsCallback;
void consumeState(Stream<Either<Failure, Success>> 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<Either<Failure, Success>> newStateStream) async {
final state = await newStateStream;
state.fold(
@@ -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<ImagePaths>();
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)),
)
)
);
}
}
@@ -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<EmailController> with NetworkConnectionMixin {
class EmailView extends GetWidget<EmailController> {
static const double maxSizeFullDisplayEmailAddressArrowDownButton = 30.0;
@@ -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<LoginController> with NetworkConnectionMixin {
abstract class BaseLoginView extends GetWidget<LoginController> {
BaseLoginView({Key? key}) : super(key: key);
final loginController = Get.find<LoginController>();
@@ -72,14 +71,14 @@ abstract class BaseLoginView extends GetWidget<LoginController> 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<Color>((Set<MaterialState> states) => Colors.white),
backgroundColor: MaterialStateProperty.resolveWith<Color>(
(Set<MaterialState> 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)
@@ -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<Connectivity>();
final TextEditingController urlInputController = TextEditingController();
late StreamSubscription _connectivityStreamSubscription;
final NetworkConnectionController networkConnectionController = Get.find<NetworkConnectionController>();
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();
}
@@ -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<Color>((Set<MaterialState> states) => Colors.white),
backgroundColor: MaterialStateProperty.resolveWith<Color>(
(Set<MaterialState> 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)
@@ -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<Color>((Set<MaterialState> states) => Colors.white),
backgroundColor: MaterialStateProperty.resolveWith<Color>(
(Set<MaterialState> 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)
@@ -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<MailboxDashBoardController>
with NetworkConnectionMixin, UserSettingPopupMenuMixin, FilterEmailPopupMenuMixin,
with UserSettingPopupMenuMixin, FilterEmailPopupMenuMixin,
AppLoaderMixin {
BaseMailboxDashBoardView({Key? key}) : super(key: key);
@@ -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<AppToast>();
final ImagePaths _imagePaths = Get.find<ImagePaths>();
final RemoveEmailDraftsInteractor _removeEmailDraftsInteractor = Get.find<RemoveEmailDraftsInteractor>();
final Connectivity _connectivity = Get.find<Connectivity>();
final ResponsiveUtils _responsiveUtils = Get.find<ResponsiveUtils>();
final EmailReceiveManager _emailReceiveManager = Get.find<EmailReceiveManager>();
final SearchController searchController = Get.find<SearchController>();
final DownloadController downloadController = Get.find<DownloadController>();
final AppGridDashboardController _appGridDashboardController = Get.find<AppGridDashboardController>();
final NetworkConnectionController networkConnectionController = Get.find<NetworkConnectionController>();
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<DownloadController>();
super.onClose();
@@ -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));
}),
]),
);
}
@@ -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(),
]),
),
@@ -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<ConnectivityResult>();
final _imagePaths = Get.find<ImagePaths>();
final Connectivity _connectivity;
final AppToast _appToast = Get.find<AppToast>();
final ResponsiveUtils _responsiveUtils = Get.find<ResponsiveUtils>();
bool _isEnableShowToastDisConnection = true;
late StreamSubscription<ConnectivityResult> 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,
);
}
}
}
+7 -1
View File
@@ -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",
+2
View File
@@ -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();
}
}
@@ -25,9 +25,9 @@ class NetworkBindings extends Bindings {
@override
void dependencies() {
_bindingConnection();
_bindingDio();
_bindingApi();
_bindingConnection();
_bindingException();
}
@@ -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<Connectivity>()));
}
@override
void bindingsDataSource() {
}
@override
void bindingsDataSourceImpl() {
}
@override
void bindingsInteractor() {
}
@override
void bindingsRepository() {
}
@override
void bindingsRepositoryImpl() {
}
}
@@ -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',