TF-2101 Add buttons and hasAttachment checkbox

(cherry picked from commit c132bf1c8bdbe15a807f95c2668d4c35d3aa77ff)
This commit is contained in:
hieubt
2023-12-21 16:50:27 +07:00
committed by Dat H. Pham
parent b1ddc5e1cc
commit 4d458a574c
5 changed files with 135 additions and 0 deletions
@@ -0,0 +1,4 @@
class ListButtonWidgetStyles {
static const double space = 12.0;
static const double mobileSpace = 16.0;
}
@@ -0,0 +1,5 @@
class TextActionButtonWidgetStyles {
static const double radius = 10.0;
static const double height = 44.0;
static const double fontSize = 17.0;
}
@@ -0,0 +1,42 @@
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/views/checkbox/labeled_checkbox.dart';
import 'package:flutter/material.dart';
import 'package:tmail_ui_user/features/base/isolate/background_isolate_binary_messenger/background_isolate_binary_messenger_mobile.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
typedef OnChangedHasAttachment = void Function(bool? value);
class CheckBoxHasAttachmentWidget extends StatelessWidget {
final bool hasAttachmentValue;
final FocusNode? currentFocusNode;
final FocusNode? nextFocusNode;
final OnChangedHasAttachment? onChanged;
const CheckBoxHasAttachmentWidget({
super.key,
required this.hasAttachmentValue,
this.currentFocusNode,
this.nextFocusNode,
this.onChanged,
});
@override
Widget build(BuildContext context) {
return RawKeyboardListener(
focusNode: FocusNode(),
onKey: (event) {
if (event.logicalKey == LogicalKeyboardKey.tab) {
nextFocusNode?.requestFocus();
}
},
child: LabeledCheckbox(
label: AppLocalizations.of(context).hasAttachment,
focusNode: currentFocusNode,
contentPadding: EdgeInsets.zero,
value: hasAttachmentValue,
activeColor: AppColor.primaryColor,
onChanged: onChanged,
)
);
}
}
@@ -0,0 +1,47 @@
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:flutter/material.dart';
import 'package:tmail_ui_user/features/email_recovery/presentation/styles/list_button_widget_styles.dart';
import 'package:tmail_ui_user/features/email_recovery/presentation/widgets/text_action_button_widget.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
class ListButtonWidget extends StatelessWidget {
final VoidCallback onCancel;
final VoidCallback onRestore;
final ResponsiveUtils responsiveUtils;
const ListButtonWidget({
super.key,
required this.onCancel,
required this.onRestore,
required this.responsiveUtils,
});
@override
Widget build(BuildContext context) {
return Row(
children: [
Expanded(
child: TextActionButtonWidget(
colorButton: AppColor.colorBgSearchBar,
colorText: AppColor.primaryColor,
text: AppLocalizations.of(context).cancel,
onAction: onCancel
),
),
SizedBox(width: responsiveUtils.isMobile(context)
? ListButtonWidgetStyles.mobileSpace
: ListButtonWidgetStyles.space
),
Expanded(
child: TextActionButtonWidget(
colorButton: AppColor.primaryColor,
colorText: Colors.white,
text: AppLocalizations.of(context).restore,
onAction: onRestore
)
)
],
);
}
}
@@ -0,0 +1,37 @@
import 'package:core/presentation/views/button/icon_button_web.dart';
import 'package:flutter/material.dart';
import 'package:tmail_ui_user/features/email_recovery/presentation/styles/text_action_button_widget_styles.dart';
class TextActionButtonWidget extends StatelessWidget {
final Color colorButton;
final Color colorText;
final String text;
final VoidCallback onAction;
final double? minWidth;
const TextActionButtonWidget({
super.key,
required this.colorButton,
required this.colorText,
required this.text,
required this.onAction,
this.minWidth,
});
@override
Widget build(BuildContext context) {
return buildButtonWrapText(
text,
radius: TextActionButtonWidgetStyles.radius,
height: TextActionButtonWidgetStyles.height,
minWidth: minWidth,
textStyle: TextStyle(
fontSize: TextActionButtonWidgetStyles.fontSize,
color: colorText,
fontWeight: FontWeight.w500
),
bgColor: colorButton,
onTap: onAction
);
}
}