TF-1877 Fix error TextEditingController was used after being disposed on some screen
(cherry picked from commit 50e4c6ec55eea21a45a5a8dd31cd239245248df3)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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>();
|
||||
|
||||
@@ -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,
|
||||
|
||||
+12
-22
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+16
-28
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+20
-45
@@ -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>();
|
||||
}
|
||||
}
|
||||
+33
-83
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user