Flutter自定义多选下拉菜单插件gzx_dropdown_menu_more_custom的使用
Flutter自定义多选下拉菜单插件gzx_dropdown_menu_more_custom
的使用
功能介绍
这是一个Flutter自定义功能强大的轻量级下拉筛选菜单插件。
内置基本样式
Widget buildBody(BuildContext context) {
return DropDrownSelectorComponent(tag: 'xxx',
dropdownMenuBuilders: (GZXDropdownMenuController dropdownMenuController,
dynamic Function(int, String) onHeaderChanged) {
return [
GZXDropdownMenuBuilder(dropDownWidget: buildList1(dropdownMenuController,onHeaderChanged,0), dropDownHeight: 200),
GZXDropdownMenuBuilder(dropDownWidget: buildList1(dropdownMenuController,onHeaderChanged,1), dropDownHeight: 100),
GZXDropdownMenuBuilder(dropDownWidget: buildList1(dropdownMenuController,onHeaderChanged,2), dropDownHeight: 300),
];
}, dropDownHeaders: [
"浏览器",
"ai",
"年纪"
], body: Center(
child: Text(state.currentChoosed),
),);
}
待办事项
- ❌ 由于GZXDropDownMenu只能在Stack内使用,扩展性还不够强。
- ❌ 支持CustomScrollView和NestedScrollView。
- ❌ …
Gif效果图
如何使用
目前已发布到Pub,你可以在Pub官网查看最新的版本和更新说明!
1. 添加gzx_dropdown_menu
package
打开pubspec.yaml
文件,添加如下代码:
gzx_dropdown_menu: ^3.1.0
添加后打开终端,执行flutter packages get
2. 使用
强烈建议你先clone下本仓库,然后运行下看下效果。打开本仓库example项目下的gzx_dropdown_menu_test_page.dart
文件自己看。
没空编辑文字了,而且说这么多还不如你直接运行下看下效果,然后看下代码,就知道如何使用了。
算了,还是简单说下吧!
你只需要将GZXDropDownHeader
和GZXDropDownMenu
嵌套到你的代码中即可。
GZXDropDownHeader
// 下拉菜单头部
GZXDropDownHeader(
// 下拉的头部项,目前每一项,只能自定义显示的文字、图标、图标大小修改
items: [
GZXDropDownHeaderItem(_dropDownHeaderItemStrings[0]),
GZXDropDownHeaderItem(
_dropDownHeaderItemStrings[1],
iconData: Icons.keyboard_arrow_down,
iconDropDownData: Icons.keyboard_arrow_up,
),
GZXDropDownHeaderItem(
_dropDownHeaderItemStrings[2],
style: TextStyle(color: Colors.green),
iconData: Icons.arrow_upward,
iconDropDownData: Icons.arrow_downward,
),
GZXDropDownHeaderItem(
_dropDownHeaderItemStrings[3],
iconData: Icons.filter_frames,
iconSize: 18,
),
],
// GZXDropDownHeader对应第一父级Stack的key
stackKey: _stackKey,
// controller用于控制menu的显示或隐藏
controller: _dropdownMenuController,
// 当点击头部项的事件,在这里可以进行页面跳转或openEndDrawer
onItemTap: (index) {
if (index == 3) {
_dropdownMenuController.hide();
_scaffoldKey.currentState!.openEndDrawer();
}
},
// 头部的高度
height: 40,
// 头部背景颜色
color: Colors.red,
// 头部边框宽度
borderWidth: 1,
// 头部边框颜色
borderColor: Color(0xFFeeede6),
// 分割线高度
dividerHeight: 20,
// 分割线颜色
dividerColor: Color(0xFFeeede6),
// 文字样式
style: TextStyle(color: Color(0xFF666666), fontSize: 14),
// 下拉时文字样式
dropDownStyle: TextStyle(
fontSize: 14,
color: Theme.of(context).primaryColor,
),
// 图标大小
iconSize: 20,
// 图标颜色
iconColor: Color(0xFFafada7),
// 下拉时图标颜色
iconDropDownColor: Theme.of(context).primaryColor,
),
GZXDropDownMenu
// 下拉菜单,注意GZXDropDownMenu目前只能在Stack内,后续有时间会改进,以及支持CustomScrollView和NestedScrollView
GZXDropDownMenu(
// controller用于控制menu的显示或隐藏
controller: _dropdownMenuController,
// 下拉菜单显示或隐藏动画时长
animationMilliseconds: 300,
// 下拉后遮罩颜色
//maskColor: Theme.of(context).primaryColor.withOpacity(0.5),
//maskColor: Colors.red.withOpacity(0.5),
dropdownMenuChanging: (isShow, index) {
setState(() {
_dropdownMenuChange = '(正在${isShow ? '显示' : '隐藏'}$index)';
print(_dropdownMenuChange);
});
},
dropdownMenuChanged: (isShow, index) {
setState(() {
_dropdownMenuChange = '(已经${isShow ? '显示' : '隐藏'}$index)';
print(_dropdownMenuChange);
});
},
// 下拉菜单,高度自定义,你想显示什么就显示什么,完全由你决定,你只需要在选择后调用_dropdownMenuController.hide();即可
menus: [
GZXDropdownMenuBuilder(
dropDownHeight: 40 * 8.0,
dropDownWidget: _buildAddressWidget((selectValue) {
_dropDownHeaderItemStrings[0] = selectValue;
_dropdownMenuController.hide();
setState(() {});
})),
GZXDropdownMenuBuilder(
dropDownHeight: 40 * 8.0,
dropDownWidget: _buildConditionListWidget(_brandSortConditions, (value) {
_selectBrandSortCondition = value;
_dropDownHeaderItemStrings[1] =
_selectBrandSortCondition.name == '全部' ? '品牌' : _selectBrandSortCondition.name;
_dropdownMenuController.hide();
setState(() {});
})),
GZXDropdownMenuBuilder(
dropDownHeight: 40.0 * _distanceSortConditions.length,
dropDownWidget: _buildConditionListWidget(_distanceSortConditions, (value) {
_selectDistanceSortCondition = value;
_dropDownHeaderItemStrings[2] = _selectDistanceSortCondition.name;
_dropdownMenuController.hide();
setState(() {});
})),
],
),
更多关于Flutter自定义多选下拉菜单插件gzx_dropdown_menu_more_custom的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter自定义多选下拉菜单插件gzx_dropdown_menu_more_custom的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter中使用gzx_dropdown_menu_more_custom
插件来实现自定义多选下拉菜单的示例代码。首先,确保你已经在pubspec.yaml
文件中添加了该插件的依赖:
dependencies:
flutter:
sdk: flutter
gzx_dropdown_menu_more_custom: ^最新版本号 # 替换为实际最新版本号
然后运行flutter pub get
来安装依赖。
以下是一个完整的示例代码,展示了如何使用gzx_dropdown_menu_more_custom
插件来实现一个自定义多选下拉菜单:
import 'package:flutter/material.dart';
import 'package:gzx_dropdown_menu_more_custom/gzx_dropdown_menu_header.dart';
import 'package:gzx_dropdown_menu_more_custom/gzx_dropdown_menu_more.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List<String> selectedOptions = [];
List<String> options = ['Option 1', 'Option 2', 'Option 3', 'Option 4'];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('gzx_dropdown_menu_more_custom Demo'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: GZXDropdownMenuMore(
data: options,
selectedData: selectedOptions,
multiSelect: true,
maxHeight: 200,
itemCount: options.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(options[index]),
);
},
header: GZXDropdownMenuHeader(
title: Text('Select Options'),
closeIcon: Icon(Icons.close),
),
onChanged: (List<String> result) {
setState(() {
selectedOptions = result;
});
},
),
),
);
}
}
代码说明:
- 依赖引入:在
pubspec.yaml
中引入gzx_dropdown_menu_more_custom
插件。 - 主应用:
MyApp
类作为主应用入口,定义了应用的主题和首页。 - 首页:
MyHomePage
是一个有状态的组件,用于管理选中的选项。 - 状态管理:在
_MyHomePageState
中,定义了两个列表selectedOptions
和options
,分别用于存储选中的选项和所有可选的选项。 - 下拉菜单:使用
GZXDropdownMenuMore
组件来实现自定义多选下拉菜单。data
:传入所有可选的选项。selectedData
:传入当前选中的选项。multiSelect
:设置为true
以启用多选。maxHeight
:设置下拉菜单的最大高度。itemCount
:传入选项的数量。itemBuilder
:用于构建每个选项的UI。header
:自定义下拉菜单的头部。onChanged
:当选项变化时的回调函数,更新selectedOptions
状态。
运行上述代码,你将看到一个自定义的多选下拉菜单,用户可以选择多个选项,选中的选项将显示在菜单外部。
希望这个示例对你有帮助!如果你有其他问题或需要进一步的帮助,请随时告诉我。