TF-2084 Add widget for action row
(cherry picked from commit aef42f4f70a54b98fcfe4534aac85372424c9d25)
This commit is contained in:
+57
@@ -0,0 +1,57 @@
|
||||
import 'package:core/core.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:model/mailbox/presentation_mailbox.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/widgets/rule_filter_button_field.dart';
|
||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rules_filter_input_field_builder.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
|
||||
class RuleFilterActionDetailed extends StatelessWidget {
|
||||
final EmailRuleFilterAction? actionType;
|
||||
final PresentationMailbox? mailboxSelected;
|
||||
final String? errorValue;
|
||||
final Function()? tapActionDetailedCallback;
|
||||
final TextEditingController? forwardEmailEditingController;
|
||||
final FocusNode? forwardEmailFocusNode;
|
||||
final OnChangeFilterInputAction? forwardEmailOnChangeAction;
|
||||
|
||||
const RuleFilterActionDetailed({
|
||||
Key? key,
|
||||
this.actionType,
|
||||
this.mailboxSelected,
|
||||
this.errorValue,
|
||||
this.tapActionDetailedCallback,
|
||||
this.forwardEmailEditingController,
|
||||
this.forwardEmailFocusNode,
|
||||
this.forwardEmailOnChangeAction,
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final borderColor = errorValue?.isNotEmpty == true ? AppColor.colorInputBorderErrorVerifyName : AppColor.colorInputBorderCreateMailbox;
|
||||
switch (actionType) {
|
||||
case EmailRuleFilterAction.moveMessage:
|
||||
return RuleFilterButtonField<PresentationMailbox>(
|
||||
value: mailboxSelected,
|
||||
borderColor: borderColor,
|
||||
tapActionCallback: (value) {
|
||||
tapActionDetailedCallback!();
|
||||
},
|
||||
);
|
||||
case EmailRuleFilterAction.forwardTo:
|
||||
return RulesFilterInputField(
|
||||
errorText: errorValue,
|
||||
hintText: AppLocalizations.of(context).forwardEmailHintText,
|
||||
editingController: forwardEmailEditingController,
|
||||
focusNode: forwardEmailFocusNode,
|
||||
onChangeAction: forwardEmailOnChangeAction,
|
||||
);
|
||||
case EmailRuleFilterAction.maskAsSeen:
|
||||
case EmailRuleFilterAction.startIt:
|
||||
case EmailRuleFilterAction.rejectIt:
|
||||
case EmailRuleFilterAction.markAsSpam:
|
||||
default:
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
}
|
||||
}
|
||||
+93
@@ -0,0 +1,93 @@
|
||||
import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:core/presentation/utils/style_utils.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||
import 'package:tmail_ui_user/features/base/widget/drop_down_button_widget.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/styles/rule_filter_action_styles.dart';
|
||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rule_filter_action_detailed_builder.dart';
|
||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rule_filter_condition_remove_button_builder.dart';
|
||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rules_filter_input_field_builder.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
|
||||
class RuleFilterActionRow extends StatelessWidget {
|
||||
final List<EmailRuleFilterAction> actionList;
|
||||
final EmailRuleFilterAction? actionSelected;
|
||||
final Function(EmailRuleFilterAction?)? onActionChanged;
|
||||
final PresentationMailbox? mailboxSelected;
|
||||
final String? errorValue;
|
||||
final Function()? tapActionDetailedCallback;
|
||||
final ImagePaths? imagePaths;
|
||||
final Function()? tapRemoveActionCallback;
|
||||
final TextEditingController? forwardEmailEditingController;
|
||||
final FocusNode? forwardEmailFocusNode;
|
||||
final OnChangeFilterInputAction? onChangeForwardEmail;
|
||||
|
||||
const RuleFilterActionRow({
|
||||
Key? key,
|
||||
required this.actionList,
|
||||
this.actionSelected,
|
||||
this.onActionChanged,
|
||||
this.mailboxSelected,
|
||||
this.errorValue,
|
||||
this.tapActionDetailedCallback,
|
||||
this.imagePaths,
|
||||
this.tapRemoveActionCallback,
|
||||
this.forwardEmailEditingController,
|
||||
this.forwardEmailFocusNode,
|
||||
this.onChangeForwardEmail,
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final supportedAction = actionList.where((action) => action.getSupported() == true).toList();
|
||||
return Row(
|
||||
crossAxisAlignment: actionSelected == EmailRuleFilterAction.moveMessage ? CrossAxisAlignment.center : CrossAxisAlignment.start,
|
||||
children: [
|
||||
Expanded(
|
||||
child: DropDownButtonWidget<EmailRuleFilterAction>(
|
||||
items: supportedAction,
|
||||
itemSelected: actionSelected,
|
||||
onChanged: (newAction) => onActionChanged!(newAction),
|
||||
supportSelectionIcon: true,
|
||||
supportHint: true,
|
||||
hintText: AppLocalizations.of(context).selectAction,
|
||||
),
|
||||
),
|
||||
actionSelected == EmailRuleFilterAction.moveMessage
|
||||
? Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: RuleFilterActionStyles.mainPadding),
|
||||
child: Text(
|
||||
AppLocalizations.of(context).toMailbox,
|
||||
overflow: CommonTextStyle.defaultTextOverFlow,
|
||||
softWrap: CommonTextStyle.defaultSoftWrap,
|
||||
maxLines: RuleFilterActionStyles.maxLines,
|
||||
style: RuleFilterActionStyles.textStyle,
|
||||
),
|
||||
)
|
||||
: SizedBox(
|
||||
width: actionSelected == EmailRuleFilterAction.forwardTo ? RuleFilterActionStyles.itemDistance : 0,
|
||||
),
|
||||
Expanded(
|
||||
child: RuleFilterActionDetailed(
|
||||
actionType: actionSelected,
|
||||
mailboxSelected: mailboxSelected,
|
||||
errorValue: errorValue,
|
||||
tapActionDetailedCallback: tapActionDetailedCallback,
|
||||
forwardEmailEditingController: forwardEmailEditingController,
|
||||
forwardEmailFocusNode: forwardEmailFocusNode,
|
||||
forwardEmailOnChangeAction: onChangeForwardEmail,
|
||||
),
|
||||
),
|
||||
Container(
|
||||
padding: const EdgeInsets.only(left: RuleFilterActionStyles.mainPadding),
|
||||
alignment: Alignment.center,
|
||||
child: RuleFilterConditionRemoveButton(
|
||||
imagePath: imagePaths,
|
||||
tapRemoveRuleFilterConditionCallback: tapRemoveActionCallback,
|
||||
),
|
||||
)
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
+72
@@ -0,0 +1,72 @@
|
||||
import 'package:core/core.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:model/mailbox/presentation_mailbox.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/styles/rule_filter_action_styles.dart';
|
||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rule_filter_action_detailed_builder.dart';
|
||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rule_filter_button_field.dart';
|
||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rules_filter_input_field_builder.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
|
||||
class RuleFilterActionRowMobile extends StatelessWidget {
|
||||
final EmailRuleFilterAction? actionSelected;
|
||||
final Function()? tapActionCallback;
|
||||
final PresentationMailbox? mailboxSelected;
|
||||
final String? errorValue;
|
||||
final Function()? tapActionDetailedCallback;
|
||||
final TextEditingController? forwardEmailEditingController;
|
||||
final FocusNode? forwardEmailFocusNode;
|
||||
final OnChangeFilterInputAction? onChangeForwardEmail;
|
||||
|
||||
const RuleFilterActionRowMobile({
|
||||
Key? key,
|
||||
this.actionSelected,
|
||||
this.tapActionCallback,
|
||||
this.mailboxSelected,
|
||||
this.errorValue,
|
||||
this.tapActionDetailedCallback,
|
||||
this.forwardEmailEditingController,
|
||||
this.forwardEmailFocusNode,
|
||||
this.onChangeForwardEmail,
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
RuleFilterButtonField<EmailRuleFilterAction>(
|
||||
value: actionSelected,
|
||||
tapActionCallback: (value) {
|
||||
tapActionCallback!();
|
||||
},
|
||||
hintText: AppLocalizations.of(context).selectAction,
|
||||
),
|
||||
actionSelected == EmailRuleFilterAction.moveMessage
|
||||
? Container(
|
||||
alignment: Alignment.centerLeft,
|
||||
padding: const EdgeInsets.symmetric(vertical: RuleFilterActionStyles.mainPadding),
|
||||
child: Text(
|
||||
AppLocalizations.of(context).toMailbox,
|
||||
overflow: CommonTextStyle.defaultTextOverFlow,
|
||||
softWrap: CommonTextStyle.defaultSoftWrap,
|
||||
maxLines: RuleFilterActionStyles.maxLines,
|
||||
style: RuleFilterActionStyles.textStyle,
|
||||
),
|
||||
)
|
||||
: SizedBox(
|
||||
height: actionSelected == EmailRuleFilterAction.forwardTo ? RuleFilterActionStyles.itemDistance : 0,
|
||||
),
|
||||
RuleFilterActionDetailed(
|
||||
actionType: actionSelected,
|
||||
mailboxSelected: mailboxSelected,
|
||||
errorValue: errorValue,
|
||||
tapActionDetailedCallback: tapActionDetailedCallback,
|
||||
forwardEmailEditingController: forwardEmailEditingController,
|
||||
forwardEmailFocusNode: forwardEmailFocusNode,
|
||||
forwardEmailOnChangeAction: onChangeForwardEmail,
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
+121
@@ -0,0 +1,121 @@
|
||||
import 'package:core/presentation/extensions/color_extension.dart';
|
||||
import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:core/presentation/utils/responsive_utils.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_slidable/flutter_slidable.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:model/mailbox/presentation_mailbox.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/styles/rule_filter_action_styles.dart';
|
||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rule_filter_action_row_builder.dart';
|
||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rule_filter_action_row_mobile_builder.dart';
|
||||
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/widgets/rules_filter_input_field_builder.dart';
|
||||
|
||||
class RuleFilterActionWidget extends StatelessWidget {
|
||||
final ResponsiveUtils responsiveUtils;
|
||||
final Function()? tapRemoveCallback;
|
||||
final ImagePaths? imagePaths;
|
||||
final EmailRuleFilterAction? actionSelected;
|
||||
final Function(EmailRuleFilterAction?)? onActionChanged;
|
||||
final Function()? onActionChangeMobile;
|
||||
final PresentationMailbox? mailboxSelected;
|
||||
final String? errorValue;
|
||||
final Function()? tapActionDetailedCallback;
|
||||
final TextEditingController? forwardEmailEditingController;
|
||||
final FocusNode? forwardEmailFocusNode;
|
||||
final OnChangeFilterInputAction? onChangeForwardEmail;
|
||||
|
||||
const RuleFilterActionWidget({
|
||||
Key? key,
|
||||
required this.responsiveUtils,
|
||||
this.tapRemoveCallback,
|
||||
this.imagePaths,
|
||||
this.actionSelected,
|
||||
this.onActionChanged,
|
||||
this.mailboxSelected,
|
||||
this.errorValue,
|
||||
this.tapActionDetailedCallback,
|
||||
this.forwardEmailEditingController,
|
||||
this.forwardEmailFocusNode,
|
||||
this.onChangeForwardEmail,
|
||||
this.onActionChangeMobile,
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Slidable(
|
||||
enabled: responsiveUtils.isMobile(context) ? true : false,
|
||||
endActionPane: ActionPane(
|
||||
extentRatio: RuleFilterActionStyles.extentRatio,
|
||||
motion: const BehindMotion(),
|
||||
children: [
|
||||
CustomSlidableAction(
|
||||
padding: const EdgeInsets.only(right: RuleFilterActionStyles.mainPadding),
|
||||
borderRadius: const BorderRadius.only(
|
||||
topRight: Radius.circular(RuleFilterActionStyles.mainBorderRadius),
|
||||
bottomRight: Radius.circular(RuleFilterActionStyles.mainBorderRadius),
|
||||
),
|
||||
onPressed: (_) => tapRemoveCallback!(),
|
||||
backgroundColor: AppColor.colorBackgroundFieldConditionRulesFilter,
|
||||
child: CircleAvatar(
|
||||
backgroundColor: AppColor.colorRemoveRuleFilterConditionButton,
|
||||
radius: RuleFilterActionStyles.removeButtonRadius,
|
||||
child: SvgPicture.asset(
|
||||
imagePaths!.icMinimize,
|
||||
fit: BoxFit.fill,
|
||||
colorFilter: AppColor.colorDeletePermanentlyButton.asFilter(),
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
child: Builder(
|
||||
builder: (context) {
|
||||
SlidableController? slideController = Slidable.of(context);
|
||||
return ValueListenableBuilder<int>(
|
||||
valueListenable: slideController?.direction ?? ValueNotifier<int>(0),
|
||||
builder: (context, value, _) {
|
||||
var borderRadius = value != -1
|
||||
? BorderRadius.circular(RuleFilterActionStyles.mainBorderRadius)
|
||||
: const BorderRadius.only(
|
||||
bottomLeft: Radius.circular(RuleFilterActionStyles.mainBorderRadius),
|
||||
topLeft: Radius.circular(RuleFilterActionStyles.mainBorderRadius),
|
||||
);
|
||||
return Container(
|
||||
padding: const EdgeInsets.all(RuleFilterActionStyles.mainPadding),
|
||||
decoration: BoxDecoration(
|
||||
color: AppColor.colorBackgroundFieldConditionRulesFilter,
|
||||
borderRadius: borderRadius,
|
||||
),
|
||||
child: responsiveUtils.isMobile(context)
|
||||
? RuleFilterActionRowMobile(
|
||||
actionSelected: actionSelected,
|
||||
mailboxSelected: mailboxSelected,
|
||||
errorValue: errorValue,
|
||||
tapActionDetailedCallback: tapActionDetailedCallback,
|
||||
forwardEmailEditingController: forwardEmailEditingController,
|
||||
forwardEmailFocusNode: forwardEmailFocusNode,
|
||||
onChangeForwardEmail: onChangeForwardEmail,
|
||||
tapActionCallback: onActionChangeMobile,
|
||||
)
|
||||
: RuleFilterActionRow(
|
||||
actionList: EmailRuleFilterAction.values,
|
||||
actionSelected: actionSelected,
|
||||
onActionChanged: onActionChanged,
|
||||
mailboxSelected: mailboxSelected,
|
||||
errorValue: errorValue,
|
||||
tapActionDetailedCallback: tapActionDetailedCallback,
|
||||
imagePaths: imagePaths,
|
||||
tapRemoveActionCallback: tapRemoveCallback,
|
||||
forwardEmailEditingController: forwardEmailEditingController,
|
||||
forwardEmailFocusNode: forwardEmailFocusNode,
|
||||
onChangeForwardEmail: onChangeForwardEmail,
|
||||
)
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user