From d87da56928825d8e6a39ae4867b002992126ccfb Mon Sep 17 00:00:00 2001 From: dab246 Date: Fri, 22 Jul 2022 18:38:46 +0700 Subject: [PATCH] TF-736 Create DropDownMenuHeaderStyle to select style --- .../drop_down_menu_header_style_widget.dart | 110 ++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 lib/features/composer/presentation/widgets/drop_down_menu_header_style_widget.dart diff --git a/lib/features/composer/presentation/widgets/drop_down_menu_header_style_widget.dart b/lib/features/composer/presentation/widgets/drop_down_menu_header_style_widget.dart new file mode 100644 index 000000000..28da3758f --- /dev/null +++ b/lib/features/composer/presentation/widgets/drop_down_menu_header_style_widget.dart @@ -0,0 +1,110 @@ + +import 'package:core/presentation/extensions/color_extension.dart'; +import 'package:core/presentation/utils/style_utils.dart'; +import 'package:dropdown_button2/dropdown_button2.dart'; +import 'package:flutter/material.dart'; +import 'package:pointer_interceptor/pointer_interceptor.dart'; +import 'package:tmail_ui_user/features/composer/presentation/model/header_style_type.dart'; + +class DropDownMenuHeaderStyleWidget extends StatelessWidget { + + final Widget icon; + final List items; + final Function(HeaderStyleType?)? onChanged; + final Function(bool)? onMenuStateChange; + final double heightItem; + final double dropdownWidth; + + const DropDownMenuHeaderStyleWidget({ + Key? key, + required this.icon, + required this.items, + this.onChanged, + this.onMenuStateChange, + this.heightItem = 44, + this.dropdownWidth = 180, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return DropdownButtonHideUnderline( + child: PointerInterceptor( + child: DropdownButton2( + isExpanded: true, + items: items + .map((item) => DropdownMenuItem( + value: item, + child: PointerInterceptor( + child: Container( + color: Colors.transparent, + height: heightItem, + alignment: Alignment.centerLeft, + child: _buildItemDropdown(item), + ), + ), + )) + .toList(), + customButton: icon, + onChanged: onChanged, + onMenuStateChange: onMenuStateChange, + itemHeight: heightItem, + buttonHeight: heightItem, + itemPadding: const EdgeInsets.symmetric(horizontal: 12), + dropdownWidth: dropdownWidth, + dropdownMaxHeight: 200, + dropdownDecoration: BoxDecoration( + borderRadius: BorderRadius.circular(5), + color: Colors.white, + ), + offset: const Offset(0.0, -8.0), + dropdownElevation: 4, + scrollbarRadius: const Radius.circular(40), + scrollbarThickness: 6, + ), + ), + ); + } + + Widget _buildItemDropdown(HeaderStyleType headerStyle) { + switch(headerStyle) { + case HeaderStyleType.blockquote: + return Container( + decoration: const BoxDecoration( + border: Border( + left: BorderSide(color: AppColor.colorStyleBlockQuote, + width: 5.0))), + padding: const EdgeInsets.symmetric(horizontal: 10.0), + child: _buildHeaderStyle( + headerStyle.styleName, + headerStyle.textSize, + headerStyle.fontWeight)); + case HeaderStyleType.code: + return Container( + width: dropdownWidth, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(4), + border: Border.all(color: AppColor.colorBorderStyleCode, width: 1.0), + color: AppColor.colorBackgroundStyleCode), + padding: const EdgeInsets.symmetric(horizontal: 10.0, vertical: 8), + child: _buildHeaderStyle( + headerStyle.styleName, + headerStyle.textSize, + headerStyle.fontWeight)); + default: + return _buildHeaderStyle( + headerStyle.styleName, + headerStyle.textSize, + headerStyle.fontWeight); + } + } + + Widget _buildHeaderStyle(String name, double size, FontWeight fontWeight) { + return Text(name, + style: TextStyle( + fontSize: size, + fontWeight: fontWeight, + color: Colors.black), + maxLines: 1, + overflow: CommonTextStyle.defaultTextOverFlow); + } +} \ No newline at end of file