Flutter可扩展浮动操作按钮插件expandable_fab_menu的使用

发布于 1周前 作者 h691938207 来自 Flutter

Flutter可扩展浮动操作按钮插件expandable_fab_menu的使用

简介

ExpandableFabMenu 是一个用于Flutter的可扩展浮动操作按钮插件。它可以直接替换 Scaffold.floatingActionButton 中的 FloatingActionButton 小部件。

使用方法

基本属性

  • animatedIcon: 动画图标,通常是一个 AnimatedIcons 类型。
  • animatedIconTheme: 动画图标的主题设置。
  • child: 默认显示的图标。
  • backgroundColor: 背景颜色。
  • onOpen: 按钮展开时的回调函数。
  • onClose: 按钮关闭时的回调函数。
  • scrollVisible: 控制按钮在滚动时是否可见。
  • overlayColoroverlayOpacity: 设置覆盖层的颜色和透明度。
  • children: 子菜单项列表。

位置设置

无法通过 Scaffold.floatingActionButtonLocation 来设置位置,但可以通过 marginRightmarginBottom 参数(默认值为16)来调整按钮的位置。

如果使用了 Scaffold.bottomNavigationBar,浮动按钮将始终位于该栏上方,因此需要确保 BottomAppBar.hasNotchfalse

示例代码

以下是一个完整的示例代码,展示了如何使用 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

1 回复

更多关于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]

注意

  • ExpandableFabMenuonPressed回调函数的index参数表示用户点击的菜单项的索引。
  • 你可以根据需要自定义backgroundColoriconColorlabelsBackgroundColorlabelsTextStyle等属性。
  • 在这个示例中,我使用了BottomNavigationBar来展示FAB菜单通常放置的位置(在底部导航栏之上)。如果你的布局不同,你可能需要调整floatingActionButtonLocation属性。

这个示例展示了如何设置一个基本的可扩展FAB菜单,并处理菜单项的点击事件。你可以根据需要进一步自定义和扩展这个示例。

回到顶部