TF-1877 Fix error TextEditingController was used after being disposed on some screen

(cherry picked from commit 50e4c6ec55eea21a45a5a8dd31cd239245248df3)
This commit is contained in:
dab246
2023-06-30 15:45:59 +07:00
committed by Dat Vu
parent 32adfb3581
commit 6c06d0742c
30 changed files with 377 additions and 942 deletions
@@ -60,15 +60,13 @@ class _TextFieldBuilderState extends State<TextFieldBuilder> {
@override
void initState() {
super.initState();
if (widget.fromValue != null) {
_controller = TextEditingController.fromValue(TextEditingValue(text: widget.fromValue!));
} else if (widget.controller != null) {
_controller = widget.controller!;
} else {
_controller = TextEditingController();
_controller = widget.controller ?? TextEditingController();
}
_textDirection = widget.textDirection;
super.initState();
}
@override
@@ -58,9 +58,9 @@ class _TypeAheadFormFieldBuilderState<T> extends State<TypeAheadFormFieldBuilder
@override
void initState() {
super.initState();
_textDirection = widget.textDirection;
_controller = widget.controller ?? TextEditingController();
super.initState();
}
@override
+2
View File
@@ -1,10 +1,12 @@
import 'package:core/utils/app_logger.dart';
import 'package:get/get_instance/src/bindings_interface.dart';
abstract class BaseBindings extends Bindings {
@override
void dependencies() {
log('BaseBindings::dependencies():');
bindingsDataSourceImpl();
bindingsDataSource();
bindingsRepositoryImpl();
+1 -3
View File
@@ -20,7 +20,6 @@ import 'package:model/account/authentication_type.dart';
import 'package:rule_filter/rule_filter/capability_rule_filter.dart';
import 'package:tmail_ui_user/features/base/mixin/message_dialog_action_mixin.dart';
import 'package:tmail_ui_user/features/base/mixin/popup_context_menu_action_mixin.dart';
import 'package:tmail_ui_user/features/base/mixin/view_as_dialog_action_mixin.dart';
import 'package:tmail_ui_user/features/caching/caching_manager.dart';
import 'package:tmail_ui_user/features/email/presentation/mdn_interactor_bindings.dart';
import 'package:tmail_ui_user/features/login/data/network/config/authorization_interceptors.dart';
@@ -55,8 +54,7 @@ import 'package:tmail_ui_user/main/utils/app_utils.dart';
abstract class BaseController extends GetxController
with MessageDialogActionMixin,
PopupContextMenuActionMixin,
ViewAsDialogActionMixin {
PopupContextMenuActionMixin {
final CachingManager cachingManager = Get.find<CachingManager>();
final languageCacheManager = Get.find<LanguageCacheManager>();
+11 -25
View File
@@ -41,6 +41,7 @@ import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_na
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart';
import 'package:tmail_ui_user/main/routes/dialog_router.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
@@ -378,32 +379,17 @@ abstract class BaseMailboxController extends BaseController {
mailboxIdSelected: mailboxSelected.id
);
if (PlatformInfo.isWeb) {
showDialogDestinationPicker(
context: context,
arguments: arguments,
onSelectedMailbox: (destinationMailbox) {
onMovingMailboxAction(
mailboxSelected,
destinationMailbox == PresentationMailbox.unifiedMailbox
? null
: destinationMailbox
);
}
);
} else {
final destinationMailbox = await push(
AppRoutes.destinationPicker,
arguments: arguments);
final destinationMailbox = PlatformInfo.isWeb
? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.destinationPicker, arguments: arguments)
: await push(AppRoutes.destinationPicker, arguments: arguments);
if (destinationMailbox is PresentationMailbox) {
onMovingMailboxAction(
mailboxSelected,
destinationMailbox == PresentationMailbox.unifiedMailbox
? null
: destinationMailbox
);
}
if (destinationMailbox is PresentationMailbox) {
onMovingMailboxAction(
mailboxSelected,
destinationMailbox == PresentationMailbox.unifiedMailbox
? null
: destinationMailbox
);
}
}
}
@@ -1,168 +0,0 @@
import 'package:flutter/material.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
import 'package:model/mailbox/presentation_mailbox.dart';
import 'package:tmail_ui_user/features/contact/presentation/contact_bindings.dart';
import 'package:tmail_ui_user/features/contact/presentation/contact_view.dart';
import 'package:tmail_ui_user/features/contact/presentation/model/contact_arguments.dart';
import 'package:tmail_ui_user/features/destination_picker/presentation/destination_picker_bindings.dart';
import 'package:tmail_ui_user/features/destination_picker/presentation/destination_picker_view.dart';
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart';
import 'package:tmail_ui_user/features/identity_creator/presentation/identity_creator_bindings.dart';
import 'package:tmail_ui_user/features/identity_creator/presentation/identity_creator_view.dart';
import 'package:tmail_ui_user/features/identity_creator/presentation/model/identity_creator_arguments.dart';
import 'package:tmail_ui_user/features/mailbox_creator/presentation/mailbox_creator_bindings.dart';
import 'package:tmail_ui_user/features/mailbox_creator/presentation/mailbox_creator_view.dart';
import 'package:tmail_ui_user/features/mailbox_creator/presentation/model/mailbox_creator_arguments.dart';
import 'package:tmail_ui_user/features/mailbox_creator/presentation/model/new_mailbox_arguments.dart';
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/rules_filter_creator_arguments.dart';
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/rules_filter_creator_bindings.dart';
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/rules_filter_creator_view.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
mixin ViewAsDialogActionMixin {
void showDialogDestinationPicker({
required BuildContext context,
required DestinationPickerArguments arguments,
required Function(PresentationMailbox) onSelectedMailbox
}) {
DestinationPickerBindings().dependencies();
showGeneralDialog(
context: context,
barrierDismissible: true,
barrierLabel: '',
barrierColor: Colors.black.withAlpha(24),
pageBuilder: (context, animation, secondaryAnimation) {
return DestinationPickerView.fromArguments(
arguments,
onDismissCallback: () {
DestinationPickerBindings().dispose();
popBack();
},
onSelectedMailboxCallback: (destinationMailbox) {
DestinationPickerBindings().dispose();
popBack();
if (destinationMailbox is PresentationMailbox) {
onSelectedMailbox.call(destinationMailbox);
}
});
});
}
void showDialogMailboxCreator({
required BuildContext context,
required MailboxCreatorArguments arguments,
required Function(NewMailboxArguments) onCreatedMailbox
}) {
MailboxCreatorBindings().dependencies();
showGeneralDialog(
context: context,
barrierDismissible: true,
barrierLabel: '',
barrierColor: Colors.black.withAlpha(24),
pageBuilder: (context, animation, secondaryAnimation) {
return MailboxCreatorView.fromArguments(
arguments,
onDismissCallback: () {
MailboxCreatorBindings().dispose();
popBack();
},
onCreatedMailboxCallback: (arguments) {
MailboxCreatorBindings().dispose();
popBack();
if (arguments is NewMailboxArguments) {
onCreatedMailbox.call(arguments);
}
});
});
}
void showDialogContactView({
required BuildContext context,
required ContactArguments arguments,
required Function(EmailAddress) onSelectedContact
}) {
ContactBindings().dependencies();
showGeneralDialog(
context: context,
barrierDismissible: true,
barrierLabel: '',
barrierColor: Colors.black.withAlpha(24),
pageBuilder: (context, animation, secondaryAnimation) {
return ContactView.fromArguments(
arguments,
onDismissCallback: () {
ContactBindings().dispose();
popBack();
},
onSelectedContactCallback: (emailAddress) {
ContactBindings().dispose();
popBack();
onSelectedContact.call(emailAddress);
});
});
}
void showDialogIdentityCreator({
required BuildContext context,
required IdentityCreatorArguments arguments,
required Function(dynamic) onCreatedIdentity
}) {
IdentityCreatorBindings().dependencies();
showGeneralDialog(
context: context,
barrierDismissible: true,
barrierLabel: '',
barrierColor: Colors.black.withAlpha(24),
pageBuilder: (context, animation, secondaryAnimation) {
return IdentityCreatorView.fromArguments(
arguments,
onDismissCallback: () {
IdentityCreatorBindings().dispose();
popBack();
},
onCreatedIdentityCallback: (args) {
IdentityCreatorBindings().dispose();
popBack();
onCreatedIdentity.call(args);
});
});
}
void showDialogRuleFilterCreator({
required BuildContext context,
required RulesFilterCreatorArguments arguments,
required Function(dynamic) onCreatedRuleFilter
}) {
RulesFilterCreatorBindings().dependencies();
showGeneralDialog(
context: context,
barrierDismissible: true,
barrierLabel: '',
barrierColor: Colors.black.withAlpha(24),
pageBuilder: (context, animation, secondaryAnimation) {
return RuleFilterCreatorView.fromArguments(
arguments,
onDismissCallback: () {
RulesFilterCreatorBindings().dispose();
popBack();
},
onCreatedRuleFilterCallback: (args) {
RulesFilterCreatorBindings().dispose();
popBack();
onCreatedRuleFilter.call(args);
});
});
}
}
@@ -22,8 +22,8 @@ import 'package:tmail_ui_user/main/routes/route_navigation.dart';
class ContactController extends BaseController {
TextEditingController? textInputSearchController;
FocusNode? textInputSearchFocus;
final TextEditingController textInputSearchController = TextEditingController();
final FocusNode textInputSearchFocus = FocusNode();
ContactSuggestionSource _contactSuggestionSource = ContactSuggestionSource.tMailContact;
final searchQuery = SearchQuery.initial().obs;
@@ -32,9 +32,9 @@ class ContactController extends BaseController {
GetAutoCompleteWithDeviceContactInteractor? _getAutoCompleteWithDeviceContactInteractor;
GetAutoCompleteInteractor? _getAutoCompleteInteractor;
late Debouncer<String> _deBouncerTime;
late AccountId _accountId;
late Session _session;
final Debouncer<String> _deBouncerTime = Debouncer<String>(const Duration(milliseconds: 500), initialValue: '');
AccountId? _accountId;
Session? _session;
ContactArguments? arguments;
EmailAddress? contactSelected;
@@ -44,14 +44,19 @@ class ContactController extends BaseController {
@override
void onInit() {
super.onInit();
textInputSearchController = TextEditingController();
textInputSearchFocus = FocusNode();
_initializeDebounceTimeTextSearchChange();
log('ContactController::onInit():arguments: ${Get.arguments}');
arguments = Get.arguments;
_deBouncerTime.values.listen((value) {
searchQuery.value = SearchQuery(value);
_searchContactByNameOrEmail(searchQuery.value.value);
});
}
@override
void onReady() async {
textInputSearchFocus?.requestFocus();
super.onReady();
log('ContactController::onReady():');
textInputSearchFocus.requestFocus();
if (arguments != null) {
_accountId = arguments!.accountId;
_session = arguments!.session;
@@ -68,25 +73,17 @@ class ContactController extends BaseController {
const Duration(milliseconds: 500),
() => _checkContactPermission());
}
super.onReady();
}
@override
void onClose() {
_disposeWidget();
log('ContactController::onClose():');
textInputSearchFocus.dispose();
textInputSearchController.dispose();
_deBouncerTime.cancel();
super.onClose();
}
void _initializeDebounceTimeTextSearchChange() {
_deBouncerTime = Debouncer<String>(
const Duration(milliseconds: 500),
initialValue: '');
_deBouncerTime.values.listen((value) async {
searchQuery.value = SearchQuery(value);
_searchContactByNameOrEmail(searchQuery.value.value);
});
}
void onTextSearchChange(String text) {
_deBouncerTime.value = text;
}
@@ -96,9 +93,9 @@ class ContactController extends BaseController {
}
void clearAllTextInputSearchForm() {
textInputSearchController?.clear();
textInputSearchController.clear();
searchQuery.value = SearchQuery.initial();
textInputSearchFocus?.requestFocus();
textInputSearchFocus.requestFocus();
}
void _checkContactPermission() async {
@@ -167,32 +164,14 @@ class ContactController extends BaseController {
}
}
void _disposeWidget() {
textInputSearchFocus?.dispose();
textInputSearchFocus = null;
textInputSearchController?.dispose();
textInputSearchController = null;
_deBouncerTime.cancel();
}
void selectContact(BuildContext context, EmailAddress emailAddress) {
KeyboardUtils.hideKeyboard(context);
if (PlatformInfo.isWeb) {
onSelectedContactCallback?.call(emailAddress);
} else {
popBack(result: emailAddress);
}
popBack(result: emailAddress);
}
void closeContactView(BuildContext context) {
clearAllTextInputSearchForm();
KeyboardUtils.hideKeyboard(context);
if (PlatformInfo.isWeb) {
onDismissContactView?.call();
} else {
popBack();
}
popBack();
}
}
@@ -8,7 +8,6 @@ import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
import 'package:tmail_ui_user/features/composer/presentation/widgets/suggestion_email_address.dart';
import 'package:tmail_ui_user/features/contact/presentation/contact_controller.dart';
import 'package:tmail_ui_user/features/contact/presentation/model/contact_arguments.dart';
import 'package:tmail_ui_user/features/contact/presentation/utils/contact_utils.dart';
import 'package:tmail_ui_user/features/contact/presentation/widgets/app_bar_contact_widget.dart';
import 'package:tmail_ui_user/features/contact/presentation/widgets/contact_suggestion_box_item.dart';
@@ -20,23 +19,7 @@ class ContactView extends GetWidget<ContactController> {
final _responsiveUtils = Get.find<ResponsiveUtils>();
final _imagePaths = Get.find<ImagePaths>();
@override
final controller = Get.find<ContactController>();
ContactView({Key? key}) : super(key: key) {
controller.arguments = Get.arguments;
}
ContactView.fromArguments(
ContactArguments arguments, {
Key? key,
SelectedContactCallbackAction? onSelectedContactCallback,
VoidCallback? onDismissCallback
}) : super(key: key) {
controller.arguments = arguments;
controller.onSelectedContactCallback = onSelectedContactCallback;
controller.onDismissContactView = onDismissCallback;
}
ContactView({super.key});
@override
Widget build(BuildContext context) {
@@ -82,7 +65,7 @@ class ContactView extends GetWidget<ContactController> {
imagePaths: _imagePaths,
searchQuery: controller.searchQuery.value,
searchFocusNode: controller.textInputSearchFocus,
searchInputController :controller.textInputSearchController,
searchInputController: controller.textInputSearchController,
hasBackButton: false,
hasSearchButton: true,
padding: EdgeInsets.zero,
@@ -104,8 +104,4 @@ class DestinationPickerBindings extends BaseBindings {
Get.find<StateDataSource>(),
));
}
void dispose() {
Get.delete<DestinationPickerController>();
}
}
@@ -3,7 +3,7 @@ import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:core/presentation/utils/app_toast.dart';
import 'package:core/presentation/utils/keyboard_utils.dart';
import 'package:core/utils/platform_info.dart';
import 'package:core/utils/app_logger.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
@@ -41,8 +41,6 @@ import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
import 'package:uuid/uuid.dart';
typedef OnSelectedMailboxCallback = Function(PresentationMailbox? destinationMailbox);
class DestinationPickerController extends BaseMailboxController {
final _uuid = Get.find<Uuid>();
@@ -59,19 +57,16 @@ class DestinationPickerController extends BaseMailboxController {
final mailboxDestination = Rxn<PresentationMailbox>();
final newNameMailbox = Rxn<String>();
FocusNode? nameInputFocusNode;
TextEditingController? nameInputController;
TextEditingController? searchInputController;
FocusNode? searchFocus;
DestinationPickerArguments? arguments;
Session? _session;
AccountId? accountId;
MailboxId? mailboxIdSelected;
OnSelectedMailboxCallback? onSelectedMailboxCallback;
VoidCallback? onDismissDestinationPicker;
List<String> listMailboxNameAsStringExist = <String>[];
final FocusNode nameInputFocusNode = FocusNode();
final FocusNode searchFocus = FocusNode();
final TextEditingController nameInputController = TextEditingController();
final TextEditingController searchInputController = TextEditingController();
final destinationListScrollController = ScrollController();
DestinationPickerController(
@@ -91,17 +86,14 @@ class DestinationPickerController extends BaseMailboxController {
@override
void onInit() {
super.onInit();
nameInputFocusNode = FocusNode();
nameInputController = TextEditingController();
searchInputController = TextEditingController();
searchFocus = FocusNode();
searchFocus?.unfocus();
nameInputFocusNode?.unfocus();
log('DestinationPickerController::onInit():arguments: ${Get.arguments}');
arguments = Get.arguments;
}
@override
void onReady() {
super.onReady();
log('DestinationPickerController::onReady():');
if (arguments != null) {
mailboxAction.value = arguments!.mailboxAction;
mailboxIdSelected = arguments!.mailboxIdSelected;
@@ -143,7 +135,11 @@ class DestinationPickerController extends BaseMailboxController {
@override
void onClose() {
_disposeWidget();
log('DestinationPickerController::onClose():');
nameInputFocusNode.dispose();
nameInputController.dispose();
searchFocus.dispose();
searchInputController.dispose();
destinationListScrollController.dispose();
super.onClose();
}
@@ -199,7 +195,7 @@ class DestinationPickerController extends BaseMailboxController {
String? getErrorInputNameString(BuildContext context) {
final nameMailbox = newNameMailbox.value;
if (nameInputFocusNode?.hasFocus == false && nameMailbox == null) {
if (nameInputFocusNode.hasFocus == false && nameMailbox == null) {
return null;
}
@@ -224,7 +220,7 @@ class DestinationPickerController extends BaseMailboxController {
bool isCreateMailboxValidated(BuildContext context) {
final nameValidated = getErrorInputNameString(context);
if (nameInputFocusNode?.hasFocus == false && newNameMailbox.value == null) {
if (nameInputFocusNode.hasFocus == false && newNameMailbox.value == null) {
return false;
}
@@ -265,13 +261,13 @@ class DestinationPickerController extends BaseMailboxController {
listMailboxSearched.clear();
searchState.value = searchState.value.disableSearchState();
searchQuery.value = SearchQuery.initial();
searchInputController?.clear();
searchInputController.clear();
KeyboardUtils.hideKeyboard(context);
}
void clearSearchText() {
searchQuery.value = SearchQuery.initial();
searchFocus?.requestFocus();
searchFocus.requestFocus();
listMailboxSearched.clear();
}
@@ -377,12 +373,7 @@ class DestinationPickerController extends BaseMailboxController {
AppLocalizations.of(context).toastMessageErrorNotSelectedFolderWhenCreateNewMailbox);
return;
}
if (PlatformInfo.isWeb) {
onSelectedMailboxCallback?.call(mailboxDestination.value);
} else {
popBack(result: mailboxDestination.value);
}
popBack(result: mailboxDestination.value);
}
void createNewMailboxAction(BuildContext context) {
@@ -408,29 +399,13 @@ class DestinationPickerController extends BaseMailboxController {
}
void backToDestinationScreen(BuildContext context) {
nameInputController?.clear();
nameInputController.clear();
KeyboardUtils.hideKeyboard(context);
destinationScreenType.value = DestinationScreenType.destinationPicker;
}
void _disposeWidget() {
nameInputFocusNode?.dispose();
nameInputFocusNode = null;
nameInputController?.dispose();
nameInputController = null;
searchFocus?.dispose();
searchFocus = null;
searchInputController?.dispose();
searchInputController = null;
}
void closeDestinationPicker(BuildContext context) {
KeyboardUtils.hideKeyboard(context);
if (PlatformInfo.isWeb) {
onDismissDestinationPicker?.call();
} else {
popBack();
}
popBack();
}
}
@@ -19,7 +19,6 @@ import 'package:model/mailbox/presentation_mailbox.dart';
import 'package:pointer_interceptor/pointer_interceptor.dart';
import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
import 'package:tmail_ui_user/features/destination_picker/presentation/destination_picker_controller.dart';
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart';
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_screen_type.dart';
import 'package:tmail_ui_user/features/destination_picker/presentation/widgets/destination_picker_search_mailbox_item_builder.dart';
import 'package:tmail_ui_user/features/destination_picker/presentation/widgets/top_bar_destination_picker_builder.dart';
@@ -45,20 +44,7 @@ class DestinationPickerView extends GetWidget<DestinationPickerController>
@override
final controller = Get.find<DestinationPickerController>();
DestinationPickerView({Key? key}) : super(key: key) {
controller.arguments = Get.arguments;
}
DestinationPickerView.fromArguments(
DestinationPickerArguments arguments, {
Key? key,
OnSelectedMailboxCallback? onSelectedMailboxCallback,
VoidCallback? onDismissCallback
}) : super(key: key) {
controller.arguments = arguments;
controller.onSelectedMailboxCallback = onSelectedMailboxCallback;
controller.onDismissDestinationPicker = onDismissCallback;
}
DestinationPickerView({super.key});
@override
Widget build(BuildContext context) {
@@ -68,6 +68,7 @@ import 'package:tmail_ui_user/features/thread/domain/constants/thread_constants.
import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_type.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart';
import 'package:tmail_ui_user/main/routes/dialog_router.dart';
import 'package:tmail_ui_user/main/routes/navigation_router.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
import 'package:tmail_ui_user/main/routes/route_utils.dart';
@@ -678,39 +679,23 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
session,
mailboxIdSelected: currentMailbox.mailboxId
);
if (PlatformInfo.isWeb) {
showDialogDestinationPicker(
context: context,
arguments: arguments,
onSelectedMailbox: (destinationMailbox) {
if (mailboxDashBoardController.sessionCurrent != null) {
_dispatchMoveToAction(
context,
accountId,
mailboxDashBoardController.sessionCurrent!,
email,
currentMailbox,
destinationMailbox);
}
});
} else {
final destinationMailbox = await push(
AppRoutes.destinationPicker,
arguments: arguments);
if (destinationMailbox != null &&
final destinationMailbox = PlatformInfo.isWeb
? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.destinationPicker, arguments: arguments)
: await push(AppRoutes.destinationPicker, arguments: arguments);
if (destinationMailbox != null &&
destinationMailbox is PresentationMailbox &&
mailboxDashBoardController.sessionCurrent != null &&
context.mounted
) {
_dispatchMoveToAction(
context,
accountId,
mailboxDashBoardController.sessionCurrent!,
email,
currentMailbox,
destinationMailbox);
}
) {
_dispatchMoveToAction(
context,
accountId,
mailboxDashBoardController.sessionCurrent!,
email,
currentMailbox,
destinationMailbox);
}
}
}
@@ -1182,25 +1167,12 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
session,
emailAddress: emailAddress);
if (PlatformInfo.isWeb) {
showDialogRuleFilterCreator(
context: context,
arguments: arguments,
onCreatedRuleFilter: (arguments) {
if (arguments is CreateNewEmailRuleFilterRequest) {
_createNewRuleFilterAction(accountId, arguments);
}
}
);
} else {
final newRuleFilterRequest = await push(
AppRoutes.rulesFilterCreator,
arguments: arguments
);
final newRuleFilterRequest = PlatformInfo.isWeb
? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.rulesFilterCreator, arguments: arguments)
: await push(AppRoutes.rulesFilterCreator, arguments: arguments);
if (newRuleFilterRequest is CreateNewEmailRuleFilterRequest) {
_createNewRuleFilterAction(accountId, newRuleFilterRequest);
}
if (newRuleFilterRequest is CreateNewEmailRuleFilterRequest) {
_createNewRuleFilterAction(accountId, newRuleFilterRequest);
}
}
}
@@ -18,8 +18,4 @@ class IdentityCreatorBindings extends Bindings {
Get.find<IdentityUtils>()
));
}
void dispose() {
Get.delete<IdentityCreatorController>();
}
}
@@ -5,10 +5,7 @@ import 'package:core/presentation/state/success.dart';
import 'package:core/utils/app_logger.dart';
import 'package:core/utils/platform_info.dart';
import 'package:flutter/cupertino.dart';
import 'package:get/get_core/get_core.dart';
import 'package:get/get_instance/get_instance.dart';
import 'package:get/get_rx/get_rx.dart';
import 'package:html_editor_enhanced/html_editor.dart';
import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart';
import 'package:jmap_dart_client/jmap/core/id.dart';
@@ -40,8 +37,6 @@ import 'package:tmail_ui_user/main/error/capability_validator.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
import 'package:uuid/uuid.dart';
typedef OnCreatedIdentityCallback = Function(dynamic arguments);
class IdentityCreatorController extends BaseController {
final VerifyNameInteractor _verifyNameInteractor;
@@ -62,13 +57,13 @@ class IdentityCreatorController extends BaseController {
final isDefaultIdentity = RxBool(false);
final isDefaultIdentitySupported = RxBool(false);
late RichTextController keyboardRichTextController;
late RichTextWebController richTextWebController;
late HtmlEditorController signatureHtmlEditorController;
TextEditingController? inputNameIdentityController;
TextEditingController? inputBccIdentityController;
FocusNode? inputNameIdentityFocusNode;
FocusNode? inputBccIdentityFocusNode;
final RichTextController keyboardRichTextController = RichTextController();
final RichTextWebController richTextWebController = RichTextWebController();
final TextEditingController inputNameIdentityController = TextEditingController();
final TextEditingController inputBccIdentityController = TextEditingController();
final FocusNode inputNameIdentityFocusNode = FocusNode();
final FocusNode inputBccIdentityFocusNode = FocusNode();
final ScrollController scrollController = ScrollController();
String? _nameIdentity;
String? _contentHtmlEditor;
@@ -77,9 +72,6 @@ class IdentityCreatorController extends BaseController {
UserProfile? userProfile;
Identity? identity;
IdentityCreatorArguments? arguments;
OnCreatedIdentityCallback? onCreatedIdentityCallback;
VoidCallback? onDismissIdentityCreator;
ScrollController? scrollController;
final GlobalKey htmlKey = GlobalKey();
final htmlEditorMinHeight = 160;
@@ -107,21 +99,15 @@ class IdentityCreatorController extends BaseController {
@override
void onInit() {
log('IdentityCreatorController::onInit():');
super.onInit();
keyboardRichTextController = RichTextController();
richTextWebController = RichTextWebController();
signatureHtmlEditorController = HtmlEditorController(processNewLineAsBr: true);
inputNameIdentityController = TextEditingController();
inputBccIdentityController = TextEditingController();
inputNameIdentityFocusNode = FocusNode();
inputBccIdentityFocusNode = FocusNode();
scrollController = ScrollController();
log('IdentityCreatorController::onInit():arguments: ${Get.arguments}');
arguments = Get.arguments;
}
@override
void onReady() {
super.onReady();
log('IdentityCreatorController::onReady():');
if (arguments != null) {
accountId = arguments!.accountId;
session = arguments!.session;
@@ -136,7 +122,14 @@ class IdentityCreatorController extends BaseController {
@override
void onClose() {
_disposeWidget();
log('IdentityCreatorController::onClose():');
keyboardRichTextController.dispose();
inputNameIdentityFocusNode.dispose();
inputBccIdentityFocusNode.dispose();
inputNameIdentityController.dispose();
inputBccIdentityController.dispose();
scrollController.dispose();
richTextWebController.onClose();
super.onClose();
}
@@ -164,12 +157,12 @@ class IdentityCreatorController extends BaseController {
void _setUpValueFromIdentity() {
_nameIdentity = identity?.name ?? '';
inputNameIdentityController?.text = identity?.name ?? '';
inputNameIdentityController.text = identity?.name ?? '';
if (identity?.signatureAsString.isNotEmpty == true) {
updateContentHtmlEditor(arguments?.identity?.signatureAsString ?? '');
if (PlatformInfo.isWeb) {
signatureHtmlEditorController.setText(arguments?.identity?.signatureAsString ?? '');
richTextWebController.editorController.setText(arguments?.identity?.signatureAsString ?? '');
}
}
}
@@ -236,7 +229,7 @@ class IdentityCreatorController extends BaseController {
if (identity?.bcc?.isNotEmpty == true) {
bccOfIdentity.value = identity?.bcc!.first;
inputBccIdentityController?.text = identity?.bcc!.first.emailAddress ?? '';
inputBccIdentityController.text = identity?.bcc!.first.emailAddress ?? '';
} else {
bccOfIdentity.value = null;
}
@@ -297,7 +290,7 @@ class IdentityCreatorController extends BaseController {
Future<String?> _getSignatureHtmlText() async {
if (PlatformInfo.isWeb) {
return signatureHtmlEditorController.getText();
return richTextWebController.editorController.getText();
} else {
return keyboardRichTextController.htmlEditorApi?.getText();
}
@@ -346,25 +339,14 @@ class IdentityCreatorController extends BaseController {
final identityRequest = CreateNewIdentityRequest(
generateCreateId,
newIdentity,
isDefaultIdentity: isDefaultIdentity.value
);
if (PlatformInfo.isWeb) {
onCreatedIdentityCallback?.call(identityRequest);
} else {
popBack(result: identityRequest);
}
isDefaultIdentity: isDefaultIdentity.value);
popBack(result: identityRequest);
} else {
final identityRequest = EditIdentityRequest(
identityId: identity!.id!,
identityRequest: newIdentity.toIdentityRequest(),
isDefaultIdentity: isDefaultIdentity.value);
if (PlatformInfo.isWeb) {
onCreatedIdentityCallback?.call(identityRequest);
} else {
popBack(result: identityRequest);
}
identityId: identity!.id!,
identityRequest: newIdentity.toIdentityRequest(),
isDefaultIdentity: isDefaultIdentity.value);
popBack(result: identityRequest);
}
}
@@ -389,7 +371,7 @@ class IdentityCreatorController extends BaseController {
}
String? _getErrorInputAddressString(BuildContext context, {String? value}) {
final emailAddress = value ?? inputBccIdentityController?.text ?? '';
final emailAddress = value ?? inputBccIdentityController.text;
if (emailAddress.trim().isEmpty) {
return null;
}
@@ -434,24 +416,8 @@ class IdentityCreatorController extends BaseController {
}
void closeView(BuildContext context) {
if (PlatformInfo.isWeb) {
onDismissIdentityCreator?.call();
} else {
popBack();
}
}
void _disposeWidget() {
keyboardRichTextController.dispose();
inputNameIdentityFocusNode?.dispose();
inputNameIdentityFocusNode = null;
inputBccIdentityFocusNode?.dispose();
inputBccIdentityFocusNode = null;
inputNameIdentityController?.dispose();
inputNameIdentityController = null;
inputBccIdentityController?.dispose();
inputBccIdentityController = null;
scrollController?.dispose();
clearFocusEditor(context);
popBack();
}
void initRichTextForMobile(BuildContext context, HtmlEditorApi editorApi) {
@@ -464,29 +430,27 @@ class IdentityCreatorController extends BaseController {
}
void _onFocusHTMLEditorOnMobile() async {
inputBccIdentityFocusNode?.unfocus();
inputNameIdentityFocusNode?.unfocus();
if (scrollController != null) {
if (htmlKey.currentContext != null) {
await Scrollable.ensureVisible(htmlKey.currentContext!);
}
await Future.delayed(const Duration(milliseconds: 500), () {
final offset = scrollController!.position.pixels +
defaultKeyboardToolbarHeight +
htmlEditorMinHeight;
scrollController!.animateTo(
offset,
duration: const Duration(milliseconds: 1),
curve: Curves.linear,
);
});
inputBccIdentityFocusNode.unfocus();
inputNameIdentityFocusNode.unfocus();
if (htmlKey.currentContext != null) {
await Scrollable.ensureVisible(htmlKey.currentContext!);
}
await Future.delayed(const Duration(milliseconds: 500), () {
final offset = scrollController.position.pixels +
defaultKeyboardToolbarHeight +
htmlEditorMinHeight;
scrollController.animateTo(
offset,
duration: const Duration(milliseconds: 1),
curve: Curves.linear,
);
});
}
void _onEnterKeyDownOnMobile() {
if (scrollController != null && scrollController!.position.pixels < scrollController!.position.maxScrollExtent) {
scrollController!.animateTo(
scrollController!.position.pixels + 20,
if (scrollController.position.pixels < scrollController.position.maxScrollExtent) {
scrollController.animateTo(
scrollController.position.pixels + 20,
duration: const Duration(milliseconds: 1),
curve: Curves.linear,
);
@@ -20,7 +20,6 @@ import 'package:rich_text_composer/rich_text_composer.dart';
import 'package:rich_text_composer/views/widgets/rich_text_keyboard_toolbar.dart';
import 'package:tmail_ui_user/features/composer/presentation/widgets/toolbar_rich_text_builder.dart';
import 'package:tmail_ui_user/features/identity_creator/presentation/identity_creator_controller.dart';
import 'package:tmail_ui_user/features/identity_creator/presentation/model/identity_creator_arguments.dart';
import 'package:tmail_ui_user/features/identity_creator/presentation/widgets/identity_drop_list_field_builder.dart';
import 'package:tmail_ui_user/features/identity_creator/presentation/widgets/identity_field_no_editable_builder.dart';
import 'package:tmail_ui_user/features/identity_creator/presentation/widgets/identity_input_field_builder.dart';
@@ -39,20 +38,7 @@ class IdentityCreatorView extends GetWidget<IdentityCreatorController> {
@override
final controller = Get.find<IdentityCreatorController>();
IdentityCreatorView({Key? key}) : super(key: key) {
controller.arguments = Get.arguments;
}
IdentityCreatorView.fromArguments(
IdentityCreatorArguments arguments, {
Key? key,
OnCreatedIdentityCallback? onCreatedIdentityCallback,
VoidCallback? onDismissCallback
}) : super(key: key) {
controller.arguments = arguments;
controller.onCreatedIdentityCallback = onCreatedIdentityCallback;
controller.onDismissIdentityCreator = onDismissCallback;
}
IdentityCreatorView({super.key});
@override
Widget build(BuildContext context) {
@@ -133,27 +119,6 @@ class IdentityCreatorView extends GetWidget<IdentityCreatorController> {
))
),
),
tabletLarge: Scaffold(
backgroundColor: Colors.black38,
body: GestureDetector(
onTap: () => controller.clearFocusEditor(context),
child: Center(child: Card(
color: Colors.transparent,
shape: const RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(16))),
child: Container(
decoration: const BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(Radius.circular(16))),
width: _responsiveUtils.getSizeScreenWidth(context) * 0.85,
height: _responsiveUtils.getSizeScreenHeight(context) * 0.6,
child: ClipRRect(
borderRadius: const BorderRadius.all(Radius.circular(16)),
child: _buildBodyMobile(context)
)
)
))
)
),
landscapeTablet: Scaffold(
backgroundColor: Colors.black38,
body: GestureDetector(
@@ -245,7 +210,7 @@ class IdentityCreatorView extends GetWidget<IdentityCreatorController> {
controller.inputBccIdentityController,
focusNode: PlatformInfo.isWeb ? null : controller.inputBccIdentityFocusNode,
onSelectedSuggestionAction: (newEmailAddress) {
controller.inputBccIdentityController?.text = newEmailAddress?.email ?? '';
controller.inputBccIdentityController.text = newEmailAddress?.email ?? '';
controller.updateBccOfIdentity(newEmailAddress);
},
onChangeInputSuggestionAction: (pattern) {
@@ -383,8 +348,8 @@ class IdentityCreatorView extends GetWidget<IdentityCreatorController> {
controller.updateContentHtmlEditor(changed);
}, onInit: () {
log('IdentityCreatorView::_buildHtmlEditorWeb(): onInit');
controller.richTextWebController.editorController.setFullScreen();
controller.updateContentHtmlEditor(initContent);
controller.richTextWebController.setEnableCodeView();
}, onFocus: () {
log('IdentityCreatorView::_buildHtmlEditorWeb(): onFocus');
FocusManager.instance.primaryFocus?.unfocus();
@@ -72,6 +72,7 @@ import 'package:tmail_ui_user/features/thread/domain/state/mark_as_multiple_emai
import 'package:tmail_ui_user/features/thread/domain/state/move_multiple_email_to_mailbox_state.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart';
import 'package:tmail_ui_user/main/routes/dialog_router.dart';
import 'package:tmail_ui_user/main/routes/navigation_router.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
import 'package:tmail_ui_user/main/routes/route_utils.dart';
@@ -477,29 +478,16 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
teamMailboxesTree.value,
mailboxDashBoardController.sessionCurrent!);
if (PlatformInfo.isWeb) {
showDialogMailboxCreator(
context: context,
arguments: arguments,
onCreatedMailbox: (newMailboxArguments) {
final generateCreateId = Id(_uuid.v1());
_createNewMailboxAction(session, accountId, CreateNewMailboxRequest(
generateCreateId,
newMailboxArguments.newName,
parentId: newMailboxArguments.mailboxLocation?.id));
});
} else {
final newMailboxArguments = await push(
AppRoutes.mailboxCreator,
arguments: arguments);
final result = PlatformInfo.isWeb
? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.mailboxCreator, arguments: arguments)
: await push(AppRoutes.mailboxCreator, arguments: arguments);
if (newMailboxArguments != null && newMailboxArguments is NewMailboxArguments) {
final generateCreateId = Id(_uuid.v1());
_createNewMailboxAction(session, accountId, CreateNewMailboxRequest(
generateCreateId,
newMailboxArguments.newName,
parentId: newMailboxArguments.mailboxLocation?.id));
}
if (result != null && result is NewMailboxArguments) {
final generateCreateId = Id(_uuid.v1());
_createNewMailboxAction(session, accountId, CreateNewMailboxRequest(
generateCreateId,
result.newName,
parentId: result.mailboxLocation?.id));
}
}
}
@@ -1,33 +1,12 @@
import 'package:get/get.dart';
import 'package:tmail_ui_user/features/base/base_bindings.dart';
import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_name_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_creator/presentation/mailbox_creator_controller.dart';
class MailboxCreatorBindings extends BaseBindings {
class MailboxCreatorBindings extends Bindings {
@override
void bindingsController() {
void dependencies() {
Get.lazyPut(() => VerifyNameInteractor());
Get.lazyPut(() => MailboxCreatorController(Get.find<VerifyNameInteractor>()));
}
@override
void bindingsDataSource() {}
@override
void bindingsDataSourceImpl() {}
@override
void bindingsInteractor() {
Get.lazyPut(() => VerifyNameInteractor());
}
@override
void bindingsRepository() {}
@override
void bindingsRepositoryImpl() {}
void dispose() {
Get.delete<MailboxCreatorController>();
}
}
@@ -19,10 +19,9 @@ import 'package:tmail_ui_user/features/mailbox_creator/presentation/extensions/v
import 'package:tmail_ui_user/features/mailbox_creator/presentation/model/mailbox_creator_arguments.dart';
import 'package:tmail_ui_user/features/mailbox_creator/presentation/model/new_mailbox_arguments.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart';
import 'package:tmail_ui_user/main/routes/dialog_router.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
typedef OnCreatedMailboxCallback = Function(NewMailboxArguments? arguments);
class MailboxCreatorController extends BaseController {
final VerifyNameInteractor _verifyNameInteractor;
@@ -31,8 +30,8 @@ class MailboxCreatorController extends BaseController {
final newNameMailbox = Rxn<String>();
bool _createdMailbox = false;
FocusNode? nameInputFocusNode;
TextEditingController? nameInputController;
final FocusNode nameInputFocusNode = FocusNode();
final TextEditingController nameInputController = TextEditingController();
MailboxCreatorArguments? arguments;
AccountId? accountId;
@@ -40,8 +39,6 @@ class MailboxCreatorController extends BaseController {
MailboxTree? defaultMailboxTree;
MailboxTree? personalMailboxTree;
MailboxTree? teamMailboxesTre;
OnCreatedMailboxCallback? onCreatedMailboxCallback;
VoidCallback? onDismissMailboxCreator;
List<String> listMailboxNameAsStringExist = <String>[];
@@ -52,13 +49,14 @@ class MailboxCreatorController extends BaseController {
@override
void onInit() {
super.onInit();
nameInputFocusNode = FocusNode();
nameInputController = TextEditingController();
log('MailboxCreatorController::onInit():arguments: ${Get.arguments}');
arguments = Get.arguments;
}
@override
void onReady() {
super.onReady();
log('MailboxCreatorController::onReady():');
if (arguments != null) {
personalMailboxTree = arguments!.personalMailboxTree;
defaultMailboxTree = arguments!.defaultMailboxTree;
@@ -71,7 +69,9 @@ class MailboxCreatorController extends BaseController {
@override
void onClose() {
_disposeWidget();
log('MailboxCreatorController::onClose():');
nameInputFocusNode.dispose();
nameInputController.dispose();
super.onClose();
}
@@ -111,7 +111,7 @@ class MailboxCreatorController extends BaseController {
String? getErrorInputNameString(BuildContext context) {
final nameMailbox = newNameMailbox.value;
final canCheckNameString = _createdMailbox && nameInputFocusNode?.hasFocus == false;
final canCheckNameString = _createdMailbox && nameInputFocusNode.hasFocus == false;
return _verifyNameInteractor.execute(
nameMailbox,
@@ -138,47 +138,26 @@ class MailboxCreatorController extends BaseController {
if (accountId != null) {
final arguments = DestinationPickerArguments(
accountId!,
MailboxActions.create,
_session,
mailboxIdSelected: selectedMailbox.value?.id);
accountId!,
MailboxActions.create,
_session,
mailboxIdSelected: selectedMailbox.value?.id);
if (PlatformInfo.isWeb) {
showDialogDestinationPicker(
context: context,
arguments: arguments,
onSelectedMailbox: (destinationMailbox) {
final mailboxDestination = destinationMailbox == PresentationMailbox.unifiedMailbox
? null
: destinationMailbox;
final destinationMailbox = PlatformInfo.isWeb
? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.destinationPicker, arguments: arguments)
: await push(AppRoutes.destinationPicker, arguments: arguments);
selectedMailbox.value = mailboxDestination;
_createListMailboxNameAsStringInMailboxLocation();
});
} else {
final destinationMailbox = await push(
AppRoutes.destinationPicker,
arguments: arguments);
if (destinationMailbox is PresentationMailbox) {
final mailboxDestination = destinationMailbox == PresentationMailbox.unifiedMailbox
? null
: destinationMailbox;
if (destinationMailbox is PresentationMailbox) {
final mailboxDestination = destinationMailbox == PresentationMailbox.unifiedMailbox
? null
: destinationMailbox;
selectedMailbox.value = mailboxDestination;
_createListMailboxNameAsStringInMailboxLocation();
}
selectedMailbox.value = mailboxDestination;
_createListMailboxNameAsStringInMailboxLocation();
}
}
}
void _disposeWidget() {
nameInputFocusNode?.dispose();
nameInputFocusNode = null;
nameInputController?.dispose();
nameInputController = null;
}
void createNewMailbox(BuildContext context) {
KeyboardUtils.hideKeyboard(context);
@@ -191,24 +170,14 @@ class MailboxCreatorController extends BaseController {
if (nameMailbox != null && nameMailbox.isNotEmpty && _createdMailbox) {
final newMailboxArguments = NewMailboxArguments(
MailboxName(nameMailbox),
mailboxLocation: selectedMailbox.value);
if (PlatformInfo.isWeb) {
onCreatedMailboxCallback?.call(newMailboxArguments);
} else {
popBack(result: newMailboxArguments);
}
MailboxName(nameMailbox),
mailboxLocation: selectedMailbox.value);
popBack(result: newMailboxArguments);
}
}
void closeMailboxCreator(BuildContext context) {
KeyboardUtils.hideKeyboard(context);
if (PlatformInfo.isWeb) {
onDismissMailboxCreator?.call();
} else {
popBack();
}
popBack();
}
}
@@ -3,6 +3,7 @@ import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:core/presentation/utils/style_utils.dart';
import 'package:core/presentation/views/text/text_field_builder.dart';
import 'package:core/utils/app_logger.dart';
import 'package:core/utils/platform_info.dart';
import 'package:core/utils/direction_utils.dart';
import 'package:flutter/material.dart';
@@ -11,7 +12,6 @@ import 'package:get/get.dart';
import 'package:pointer_interceptor/pointer_interceptor.dart';
import 'package:tmail_ui_user/features/mailbox/domain/extensions/presentation_mailbox_extension.dart';
import 'package:tmail_ui_user/features/mailbox_creator/presentation/mailbox_creator_controller.dart';
import 'package:tmail_ui_user/features/mailbox_creator/presentation/model/mailbox_creator_arguments.dart';
import 'package:tmail_ui_user/features/mailbox_creator/presentation/widgets/app_bar_mailbox_creator_builder.dart';
import 'package:tmail_ui_user/features/mailbox_creator/presentation/widgets/create_mailbox_name_input_decoration_builder.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
@@ -25,23 +25,11 @@ class MailboxCreatorView extends GetWidget<MailboxCreatorController> {
@override
final controller = Get.find<MailboxCreatorController>();
MailboxCreatorView({Key? key}) : super(key: key) {
controller.arguments = Get.arguments;
}
MailboxCreatorView.fromArguments(
MailboxCreatorArguments arguments, {
Key? key,
OnCreatedMailboxCallback? onCreatedMailboxCallback,
VoidCallback? onDismissCallback
}) : super(key: key) {
controller.arguments = arguments;
controller.onCreatedMailboxCallback = onCreatedMailboxCallback;
controller.onDismissMailboxCreator = onDismissCallback;
}
MailboxCreatorView({super.key});
@override
Widget build(BuildContext context) {
log('MailboxCreatorView::build():');
return PointerInterceptor(
child: GestureDetector(
onTap: () => controller.closeMailboxCreator(context),
@@ -114,7 +102,6 @@ class MailboxCreatorView extends GetWidget<MailboxCreatorController> {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 14),
child: Obx(() => TextFieldBuilder(
key: const Key('create_mailbox_name_input'),
onTextChange: controller.setNewNameMailbox,
keyboardType: TextInputType.visiblePassword,
cursorColor: AppColor.colorTextButton,
@@ -25,6 +25,7 @@ import 'package:tmail_ui_user/features/manage_account/presentation/extensions/da
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart';
import 'package:tmail_ui_user/main/routes/dialog_router.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
class AdvancedFilterController extends BaseController {
@@ -131,30 +132,19 @@ class AdvancedFilterController extends BaseController {
final session = _mailboxDashBoardController.sessionCurrent;
if (accountId != null) {
final arguments = DestinationPickerArguments(
accountId,
MailboxActions.select,
session,
mailboxIdSelected: searchController.searchEmailFilter.value.mailbox?.id);
accountId,
MailboxActions.select,
session,
mailboxIdSelected: searchController.searchEmailFilter.value.mailbox?.id);
if (PlatformInfo.isWeb) {
showDialogDestinationPicker(
context: context,
arguments: arguments,
onSelectedMailbox: (destinationMailbox) {
_destinationMailboxSelected = destinationMailbox;
final mailboxName = destinationMailbox.name?.name;
mailBoxFilterInputController.text = StringConvert.writeNullToEmpty(mailboxName);
});
} else {
final destinationMailbox = await push(
AppRoutes.destinationPicker,
arguments: arguments);
final destinationMailbox = PlatformInfo.isWeb
? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.destinationPicker, arguments: arguments)
: await push(AppRoutes.destinationPicker, arguments: arguments);
if (destinationMailbox is PresentationMailbox) {
_destinationMailboxSelected = destinationMailbox;
final mailboxName = destinationMailbox.name?.name;
mailBoxFilterInputController.text = StringConvert.writeNullToEmpty(mailboxName);
}
if (destinationMailbox is PresentationMailbox) {
_destinationMailboxSelected = destinationMailbox;
final mailboxName = destinationMailbox.name?.name;
mailBoxFilterInputController.text = StringConvert.writeNullToEmpty(mailboxName);
}
}
}
@@ -120,6 +120,7 @@ import 'package:tmail_ui_user/features/thread/domain/usecases/move_multiple_emai
import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_type.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart';
import 'package:tmail_ui_user/main/routes/dialog_router.dart';
import 'package:tmail_ui_user/main/routes/navigation_router.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
import 'package:tmail_ui_user/main/routes/route_utils.dart';
@@ -791,35 +792,22 @@ class MailboxDashBoardController extends ReloadableController {
sessionCurrent,
mailboxIdSelected: currentMailbox.mailboxId);
if (PlatformInfo.isWeb) {
showDialogDestinationPicker(
context: context,
arguments: arguments,
onSelectedMailbox: (destinationMailbox) {
if (sessionCurrent != null) {
_dispatchMoveToMultipleAction(
accountId.value!,
sessionCurrent!,
listEmails.listEmailIds,
currentMailbox,
destinationMailbox);
}
});
} else {
final destinationMailbox = await push(
AppRoutes.destinationPicker,
arguments: arguments);
final destinationMailbox = PlatformInfo.isWeb
? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.destinationPicker, arguments: arguments)
: await push(AppRoutes.destinationPicker, arguments: arguments);
if (destinationMailbox != null &&
destinationMailbox is PresentationMailbox &&
sessionCurrent != null) {
_dispatchMoveToMultipleAction(
accountId.value!,
sessionCurrent!,
listEmails.listEmailIds,
currentMailbox,
destinationMailbox);
}
if (destinationMailbox != null &&
destinationMailbox is PresentationMailbox &&
sessionCurrent != null &&
accountId.value != null
) {
_dispatchMoveToMultipleAction(
accountId.value!,
sessionCurrent!,
listEmails.listEmailIds,
currentMailbox,
destinationMailbox
);
}
}
}
@@ -30,6 +30,7 @@ import 'package:tmail_ui_user/features/manage_account/presentation/manage_accoun
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/creator_action_type.dart';
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/rules_filter_creator_arguments.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/dialog_router.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart';
@@ -88,23 +89,12 @@ class EmailRulesController extends BaseController {
if (accountId != null && session != null) {
final arguments = RulesFilterCreatorArguments(accountId, session);
if (PlatformInfo.isWeb) {
showDialogRuleFilterCreator(
context: context,
arguments: arguments,
onCreatedRuleFilter: (arguments) {
if (arguments is CreateNewEmailRuleFilterRequest) {
_createNewRuleFilterAction(accountId, arguments);
}
});
} else {
final newRuleFilterRequest = await push(
AppRoutes.rulesFilterCreator,
arguments: arguments);
final newRuleFilterRequest = PlatformInfo.isWeb
? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.rulesFilterCreator, arguments: arguments)
: await push(AppRoutes.rulesFilterCreator, arguments: arguments);
if (newRuleFilterRequest is CreateNewEmailRuleFilterRequest) {
_createNewRuleFilterAction(accountId, newRuleFilterRequest);
}
if (newRuleFilterRequest is CreateNewEmailRuleFilterRequest) {
_createNewRuleFilterAction(accountId, newRuleFilterRequest);
}
}
}
@@ -140,23 +130,12 @@ class EmailRulesController extends BaseController {
actionType: CreatorActionType.edit,
tMailRule: rule);
if (PlatformInfo.isWeb) {
showDialogRuleFilterCreator(
context: context,
arguments: arguments,
onCreatedRuleFilter: (arguments) {
if (arguments is EditEmailRuleFilterRequest) {
_editEmailRuleFilterAction(accountId, arguments);
}
});
} else {
final newRuleFilterRequest = await push(
AppRoutes.rulesFilterCreator,
arguments: arguments);
final newRuleFilterRequest = PlatformInfo.isWeb
? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.rulesFilterCreator, arguments: arguments)
: await push(AppRoutes.rulesFilterCreator, arguments: arguments);
if (newRuleFilterRequest is EditEmailRuleFilterRequest) {
_editEmailRuleFilterAction(accountId, newRuleFilterRequest);
}
if (newRuleFilterRequest is EditEmailRuleFilterRequest) {
_editEmailRuleFilterAction(accountId, newRuleFilterRequest);
}
}
}
@@ -36,6 +36,7 @@ import 'package:tmail_ui_user/features/manage_account/presentation/model/identit
import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/widgets/delete_identity_dialog_builder.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart';
import 'package:tmail_ui_user/main/routes/dialog_router.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
class IdentitiesController extends BaseController {
@@ -152,27 +153,14 @@ class IdentitiesController extends BaseController {
if (accountId != null && session != null && userProfile != null) {
final arguments = IdentityCreatorArguments(accountId, session, userProfile);
if (PlatformInfo.isWeb) {
showDialogIdentityCreator(
context: context,
arguments: arguments,
onCreatedIdentity: (arguments) {
if (arguments is CreateNewIdentityRequest) {
_createNewIdentityAction(session, accountId, arguments);
} else if (arguments is EditIdentityRequest) {
_editIdentityAction(session, accountId, arguments);
}
});
} else {
final newIdentityArguments = await push(
AppRoutes.identityCreator,
arguments: arguments);
final newIdentityArguments = PlatformInfo.isWeb
? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.identityCreator, arguments: arguments)
: await push(AppRoutes.identityCreator, arguments: arguments);
if (newIdentityArguments is CreateNewIdentityRequest) {
_createNewIdentityAction(session, accountId, newIdentityArguments);
} else if (newIdentityArguments is EditIdentityRequest) {
_editIdentityAction(session, accountId, newIdentityArguments);
}
if (newIdentityArguments is CreateNewIdentityRequest) {
_createNewIdentityAction(session, accountId, newIdentityArguments);
} else if (newIdentityArguments is EditIdentityRequest) {
_editIdentityAction(session, accountId, newIdentityArguments);
}
}
}
@@ -271,33 +259,20 @@ class IdentitiesController extends BaseController {
final session = _accountDashBoardController.sessionCurrent;
if (accountId != null && session != null && userProfile != null) {
final arguments = IdentityCreatorArguments(
accountId,
session,
userProfile,
identity: identity,
actionType: IdentityActionType.edit);
accountId,
session,
userProfile,
identity: identity,
actionType: IdentityActionType.edit);
if (PlatformInfo.isWeb) {
showDialogIdentityCreator(
context: context,
arguments: arguments,
onCreatedIdentity: (arguments) {
if (arguments is CreateNewIdentityRequest) {
_createNewIdentityAction(session, accountId, arguments);
} else if (arguments is EditIdentityRequest) {
_editIdentityAction(session, accountId, arguments);
}
});
} else {
final newIdentityArguments = await push(
AppRoutes.identityCreator,
arguments: arguments);
final newIdentityArguments = PlatformInfo.isWeb
? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.identityCreator, arguments: arguments)
: await push(AppRoutes.identityCreator, arguments: arguments);
if (newIdentityArguments is CreateNewIdentityRequest) {
_createNewIdentityAction(session, accountId, newIdentityArguments);
} else if (newIdentityArguments is EditIdentityRequest) {
_editIdentityAction(session, accountId, newIdentityArguments);
}
if (newIdentityArguments is CreateNewIdentityRequest) {
_createNewIdentityAction(session, accountId, newIdentityArguments);
} else if (newIdentityArguments is EditIdentityRequest) {
_editIdentityAction(session, accountId, newIdentityArguments);
}
}
}
@@ -79,8 +79,4 @@ class RulesFilterCreatorBindings extends BaseBindings {
Get.find<StateDataSource>(),
));
}
void dispose() {
Get.delete<RulesFilterCreatorController>();
}
}
@@ -35,10 +35,9 @@ import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/e
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/rules_filter_creator_arguments.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart';
import 'package:tmail_ui_user/main/routes/dialog_router.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
typedef OnCreatedRuleFilterCallback = Function(dynamic arguments);
class RulesFilterCreatorController extends BaseMailboxController {
final _appToast = Get.find<AppToast>();
@@ -56,17 +55,15 @@ class RulesFilterCreatorController extends BaseMailboxController {
final mailboxSelected = Rxn<PresentationMailbox>();
final actionType = CreatorActionType.create.obs;
TextEditingController? inputRuleNameController;
TextEditingController? inputConditionValueController;
FocusNode? inputRuleNameFocusNode;
FocusNode? inputRuleConditionFocusNode;
final TextEditingController inputRuleNameController = TextEditingController();
final TextEditingController inputConditionValueController = TextEditingController();
final FocusNode inputRuleNameFocusNode = FocusNode();
final FocusNode inputRuleConditionFocusNode = FocusNode();
String? _newRuleName;
String? _newRuleConditionValue;
RulesFilterCreatorArguments? arguments;
OnCreatedRuleFilterCallback? onCreatedRuleFilterCallback;
VoidCallback? onDismissRuleFilterCreator;
AccountId? _accountId;
Session? _session;
TMailRule? _currentTMailRule;
@@ -82,15 +79,14 @@ class RulesFilterCreatorController extends BaseMailboxController {
@override
void onInit() {
super.onInit();
inputRuleNameController = TextEditingController();
inputConditionValueController = TextEditingController();
inputRuleNameFocusNode = FocusNode();
inputRuleConditionFocusNode = FocusNode();
log('RulesFilterCreatorController::onInit():arguments: ${Get.arguments}');
arguments = Get.arguments;
}
@override
void onReady() {
super.onReady();
log('RulesFilterCreatorController::onReady():');
if (arguments != null) {
_accountId = arguments!.accountId;
_session = arguments!.session;
@@ -110,7 +106,11 @@ class RulesFilterCreatorController extends BaseMailboxController {
@override
void onClose() {
_disposeWidget();
log('RulesFilterCreatorController::onClose():');
inputRuleNameFocusNode.dispose();
inputRuleConditionFocusNode.dispose();
inputRuleNameController.dispose();
inputConditionValueController.dispose();
super.onClose();
}
@@ -158,7 +158,7 @@ class RulesFilterCreatorController extends BaseMailboxController {
}
break;
}
inputRuleNameFocusNode?.requestFocus();
inputRuleNameFocusNode.requestFocus();
}
void _setValueInputField(TextEditingController? controller, String value) {
@@ -219,31 +219,19 @@ class RulesFilterCreatorController extends BaseMailboxController {
void selectMailbox(BuildContext context) async {
if (_accountId != null) {
final arguments = DestinationPickerArguments(
_accountId!,
MailboxActions.selectForRuleAction,
_session);
_accountId!,
MailboxActions.selectForRuleAction,
_session);
if (PlatformInfo.isWeb) {
showDialogDestinationPicker(
context: context,
arguments: arguments,
onSelectedMailbox: (destinationMailbox) {
mailboxSelected.value = destinationMailbox;
errorRuleActionValue.value = _getErrorStringByInputValue(
context,
mailboxSelected.value?.name?.name);
});
} else {
final destinationMailbox = await push(
AppRoutes.destinationPicker,
arguments: arguments);
final destinationMailbox = PlatformInfo.isWeb
? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.destinationPicker, arguments: arguments)
: await push(AppRoutes.destinationPicker, arguments: arguments);
if (destinationMailbox is PresentationMailbox && context.mounted) {
mailboxSelected.value = destinationMailbox;
errorRuleActionValue.value = _getErrorStringByInputValue(
context,
mailboxSelected.value?.name?.name);
}
if (destinationMailbox is PresentationMailbox && context.mounted) {
mailboxSelected.value = destinationMailbox;
errorRuleActionValue.value = _getErrorStringByInputValue(
context,
mailboxSelected.value?.name?.name);
}
}
}
@@ -254,14 +242,14 @@ class RulesFilterCreatorController extends BaseMailboxController {
final errorName = _getErrorStringByInputValue(context, _newRuleName);
if (errorName?.isNotEmpty == true) {
errorRuleName.value = errorName;
inputRuleNameFocusNode?.requestFocus();
inputRuleNameFocusNode.requestFocus();
return;
}
final errorCondition = _getErrorStringByInputValue(context, _newRuleConditionValue);
if (errorCondition?.isNotEmpty == true) {
errorRuleConditionValue.value = errorCondition;
inputRuleConditionFocusNode?.requestFocus();
inputRuleConditionFocusNode.requestFocus();
return;
}
@@ -301,53 +289,15 @@ class RulesFilterCreatorController extends BaseMailboxController {
value: _newRuleConditionValue!
));
if (actionType.value == CreatorActionType.create) {
final ruleFilterRequest = CreateNewEmailRuleFilterRequest(
_listEmailRule ?? [],
newTMailRule);
if (PlatformInfo.isWeb) {
onCreatedRuleFilterCallback?.call(ruleFilterRequest);
} else {
popBack(result: ruleFilterRequest);
}
} else {
final ruleFilterRequest = EditEmailRuleFilterRequest(
_listEmailRule?.withIds ?? [],
newTMailRule);
if (PlatformInfo.isWeb) {
onCreatedRuleFilterCallback?.call(ruleFilterRequest);
} else {
popBack(result: ruleFilterRequest);
}
}
}
void _clearAll() {
inputRuleNameController?.clear();
inputConditionValueController?.clear();
}
void _disposeWidget() {
inputRuleNameFocusNode?.dispose();
inputRuleNameFocusNode = null;
inputRuleConditionFocusNode?.dispose();
inputRuleConditionFocusNode = null;
inputRuleNameController?.dispose();
inputRuleNameController = null;
inputConditionValueController?.dispose();
inputConditionValueController = null;
final ruleFilterRequest =
actionType.value == CreatorActionType.create
? CreateNewEmailRuleFilterRequest(_listEmailRule ?? [], newTMailRule)
: EditEmailRuleFilterRequest(_listEmailRule?.withIds ?? [], newTMailRule);
popBack(result: ruleFilterRequest);
}
void closeView(BuildContext context) {
_clearAll();
KeyboardUtils.hideKeyboard(context);
if (PlatformInfo.isWeb) {
onDismissRuleFilterCreator?.call();
} else {
popBack();
}
popBack();
}
}
@@ -8,7 +8,6 @@ import 'package:rule_filter/rule_filter/rule_condition.dart' as rule_condition;
import 'package:tmail_ui_user/features/base/widget/drop_down_button_widget.dart';
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/extensions/rule_condition_extensions.dart';
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/email_rule_filter_action.dart';
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/rules_filter_creator_arguments.dart';
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/rules_filter_creator_controller.dart';
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rule_action_bottom_sheet_action_tile_builder.dart';
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rule_condition_comparator_bottom_sheet_action_tile_builder.dart';
@@ -26,20 +25,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
@override
final controller = Get.find<RulesFilterCreatorController>();
RuleFilterCreatorView({Key? key}) : super(key: key) {
controller.arguments = Get.arguments;
}
RuleFilterCreatorView.fromArguments(
RulesFilterCreatorArguments arguments, {
Key? key,
OnCreatedRuleFilterCallback? onCreatedRuleFilterCallback,
VoidCallback? onDismissCallback
}) : super(key: key) {
controller.arguments = arguments;
controller.onCreatedRuleFilterCallback = onCreatedRuleFilterCallback;
controller.onDismissRuleFilterCreator = onDismissCallback;
}
RuleFilterCreatorView({super.key});
@override
Widget build(BuildContext context) {
@@ -66,6 +66,7 @@ import 'package:tmail_ui_user/features/thread/presentation/extensions/list_prese
import 'package:tmail_ui_user/features/thread/presentation/mixin/email_action_controller.dart';
import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_type.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart';
import 'package:tmail_ui_user/main/routes/dialog_router.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
class SearchEmailController extends BaseController
@@ -478,41 +479,25 @@ class SearchEmailController extends BaseController
void selectMailboxForSearchFilter(BuildContext context, PresentationMailbox? mailbox) async {
final arguments = DestinationPickerArguments(
mailboxDashBoardController.accountId.value!,
MailboxActions.select,
mailboxDashBoardController.sessionCurrent,
mailboxIdSelected: mailbox?.id);
mailboxDashBoardController.accountId.value!,
MailboxActions.select,
mailboxDashBoardController.sessionCurrent,
mailboxIdSelected: mailbox?.id);
if (PlatformInfo.isWeb) {
showDialogDestinationPicker(
context: context,
arguments: arguments,
onSelectedMailbox: (destinationMailbox) {
final mailboxSelected = destinationMailbox == PresentationMailbox.unifiedMailbox ? null : destinationMailbox;
if (mailboxSelected != null && mailbox?.id != mailboxSelected.id) {
_updateSimpleSearchFilter(
mailboxOption: Some(mailboxSelected),
beforeOption: const None()
);
_searchEmailAction(context);
}
});
} else {
final destinationMailbox = await push(
AppRoutes.destinationPicker,
arguments: arguments);
final destinationMailbox = PlatformInfo.isWeb
? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.destinationPicker, arguments: arguments)
: await push(AppRoutes.destinationPicker, arguments: arguments);
if (destinationMailbox is PresentationMailbox) {
final mailboxSelected = destinationMailbox == PresentationMailbox.unifiedMailbox ? null : destinationMailbox;
if (mailboxSelected != null && mailbox?.id != mailboxSelected.id) {
_updateSimpleSearchFilter(
mailboxOption: Some(mailboxSelected),
beforeOption: const None()
);
if (destinationMailbox is PresentationMailbox) {
final mailboxSelected = destinationMailbox == PresentationMailbox.unifiedMailbox ? null : destinationMailbox;
if (mailboxSelected != null && mailbox?.id != mailboxSelected.id) {
_updateSimpleSearchFilter(
mailboxOption: Some(mailboxSelected),
beforeOption: const None()
);
if (context.mounted) {
_searchEmailAction(context);
}
if (context.mounted) {
_searchEmailAction(context);
}
}
}
@@ -526,29 +511,14 @@ class SearchEmailController extends BaseController
final listContactSelected = simpleSearchFilter.value.getContactApplied(prefixEmailAddress);
final arguments = ContactArguments(accountId!, session!, listContactSelected);
if (PlatformInfo.isWeb) {
showDialogContactView(
context: context,
arguments: arguments,
onSelectedContact: (newContact) {
_dispatchApplyContactAction(
context,
listContactSelected,
prefixEmailAddress,
newContact);
});
} else {
final newContact = await push(
AppRoutes.contact,
arguments: arguments);
final newContact = await push(AppRoutes.contact, arguments: arguments);
if (newContact is EmailAddress && context.mounted) {
_dispatchApplyContactAction(
context,
listContactSelected,
prefixEmailAddress,
newContact);
}
if (newContact is EmailAddress && context.mounted) {
_dispatchApplyContactAction(
context,
listContactSelected,
prefixEmailAddress,
newContact);
}
}
}
@@ -17,7 +17,6 @@ import 'package:model/email/presentation_email.dart';
import 'package:model/email/read_actions.dart';
import 'package:model/mailbox/presentation_mailbox.dart';
import 'package:pointer_interceptor/pointer_interceptor.dart';
import 'package:tmail_ui_user/features/base/mixin/view_as_dialog_action_mixin.dart';
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart';
import 'package:tmail_ui_user/features/email/domain/model/move_action.dart';
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
@@ -27,10 +26,11 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller
import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_type.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart';
import 'package:tmail_ui_user/main/routes/dialog_router.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
import 'package:tmail_ui_user/main/utils/app_utils.dart';
mixin EmailActionController on ViewAsDialogActionMixin {
mixin EmailActionController {
final mailboxDashBoardController = Get.find<MailboxDashBoardController>();
final responsiveUtils = Get.find<ResponsiveUtils>();
@@ -131,38 +131,22 @@ mixin EmailActionController on ViewAsDialogActionMixin {
session,
mailboxIdSelected: mailboxContain.mailboxId);
if (PlatformInfo.isWeb) {
showDialogDestinationPicker(
context: context,
arguments: arguments,
onSelectedMailbox: (destinationMailbox) {
if (mailboxDashBoardController.sessionCurrent != null) {
_dispatchMoveToAction(
context,
accountId,
mailboxDashBoardController.sessionCurrent!,
email,
mailboxContain,
destinationMailbox);
}
});
} else {
final destinationMailbox = await push(
AppRoutes.destinationPicker,
arguments: arguments);
final destinationMailbox = PlatformInfo.isWeb
? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.destinationPicker, arguments: arguments)
: await push(AppRoutes.destinationPicker, arguments: arguments);
if (destinationMailbox != null &&
if (destinationMailbox != null &&
context.mounted &&
destinationMailbox is PresentationMailbox &&
mailboxDashBoardController.sessionCurrent != null) {
_dispatchMoveToAction(
context,
accountId,
mailboxDashBoardController.sessionCurrent!,
email,
mailboxContain,
destinationMailbox);
}
mailboxDashBoardController.sessionCurrent != null
) {
_dispatchMoveToAction(
context,
accountId,
mailboxDashBoardController.sessionCurrent!,
email,
mailboxContain,
destinationMailbox);
}
}
}
+7 -7
View File
@@ -65,6 +65,13 @@ class AppPages {
manage_account_dashboard.loadLibrary,
() => manage_account_dashboard.ManageAccountDashBoardView()),
binding: ManageAccountDashBoardBindings()),
GetPage(
name: AppRoutes.contact,
opaque: false,
page: () => DeferredWidget(
contact_view.loadLibrary,
() => contact_view.ContactView()),
binding: ContactBindings()),
unknownRoutePage,
if (PlatformInfo.isMobile)
...[
@@ -89,13 +96,6 @@ class AppPages {
mailbox_creator.loadLibrary,
() => mailbox_creator.MailboxCreatorView()),
binding: MailboxCreatorBindings()),
GetPage(
name: AppRoutes.contact,
opaque: false,
page: () => DeferredWidget(
contact_view.loadLibrary,
() => contact_view.ContactView()),
binding: ContactBindings()),
GetPage(
name: AppRoutes.rulesFilterCreator,
opaque: false,
+62
View File
@@ -0,0 +1,62 @@
import 'package:core/utils/app_logger.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:tmail_ui_user/features/destination_picker/presentation/destination_picker_bindings.dart';
import 'package:tmail_ui_user/features/destination_picker/presentation/destination_picker_view.dart';
import 'package:tmail_ui_user/features/identity_creator/presentation/identity_creator_bindings.dart';
import 'package:tmail_ui_user/features/identity_creator/presentation/identity_creator_view.dart';
import 'package:tmail_ui_user/features/mailbox_creator/presentation/mailbox_creator_bindings.dart';
import 'package:tmail_ui_user/features/mailbox_creator/presentation/mailbox_creator_view.dart';
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/rules_filter_creator_bindings.dart';
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/rules_filter_creator_view.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart';
class DialogRouter {
static Future<dynamic> pushGeneralDialog({
required String routeName,
required Object? arguments
}) {
_bindingDI(routeName);
return Get.generalDialog(
routeSettings: RouteSettings(arguments: arguments),
pageBuilder: (_, __, ___) => _generateView(routeName: routeName, arguments: arguments)
);
}
static void _bindingDI(String routeName) {
log('DialogRouter::_bindingDI():routeName: $routeName');
switch(routeName) {
case AppRoutes.mailboxCreator:
MailboxCreatorBindings().dependencies();
break;
case AppRoutes.rulesFilterCreator:
RulesFilterCreatorBindings().dependencies();
break;
case AppRoutes.identityCreator:
IdentityCreatorBindings().dependencies();
break;
case AppRoutes.destinationPicker:
DestinationPickerBindings().dependencies();
break;
}
}
static Widget _generateView({required String routeName, required Object? arguments}) {
log('DialogRouter::_generateView():routeName: $routeName | arguments: $arguments');
switch(routeName) {
case AppRoutes.mailboxCreator:
return MailboxCreatorView();
case AppRoutes.rulesFilterCreator:
return RuleFilterCreatorView();
case AppRoutes.identityCreator:
return IdentityCreatorView();
case AppRoutes.destinationPicker:
return DestinationPickerView();
default:
return const SizedBox.shrink();
}
}
}