Flutter手势菜单插件gestu_menu的使用
Flutter手势菜单插件gestu_menu的使用
Gestu Menu 是一个提供可自定义和动画效果的手势菜单插件,包含主菜单项和子菜单项。
特性
- 支持主菜单项和子菜单项。
- 支持前缀和后缀图标。
- 可以自定义选中项的颜色。
- 展开和收缩有动画效果。
安装
在 pubspec.yaml
文件中添加 gestu_menu
依赖:
dependencies:
gestu_menu: ^0.0.2
然后运行 flutter pub get
来安装该包。
使用
以下是一个完整的示例代码,展示了如何使用 gestu_menu
插件:
import 'package:flutter/material.dart';
import 'package:gestu_menu/gestu_menu.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
// 这个小部件是你的应用的根节点。
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Gestu Menu',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const MyHomePage(title: 'Demo Menu Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text(widget.title),
),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const SizedBox(height: 8),
GestuMenuPrimaryItem<String>(
title: 'Main Option',
prefixIconData: Icons.space_dashboard_outlined,
expandedIndicatorRight: true,
onTap: (value) {
debugPrint('action button: $value');
},
items: const [
GestuMenuSecondaryItemWidget(
prefixIconData: Icons.bubble_chart,
title: 'Menu Item Selected',
counter: 1,
isSelected: true,
index: 'hola',
// onTap: (value) {},
),
GestuMenuSecondaryItemWidget(
prefixIconData: Icons.bar_chart_outlined,
title: 'Menu Item',
counter: 2,
index: 'Adios',
// onTap: (value) {},
),
],
),
const SizedBox(height: 8),
Expanded(
child: ListView(
children: [
GestuMenuPrimaryItem(
title: 'First Option',
prefixIconData: Icons.dashboard,
expandedIndicatorRight: true,
items: [
GestuMenuSecondaryItemWidget(
prefixIconData: Icons.bubble_chart,
title: 'Menu Item Selected',
counter: 1,
isSelected: true,
index: 1,
onTap: (value) {},
),
GestuMenuSecondaryItemWidget(
prefixIconData: Icons.bar_chart_outlined,
title: 'Menu Item',
counter: 2,
index: 2,
onTap: (value) {},
),
],
),
GestuMenuPrimaryItem(
title: 'Second Option',
prefixIconData: Icons.security_outlined,
expandedIndicatorRight: true,
items: [
GestuMenuSecondaryItemWidget(
prefixIconData: Icons.developer_board,
title: 'Menu Item',
suffixIconData: Icons.check_box,
index: 1,
onTap: (value) {},
),
GestuMenuSecondaryItemWidget(
prefixIconData: Icons.developer_mode,
title: 'Menu Item',
suffixIconData: Icons.check_box_outline_blank,
index: 2,
onTap: (value) {},
),
],
),
GestuMenuSecondaryItemWidget(
isPrimary: true,
prefixIconData: Icons.verified_user,
title: 'Third Option',
index: 2,
onTap: (value) {},
),
],
),
)
],
),
);
}
}
更多关于Flutter手势菜单插件gestu_menu的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter手势菜单插件gestu_menu的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用gestu_menu
插件的示例代码。gestu_menu
是一个用于创建手势菜单的Flutter插件,允许用户通过手势触发菜单项。
首先,确保你已经在pubspec.yaml
文件中添加了gestu_menu
依赖:
dependencies:
flutter:
sdk: flutter
gestu_menu: ^最新版本号 # 替换为实际的最新版本号
然后,运行flutter pub get
来安装依赖。
接下来是一个简单的示例代码,展示如何使用gestu_menu
插件:
import 'package:flutter/material.dart';
import 'package:gestu_menu/gestu_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: Scaffold(
appBar: AppBar(
title: Text('Gestu Menu Demo'),
),
body: Center(
child: GestuMenuExample(),
),
),
);
}
}
class GestuMenuExample extends StatefulWidget {
@override
_GestuMenuExampleState createState() => _GestuMenuExampleState();
}
class _GestuMenuExampleState extends State<GestuMenuExample> {
final List<String> menuItems = ['Item 1', 'Item 2', 'Item 3', 'Item 4'];
@override
Widget build(BuildContext context) {
return Container(
child: GestuMenu(
onMenuItemClick: (index) {
// 菜单项点击事件处理
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('Clicked: ${menuItems[index]}'),
),
);
},
menuItems: menuItems.map((item) => GestureMenuItem(
title: Text(item),
)).toList(),
menuDirection: MenuDirection.rightToLeft, // 菜单展开方向
menuAngle: 45, // 菜单项之间的角度
menuRadius: 150, // 菜单半径
itemSpacing: 20, // 菜单项之间的间距
itemPadding: EdgeInsets.all(10), // 菜单项内边距
menuBackgroundColor: Colors.white, // 菜单背景颜色
itemBackgroundColor: Colors.blue, // 菜单项背景颜色
itemTitleStyle: TextStyle(color: Colors.white), // 菜单项文字样式
),
);
}
}
在这个示例中:
- 我们创建了一个
MyApp
类,它是应用的根widget。 MyApp
类中有一个Scaffold
,其中包含一个Center
widget,Center
widget中包含我们的GestuMenuExample
widget。GestuMenuExample
是一个StatefulWidget
,在其State
中,我们定义了菜单项列表menuItems
。GestuMenu
widget接受多个参数,包括:onMenuItemClick
:一个回调函数,当菜单项被点击时调用。menuItems
:一个GestureMenuItem
列表,每个菜单项都包含一个标题(在这个例子中是文本)。menuDirection
:菜单的展开方向。menuAngle
:菜单项之间的角度。menuRadius
:菜单的半径。itemSpacing
:菜单项之间的间距。itemPadding
:菜单项的内边距。menuBackgroundColor
:菜单的背景颜色。itemBackgroundColor
:菜单项的背景颜色。itemTitleStyle
:菜单项的文字样式。
运行这个示例代码,你会看到一个居中的手势菜单,当你点击菜单项时,会显示一个SnackBar,显示被点击的菜单项内容。
希望这个示例代码对你有帮助!