Flutter可扩展浮动操作按钮插件expandable_fab_menu的使用
Flutter可扩展浮动操作按钮插件expandable_fab_menu的使用
简介
ExpandableFabMenu
是一个用于Flutter的可扩展浮动操作按钮插件。它可以直接替换 Scaffold.floatingActionButton
中的 FloatingActionButton
小部件。
使用方法
基本属性
animatedIcon
: 动画图标,通常是一个AnimatedIcons
类型。animatedIconTheme
: 动画图标的主题设置。child
: 默认显示的图标。backgroundColor
: 背景颜色。onOpen
: 按钮展开时的回调函数。onClose
: 按钮关闭时的回调函数。scrollVisible
: 控制按钮在滚动时是否可见。overlayColor
和overlayOpacity
: 设置覆盖层的颜色和透明度。children
: 子菜单项列表。
位置设置
无法通过 Scaffold.floatingActionButtonLocation
来设置位置,但可以通过 marginRight
和 marginBottom
参数(默认值为16)来调整按钮的位置。
如果使用了 Scaffold.bottomNavigationBar
,浮动按钮将始终位于该栏上方,因此需要确保 BottomAppBar.hasNotch
为 false
。
示例代码
以下是一个完整的示例代码,展示了如何使用 ExpandableFabMenu
插件:
import 'package:flutter/material.dart';
import 'package:expandable_fab_menu/expandable_fab_menu.dart'; // 确保导入正确的包
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
bool scrollVisible = true;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Expandable FAB Menu Example'),
),
floatingActionButton: ExpandableFabMenu(
animatedIcon: AnimatedIcons.menu_close,
animatedIconTheme: const IconThemeData(size: 22.0),
child: const Icon(Icons.add),
backgroundColor: Colors.orange,
onOpen: () => debugPrint('OPENING DIAL'),
onClose: () => debugPrint('DIAL CLOSED'),
scrollVisible: scrollVisible, // 是否随滚动隐藏
overlayColor: Colors.black,
overlayOpacity: 0.7,
children: [
ExpandableFabMenuItem(
child: const Icon(Icons.add, color: Colors.white),
title: "Create Groups",
titleColor: Colors.white,
subtitle: "You Can create a new group",
subTitleColor: Colors.white,
backgroundColor: Colors.amber,
onTap: () => debugPrint('FIRST CHILD'),
),
ExpandableFabMenuItem(
child: const Icon(Icons.visibility, color: Colors.white),
title: "View Groups",
titleColor: Colors.white,
subtitle: "You Can view your groups",
subTitleColor: Colors.white,
backgroundColor: Colors.green,
onTap: () => debugPrint('SECOND CHILD'),
),
ExpandableFabMenuItem(
child: const Icon(Icons.edit, color: Colors.white),
title: "Edit Groups",
titleColor: Colors.white,
subtitle: "You Can edit a group",
subTitleColor: Colors.white,
backgroundColor: Colors.blue,
onTap: () => debugPrint('THIRD CHILD'),
),
ExpandableFabMenuItem(
child: const Icon(Icons.delete, color: Colors.white),
title: "Delete Groups",
titleColor: Colors.white,
subtitle: "You Can delete a group",
subTitleColor: Colors.white,
backgroundColor: Colors.indigo,
onTap: () => debugPrint('FOURTH CHILD'),
)
],
),
);
}
}
反馈与问题
如果有任何反馈或发现bug,请在 GitHub Issues 上提交问题。
贡献
欢迎提交pull request进行贡献。
许可证
此代码基于MIT许可证发布,版权所有 © 2019 ralphnoel13。
更多关于Flutter可扩展浮动操作按钮插件expandable_fab_menu的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter可扩展浮动操作按钮插件expandable_fab_menu的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用expandable_fab_menu
插件的示例代码。这个插件允许你创建一个可扩展的浮动操作按钮(FAB)菜单,这在需要多个快速操作入口的应用中非常有用。
首先,确保你已经在pubspec.yaml
文件中添加了expandable_fab_menu
依赖:
dependencies:
flutter:
sdk: flutter
expandable_fab_menu: ^x.y.z # 请替换为最新版本号
然后运行flutter pub get
来安装依赖。
接下来,你可以在你的Flutter应用中按照以下方式使用ExpandableFabMenu
:
import 'package:flutter/material.dart';
import 'package:expandable_fab_menu/expandable_fab_menu.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Expandable FAB Menu Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
appBar: AppBar(
title: Text('Expandable FAB Menu Demo'),
),
body: Center(
child: Text('Scroll down to see the FAB menu'),
),
floatingActionButton: ExpandableFabMenu(
iconData: Icons.add,
backgroundColor: Colors.blue,
iconColor: Colors.white,
labels: [
'Action 1',
'Action 2',
'Action 3',
],
iconDatas: [
Icons.directions_car,
Icons.directions_bike,
Icons.directions_walk,
],
labelsBackgroundColor: Colors.white,
labelsTextStyle: TextStyle(color: Colors.black),
onPressed: (index) {
// 处理点击事件
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('You clicked on: ${labels[index]}'),
),
);
},
),
floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
bottomNavigationBar: BottomNavigationBar(
items: [
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: 'Home',
),
BottomNavigationBarItem(
icon: Icon(Icons.settings),
label: 'Settings',
),
],
),
),
);
}
}
// 注意:上面的代码片段中,labels变量没有在代码中直接定义,
// 为了完整性,你可以将其作为一个List定义在类中,或者直接在onPressed回调中使用硬编码的字符串。
// 例如,将labels作为一个List变量:
// List<String> labels = ['Action 1', 'Action 2', 'Action 3'];
// 然后在onPressed回调中使用labels[index]
注意:
ExpandableFabMenu
的onPressed
回调函数的index
参数表示用户点击的菜单项的索引。- 你可以根据需要自定义
backgroundColor
、iconColor
、labelsBackgroundColor
和labelsTextStyle
等属性。 - 在这个示例中,我使用了
BottomNavigationBar
来展示FAB菜单通常放置的位置(在底部导航栏之上)。如果你的布局不同,你可能需要调整floatingActionButtonLocation
属性。
这个示例展示了如何设置一个基本的可扩展FAB菜单,并处理菜单项的点击事件。你可以根据需要进一步自定义和扩展这个示例。