TF-1042:Connection pop up never be disappear
This commit is contained in:
@@ -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 |
@@ -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,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
+2
-17
@@ -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,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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",
|
||||
|
||||
@@ -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',
|
||||
|
||||
Reference in New Issue
Block a user