From 77246a9d368c8c353c284af4dfa5b98a9afd2528 Mon Sep 17 00:00:00 2001 From: dab246 Date: Fri, 12 Jul 2024 19:02:47 +0700 Subject: [PATCH] TF-2928 Handle bad credential exception --- lib/features/base/base_controller.dart | 35 +++++++++++++++---- .../presentation/composer_controller.dart | 6 ++-- 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/lib/features/base/base_controller.dart b/lib/features/base/base_controller.dart index 289a63a3f..86584d574 100644 --- a/lib/features/base/base_controller.dart +++ b/lib/features/base/base_controller.dart @@ -19,6 +19,7 @@ import 'package:fcm/model/firebase_capability.dart'; import 'package:fcm/model/firebase_registration_id.dart'; import 'package:flutter/material.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart'; +import 'package:flutter_svg/flutter_svg.dart'; import 'package:forward/forward/capability_forward.dart'; import 'package:get/get.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; @@ -96,12 +97,10 @@ abstract class BaseController extends GetxController FpsCallback? fpsCallback; @override - void onInit() { - super.onInit(); + void onReady() { + super.onReady(); if (PlatformInfo.isWeb) { - WidgetsBinding.instance.addPostFrameCallback((_) { - _triggerBrowserReloadListener(); - }); + _triggerBrowserReloadListener(); } } @@ -190,7 +189,7 @@ abstract class BaseController extends GetxController if (exception is ConnectionError) { _handleConnectionErrorException(); } else if (exception is BadCredentialsException) { - _executeBeforeUnloadAndLogOut(); + _handleBadCredentialsException(); } } @@ -201,7 +200,7 @@ abstract class BaseController extends GetxController } else if (exception is ConnectionError) { _handleConnectionErrorException(); } else if (exception is BadCredentialsException) { - _executeBeforeUnloadAndLogOut(); + _handleBadCredentialsException(); } } @@ -232,6 +231,28 @@ abstract class BaseController extends GetxController } } + void _handleBadCredentialsException() { + if (PlatformInfo.isWeb) { + if (currentContext == null) { + _executeBeforeUnloadAndLogOut(); + return; + } + + showConfirmDialogAction( + currentContext!, + AppLocalizations.of(currentContext!).dialogMessageSessionHasExpired, + AppLocalizations.of(currentContext!).reconnect, + title: AppLocalizations.of(currentContext!).sessionExpired, + alignCenter: true, + outsideDismissible: false, + icon: SvgPicture.asset(imagePaths.icTMailLogo, width: 64, height: 64), + paddingButton: const EdgeInsets.symmetric(horizontal: 8, vertical: 16), + onConfirmAction: _executeBeforeUnloadAndLogOut); + } else if (PlatformInfo.isMobile) { + clearDataAndGoToLoginPage(); + } + } + void handleFailureViewState(Failure failure) async { logError('$runtimeType::handleFailureViewState():Failure = $failure'); if (failure is LogoutOidcFailure) { diff --git a/lib/features/composer/presentation/composer_controller.dart b/lib/features/composer/presentation/composer_controller.dart index a390f3d91..452754248 100644 --- a/lib/features/composer/presentation/composer_controller.dart +++ b/lib/features/composer/presentation/composer_controller.dart @@ -212,9 +212,6 @@ class ComposerController extends BaseController with DragDropFileMixin implement void onInit() { super.onInit(); if (PlatformInfo.isWeb) { - WidgetsBinding.instance.addPostFrameCallback((_) { - _triggerBrowserEventListener(); - }); richTextWebController = getBinding(); } else { richTextMobileTabletController = getBinding(); @@ -228,6 +225,9 @@ class ComposerController extends BaseController with DragDropFileMixin implement @override void onReady() { + if (PlatformInfo.isWeb) { + _triggerBrowserEventListener(); + } _initEmail(); if (PlatformInfo.isMobile) { Future.delayed(const Duration(milliseconds: 500), _checkContactPermission);