Flutter下拉菜单插件gzx_dropdown_menu的使用
Flutter下拉菜单插件gzx_dropdown_menu的使用
简介
gzx_dropdown_menu
是一个为Flutter设计的自定义功能强大的轻量级下拉筛选菜单包。它支持iOS和Android平台,具有高度可定制性,可以轻松集成到您的项目中。
功能介绍
- 自定义下拉菜单头部
- 自定义下拉菜单项
- 自定义下拉菜单动画
- 控制下拉菜单显示或隐藏
如何使用
1. 添加 gzx_dropdown_menu package
在 pubspec.yaml
文件中添加如下依赖:
dependencies:
gzx_dropdown_menu: ^3.1.0
然后在终端执行 flutter packages get
命令来安装依赖。
2. 使用 GZXDropDownHeader 和 GZXDropDownMenu
GZXDropDownHeader
这是下拉菜单的头部组件,你可以自定义头部项的文字、图标等属性。以下是一个简单的例子:
GZXDropDownHeader(
items: [
GZXDropDownHeaderItem("分类"),
GZXDropDownHeaderItem("品牌", iconData: Icons.keyboard_arrow_down),
GZXDropDownHeaderItem("距离", style: TextStyle(color: Colors.green)),
GZXDropDownHeaderItem("更多", iconData: Icons.filter_frames, iconSize: 18),
],
stackKey: _stackKey,
controller: _dropdownMenuController,
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
中。以下是一个完整的示例代码:
import 'package:flutter/material.dart';
import 'package:gzx_dropdown_menu/gzx_dropdown_menu.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: GZXDropDownMenuTestPage(),
);
}
}
class GZXDropDownMenuTestPage extends StatefulWidget {
@override
_GZXDropDownMenuTestPageState createState() => _GZXDropDownMenuTestPageState();
}
class _GZXDropDownMenuTestPageState extends State<GZXDropDownMenuTestPage> {
GlobalKey<DropdownMenuState> _stackKey = GlobalKey();
GZXDropdownMenuController _dropdownMenuController = GZXDropdownMenuController();
List<String> _dropDownHeaderItemStrings = ["分类", "品牌", "距离", "更多"];
String _dropdownMenuChange = "";
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Flutter Demo')),
body: Stack(
key: _stackKey,
children: <Widget>[
// 页面内容
Container(
color: Colors.white,
child: Center(
child: Text('页面内容'),
),
),
// 下拉菜单头部
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,
),
],
stackKey: _stackKey,
controller: _dropdownMenuController,
onItemTap: (index) {
if (index == 3) {
_dropdownMenuController.hide();
Scaffold.of(context).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(
controller: _dropdownMenuController,
animationMilliseconds: 300,
dropdownMenuChanging: (isShow, index) {
setState(() {
_dropdownMenuChange = '(正在${isShow ? '显示' : '隐藏'}$index)';
print(_dropdownMenuChange);
});
},
dropdownMenuChanged: (isShow, index) {
setState(() {
_dropdownMenuChange = '(已经${isShow ? '显示' : '隐藏'}$index)';
print(_dropdownMenuChange);
});
},
menus: [
GZXDropdownMenuBuilder(
dropDownHeight: 40 * 8.0,
dropDownWidget: ListView.builder(
itemCount: 10,
itemBuilder: (context, index) {
return ListTile(
title: Text('选项 ${index + 1}'),
onTap: () {
_dropDownHeaderItemStrings[0] = '选项 ${index + 1}';
_dropdownMenuController.hide();
setState(() {});
},
);
},
)),
GZXDropdownMenuBuilder(
dropDownHeight: 40 * 8.0,
dropDownWidget: ListView.builder(
itemCount: 5,
itemBuilder: (context, index) {
return ListTile(
title: Text('品牌 ${index + 1}'),
onTap: () {
_dropDownHeaderItemStrings[1] = '品牌 ${index + 1}';
_dropdownMenuController.hide();
setState(() {});
},
);
},
)),
GZXDropdownMenuBuilder(
dropDownHeight: 40 * 5.0,
dropDownWidget: ListView.builder(
itemCount: 5,
itemBuilder: (context, index) {
return ListTile(
title: Text('距离 ${index + 1}'),
onTap: () {
_dropDownHeaderItemStrings[2] = '距离 ${index + 1}';
_dropdownMenuController.hide();
setState(() {});
},
);
},
)),
],
),
],
),
);
}
}
相关链接
通过上述步骤,您可以轻松地将 gzx_dropdown_menu
集成到您的Flutter项目中,并根据需要进行自定义。希望这对您有所帮助!
更多关于Flutter下拉菜单插件gzx_dropdown_menu的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter下拉菜单插件gzx_dropdown_menu的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter中使用gzx_dropdown_menu
插件的一个简单示例。这个插件提供了一个高度可定制的下拉菜单组件。
首先,确保你已经在pubspec.yaml
文件中添加了gzx_dropdown_menu
依赖:
dependencies:
flutter:
sdk: flutter
gzx_dropdown_menu: ^最新版本号 # 请替换为实际的最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,是一个完整的示例代码,展示了如何使用gzx_dropdown_menu
:
import 'package:flutter/material.dart';
import 'package:gzx_dropdown_menu/gzx_dropdown_menu.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> {
String selectedValue = 'Option 1';
final List<String> options = ['Option 1', 'Option 2', 'Option 3'];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('gzx_dropdown_menu Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
GZXDropdownMenu(
value: selectedValue,
hint: Text('Select an option'),
items: options.map((String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value),
);
}).toList(),
onChanged: (newValue) {
setState(() {
selectedValue = newValue!;
});
},
underline: Container(
height: 2,
color: Colors.deepPurple,
),
icon: Icon(
Icons.arrow_drop_down,
color: Colors.deepPurple,
),
labelStyle: TextStyle(color: Colors.deepPurple),
menuMaxHeight: 200,
menuWidth: double.infinity,
borderRadius: BorderRadius.circular(8),
elevation: 8,
menuItemHeight: 50,
menuBackgroundColor: Colors.white,
menuItemColor: Colors.deepPurple,
hintStyle: TextStyle(color: Colors.grey),
),
SizedBox(height: 20),
Text('Selected Value: $selectedValue'),
],
),
),
);
}
}
在这个示例中,我们做了以下几件事:
- 引入
gzx_dropdown_menu
包。 - 创建一个包含选项的列表
options
。 - 使用
GZXDropdownMenu
组件来创建一个下拉菜单。 - 设置了下拉菜单的
value
、hint
、items
和onChanged
回调。 - 通过
setState
更新选中的值。 - 自定义了下拉菜单的一些样式属性,如
underline
、icon
、labelStyle
等。
这个示例展示了gzx_dropdown_menu
的基本用法和一些自定义选项。你可以根据需要进一步调整样式和功能。