TF-1074 Handle go to path /emails_forward_creator
This commit is contained in:
+5
-17
@@ -1,26 +1,14 @@
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/base/base_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/emails_forward_creator/presentation/emails_forward_creator_controller.dart';
|
||||
|
||||
class EmailsForwardCreatorBindings extends BaseBindings {
|
||||
class EmailsForwardCreatorBindings extends Bindings {
|
||||
|
||||
@override
|
||||
void bindingsController() {
|
||||
void dependencies() {
|
||||
Get.lazyPut(() => EmailsForwardCreatorController());
|
||||
}
|
||||
|
||||
@override
|
||||
void bindingsDataSource() {}
|
||||
|
||||
@override
|
||||
void bindingsDataSourceImpl() {}
|
||||
|
||||
@override
|
||||
void bindingsInteractor() {}
|
||||
|
||||
@override
|
||||
void bindingsRepository() {}
|
||||
|
||||
@override
|
||||
void bindingsRepositoryImpl() {}
|
||||
void dispose() {
|
||||
Get.delete<EmailsForwardCreatorController>();
|
||||
}
|
||||
}
|
||||
+39
-31
@@ -1,7 +1,7 @@
|
||||
|
||||
import 'package:core/utils/app_logger.dart';
|
||||
import 'package:core/utils/build_utils.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||
@@ -12,35 +12,47 @@ import 'package:tmail_ui_user/features/composer/domain/model/contact_suggestion_
|
||||
import 'package:tmail_ui_user/features/composer/domain/state/get_autocomplete_state.dart';
|
||||
import 'package:tmail_ui_user/features/composer/domain/usecases/get_autocomplete_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/composer/domain/usecases/get_autocomplete_with_device_contact_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/forward/forward_controller.dart';
|
||||
import 'package:tmail_ui_user/features/emails_forward_creator/presentation/model/email_forward_creator_arguments.dart';
|
||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||
|
||||
typedef OnAddEmailForwardCallback = Function(List<EmailAddress> listEmailAddress);
|
||||
|
||||
class EmailsForwardCreatorController extends BaseController {
|
||||
|
||||
final inputEmailForwardController = TextEditingController();
|
||||
final ContactSuggestionSource _contactSuggestionSource = ContactSuggestionSource.tMailContact;
|
||||
final _forwardController = Get.find<ForwardController>();
|
||||
|
||||
GetAutoCompleteWithDeviceContactInteractor? _getAutoCompleteWithDeviceContactInteractor;
|
||||
GetAutoCompleteInteractor? _getAutoCompleteInteractor;
|
||||
|
||||
final listEmailForwards = RxSet<EmailAddress>();
|
||||
|
||||
EmailsForwardCreatorController();
|
||||
TextEditingController? inputEmailForwardController;
|
||||
|
||||
AccountId? get _accountId => _forwardController.emailsForwardCreatorArguments.value?.accountId;
|
||||
EmailForwardCreatorArguments? arguments;
|
||||
OnAddEmailForwardCallback? onAddEmailForwardCallback;
|
||||
VoidCallback? onDismissForwardCreatorCallback;
|
||||
AccountId? _accountId;
|
||||
Session? _session;
|
||||
|
||||
Session? get _session => _forwardController.emailsForwardCreatorArguments.value?.session;
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
inputEmailForwardController = TextEditingController();
|
||||
}
|
||||
|
||||
@override
|
||||
void onReady() {
|
||||
injectAutoCompleteBindings(_session, _accountId);
|
||||
super.onReady();
|
||||
if (arguments != null) {
|
||||
_accountId = arguments!.accountId;
|
||||
_session = arguments!.session;
|
||||
injectAutoCompleteBindings(_session, _accountId);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
inputEmailForwardController.dispose();
|
||||
_disposeWidget();
|
||||
super.onClose();
|
||||
}
|
||||
|
||||
@@ -62,7 +74,6 @@ class EmailsForwardCreatorController extends BaseController {
|
||||
}
|
||||
|
||||
Future<List<EmailAddress>> getAutoCompleteSuggestion(String word) async {
|
||||
log('EmailsForwardCreatorController::getAutoCompleteSuggestion(): $word | $_contactSuggestionSource');
|
||||
try {
|
||||
_getAutoCompleteWithDeviceContactInteractor = Get.find<GetAutoCompleteWithDeviceContactInteractor>();
|
||||
_getAutoCompleteInteractor = Get.find<GetAutoCompleteInteractor>();
|
||||
@@ -72,7 +83,6 @@ class EmailsForwardCreatorController extends BaseController {
|
||||
|
||||
if (_contactSuggestionSource == ContactSuggestionSource.all) {
|
||||
if (_getAutoCompleteWithDeviceContactInteractor == null || _getAutoCompleteInteractor == null) {
|
||||
logError('EmailsForwardCreatorController::_getAutoCompleteWithDeviceContactInteractor(): is null');
|
||||
return <EmailAddress>[];
|
||||
} else {
|
||||
return await _getAutoCompleteWithDeviceContactInteractor!
|
||||
@@ -85,7 +95,6 @@ class EmailsForwardCreatorController extends BaseController {
|
||||
}
|
||||
} else {
|
||||
if (_getAutoCompleteInteractor == null) {
|
||||
logError('EmailsForwardCreatorController::_getAutoCompleteInteractor(): is null');
|
||||
return <EmailAddress>[];
|
||||
} else {
|
||||
return await _getAutoCompleteInteractor!
|
||||
@@ -100,26 +109,26 @@ class EmailsForwardCreatorController extends BaseController {
|
||||
}
|
||||
|
||||
void addToListEmailForwards(EmailAddress emailAddress) {
|
||||
if(emailAddress.email !=null && emailAddress.email!.isNotEmpty) {
|
||||
if (emailAddress.email != null && emailAddress.email!.isNotEmpty) {
|
||||
listEmailForwards.add(emailAddress);
|
||||
}
|
||||
}
|
||||
|
||||
void clearAll() {
|
||||
inputEmailForwardController.clear();
|
||||
inputEmailForwardController?.clear();
|
||||
}
|
||||
|
||||
void _clearListEmailForwards() {
|
||||
listEmailForwards.clear();
|
||||
void _disposeWidget() {
|
||||
inputEmailForwardController?.dispose();
|
||||
inputEmailForwardController = null;
|
||||
}
|
||||
|
||||
void closeView(BuildContext context) {
|
||||
FocusScope.of(context).unfocus();
|
||||
clearAll();
|
||||
|
||||
if(kIsWeb) {
|
||||
_clearListEmailForwards();
|
||||
_forwardController.accountDashBoardController.emailsForwardCreatorIsActive.toggle();
|
||||
if (BuildUtils.isWeb) {
|
||||
_disposeWidget();
|
||||
onDismissForwardCreatorCallback?.call();
|
||||
} else {
|
||||
popBack();
|
||||
}
|
||||
@@ -127,21 +136,20 @@ class EmailsForwardCreatorController extends BaseController {
|
||||
|
||||
void addEmailForwards(BuildContext context) {
|
||||
FocusScope.of(context).unfocus();
|
||||
if(inputEmailForwardController.text.trim().isNotEmpty) {
|
||||
listEmailForwards.add(EmailAddress(null, inputEmailForwardController.text.trim()));
|
||||
}
|
||||
clearAll();
|
||||
|
||||
if (listEmailForwards.isNotEmpty) {
|
||||
final newListEmailForwards = List<EmailAddress>.from(listEmailForwards);
|
||||
_forwardController.handleAddRecipients(newListEmailForwards);
|
||||
final emailInput = inputEmailForwardController?.text.trim();
|
||||
if (emailInput?.isNotEmpty == true && emailInput?.isEmail == true) {
|
||||
listEmailForwards.add(EmailAddress(null, emailInput));
|
||||
}
|
||||
|
||||
if(kIsWeb) {
|
||||
_clearListEmailForwards();
|
||||
_forwardController.accountDashBoardController.emailsForwardCreatorIsActive.toggle();
|
||||
final newListEmailForwardNeedAdded = listEmailForwards.toList();
|
||||
log('EmailsForwardCreatorController::addEmailForwards(): newListEmailForwardNeedAdded: $newListEmailForwardNeedAdded');
|
||||
|
||||
if (BuildUtils.isWeb) {
|
||||
_disposeWidget();
|
||||
onAddEmailForwardCallback?.call(newListEmailForwardNeedAdded);
|
||||
} else {
|
||||
popBack();
|
||||
popBack(result: newListEmailForwardNeedAdded);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import 'package:get/get.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
|
||||
import 'package:model/model.dart';
|
||||
import 'package:tmail_ui_user/features/emails_forward_creator/presentation/emails_forward_creator_controller.dart';
|
||||
import 'package:tmail_ui_user/features/emails_forward_creator/presentation/model/email_forward_creator_arguments.dart';
|
||||
import 'package:tmail_ui_user/features/emails_forward_creator/presentation/widgets/email_forward_creator_item_widget.dart';
|
||||
import 'package:tmail_ui_user/features/emails_forward_creator/presentation/widgets/emails_forward_input_with_drop_list_field_builder.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
@@ -14,82 +15,82 @@ class EmailsForwardCreatorView extends GetWidget<EmailsForwardCreatorController>
|
||||
final _imagePaths = Get.find<ImagePaths>();
|
||||
final _responsiveUtils = Get.find<ResponsiveUtils>();
|
||||
|
||||
EmailsForwardCreatorView({Key? key}) : super(key: key);
|
||||
@override
|
||||
final controller = Get.find<EmailsForwardCreatorController>();
|
||||
|
||||
EmailsForwardCreatorView({Key? key}) : super(key: key) {
|
||||
controller.arguments = Get.arguments;
|
||||
}
|
||||
|
||||
EmailsForwardCreatorView.fromArguments(
|
||||
EmailForwardCreatorArguments arguments, {
|
||||
Key? key,
|
||||
OnAddEmailForwardCallback? onAddEmailForwardCallback,
|
||||
VoidCallback? onDismissCallback
|
||||
}) : super(key: key) {
|
||||
controller.arguments = arguments;
|
||||
controller.onAddEmailForwardCallback = onAddEmailForwardCallback;
|
||||
controller.onDismissForwardCreatorCallback = onDismissCallback;
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ResponsiveWidget(
|
||||
responsiveUtils: _responsiveUtils,
|
||||
mobile: Scaffold(
|
||||
backgroundColor: Colors.black38,
|
||||
backgroundColor: BuildUtils.isWeb
|
||||
? Colors.black.withAlpha(24)
|
||||
: Colors.black38,
|
||||
body: GestureDetector(
|
||||
onTap: () => FocusScope.of(context).unfocus(),
|
||||
child: SafeArea(
|
||||
child: Align(
|
||||
alignment: Alignment.bottomCenter,
|
||||
child: Card(
|
||||
color: Colors.transparent,
|
||||
shape: const RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.only(
|
||||
topLeft: Radius.circular(16),
|
||||
topRight: Radius.circular(16),
|
||||
)),
|
||||
child: Container(
|
||||
decoration: const BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.only(
|
||||
topLeft: Radius.circular(16),
|
||||
topRight: Radius.circular(16),
|
||||
)),
|
||||
width: double.infinity,
|
||||
height: _responsiveUtils.getSizeScreenHeight(context) - 70,
|
||||
child: ClipRRect(
|
||||
borderRadius: const BorderRadius.only(
|
||||
topLeft: Radius.circular(16),
|
||||
topRight: Radius.circular(16)),
|
||||
child: _buildEmailForwardCreatorList(context)
|
||||
)
|
||||
)
|
||||
bottom: false,
|
||||
left: false,
|
||||
right: false,
|
||||
child: Container(
|
||||
decoration: const BoxDecoration(
|
||||
borderRadius: BorderRadius.only(
|
||||
topLeft: Radius.circular(16),
|
||||
topRight: Radius.circular(16)),
|
||||
color: Colors.white),
|
||||
margin: const EdgeInsets.only(top: BuildUtils.isWeb ? 70 : 0),
|
||||
child: ClipRRect(
|
||||
borderRadius: const BorderRadius.only(
|
||||
topLeft: Radius.circular(16),
|
||||
topRight: Radius.circular(16)),
|
||||
child: SafeArea(child: _buildEmailForwardCreatorList(context))
|
||||
)
|
||||
),
|
||||
),
|
||||
)
|
||||
),
|
||||
tablet: Scaffold(
|
||||
backgroundColor: Colors.black38,
|
||||
backgroundColor: Colors.black.withAlpha(24),
|
||||
body: GestureDetector(
|
||||
onTap: () => FocusScope.of(context).unfocus(),
|
||||
child: Align(alignment: Alignment.bottomCenter, child: Card(
|
||||
color: Colors.transparent,
|
||||
shape: const RoundedRectangleBorder(
|
||||
child: Align(alignment: Alignment.bottomCenter, child: Container(
|
||||
decoration: const BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.only(
|
||||
topLeft: Radius.circular(16),
|
||||
topRight: Radius.circular(16),
|
||||
)),
|
||||
child: Container(
|
||||
decoration: const BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.only(
|
||||
topLeft: Radius.circular(16),
|
||||
topRight: Radius.circular(16),
|
||||
)),
|
||||
width: double.infinity,
|
||||
height: _responsiveUtils.getSizeScreenHeight(context) * 0.7,
|
||||
child: ClipRRect(
|
||||
borderRadius: const BorderRadius.only(
|
||||
topLeft: Radius.circular(16),
|
||||
topRight: Radius.circular(16)),
|
||||
child: _buildEmailForwardCreatorList(context)
|
||||
)
|
||||
width: double.infinity,
|
||||
height: _responsiveUtils.getSizeScreenHeight(context) * 0.7,
|
||||
child: ClipRRect(
|
||||
borderRadius: const BorderRadius.only(
|
||||
topLeft: Radius.circular(16),
|
||||
topRight: Radius.circular(16)),
|
||||
child: _buildEmailForwardCreatorList(context)
|
||||
)
|
||||
)),
|
||||
)
|
||||
),
|
||||
desktop: Scaffold(
|
||||
backgroundColor: Colors.black38,
|
||||
backgroundColor: Colors.black.withAlpha(24),
|
||||
body: GestureDetector(
|
||||
onTap: () => FocusScope.of(context).unfocus(),
|
||||
child: Align(alignment: Alignment.center, child: Card(
|
||||
child: Center(child: Card(
|
||||
color: Colors.transparent,
|
||||
shape: const RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.all(Radius.circular(16))),
|
||||
@@ -104,8 +105,7 @@ class EmailsForwardCreatorView extends GetWidget<EmailsForwardCreatorController>
|
||||
child: _buildEmailForwardCreatorList(context)
|
||||
)
|
||||
)
|
||||
)
|
||||
),
|
||||
)),
|
||||
)
|
||||
)
|
||||
);
|
||||
@@ -125,7 +125,7 @@ class EmailsForwardCreatorView extends GetWidget<EmailsForwardCreatorController>
|
||||
fontSize: 20,
|
||||
color: Colors.black))),
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 8.0),
|
||||
padding: const EdgeInsets.all(16),
|
||||
child: (EmailsForwardInputWithDropListFieldBuilder(
|
||||
AppLocalizations.of(context).recipientsLabel,
|
||||
controller.inputEmailForwardController)
|
||||
@@ -134,7 +134,7 @@ class EmailsForwardCreatorView extends GetWidget<EmailsForwardCreatorController>
|
||||
controller.clearAll();
|
||||
})
|
||||
..addOnSummitedCallbackAction((pattern) {
|
||||
if (pattern != null && pattern.trim().isNotEmpty) {
|
||||
if (pattern != null && pattern.trim().isNotEmpty && pattern.isEmail == true) {
|
||||
controller.addToListEmailForwards(EmailAddress(null, pattern.trim()));
|
||||
controller.clearAll();
|
||||
}
|
||||
@@ -156,7 +156,7 @@ class EmailsForwardCreatorView extends GetWidget<EmailsForwardCreatorController>
|
||||
)),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 8),
|
||||
padding: const EdgeInsets.all(16),
|
||||
child: _buildButtonAddNewEmailsForward(context),
|
||||
),
|
||||
]),
|
||||
@@ -192,7 +192,7 @@ class EmailsForwardCreatorView extends GetWidget<EmailsForwardCreatorController>
|
||||
AppLocalizations.of(context).addRecipients,
|
||||
isVertical: false,
|
||||
))
|
||||
.build();
|
||||
.build();
|
||||
}
|
||||
|
||||
}
|
||||
+3
-2
@@ -3,10 +3,11 @@ import 'package:equatable/equatable.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||
|
||||
class MailsForwardCreatorArguments with EquatableMixin {
|
||||
class EmailForwardCreatorArguments with EquatableMixin {
|
||||
final AccountId accountId;
|
||||
final Session? session;
|
||||
MailsForwardCreatorArguments(this.accountId, this.session);
|
||||
|
||||
EmailForwardCreatorArguments(this.accountId, this.session);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [accountId, session];
|
||||
+1
-1
@@ -12,7 +12,7 @@ typedef OnSummitedCallbackAction = Function(String? pattern);
|
||||
class EmailsForwardInputWithDropListFieldBuilder {
|
||||
|
||||
final String hintText;
|
||||
final TextEditingController editingController;
|
||||
final TextEditingController? editingController;
|
||||
|
||||
OnSelectedSuggestionAction? _onSelectedSuggestionAction;
|
||||
OnSuggestionCallbackAction? _onSuggestionCallbackAction;
|
||||
|
||||
Reference in New Issue
Block a user