Flutter浮动菜单面板插件floating_menu_panel的使用

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

Flutter浮动菜单面板插件floating_menu_panel的使用

介绍

floating_menu_panel 是一个Flutter插件,用于在应用中创建浮动的菜单面板。该面板可以包含多个图标按钮,并且可以通过点击展开或收起。以下是关于如何使用 floating_menu_panel 插件的详细介绍和示例代码。

基本用法

要使用 floating_menu_panel,首先需要导入插件,然后将其添加到 Stack 小部件的子部件列表中。你可以通过 buttons 属性来指定面板中的图标按钮。

import 'package:floating_menu_panel/floating_menu_panel.dart'; // 导入Floating Menu Panel

return MaterialApp(
  home: Scaffold(
    body: Stack(
      children: [
        FloatingMenuPanel(
          onPressed: (index) {
            print('SELECT__: $index'); // 当点击某个按钮时,打印索引
          },
          buttons: [
            Icons.star_border_outlined, // 图标1
            Icons.add_comment,           // 图标2
            Icons.music_note             // 图标3
          ],
        ),
      ],
    ),
  ),
);

完整示例

下面是一个完整的示例,展示了如何将 floating_menu_panel 集成到一个简单的Flutter应用中。这个示例包括了基本的页面结构、主题设置以及浮动菜单面板的配置。

import 'package:flutter/material.dart';
import 'package:floating_menu_panel/floating_menu_panel.dart'; // 导入Floating Menu Panel

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue, // 应用的主题颜色
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
      // 添加浮动菜单面板
      body: Stack(
        children: [
          // 其他页面内容
          Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Text(
                  'You have pushed the button this many times:',
                ),
                Text(
                  '$_counter',
                  style: Theme.of(context).textTheme.headline4,
                ),
              ],
            ),
          ),
          // 浮动菜单面板
          FloatingMenuPanel(
            onPressed: (index) {
              print('Clicked on item: $index'); // 当点击某个按钮时,打印索引
            },
            buttons: [
              Icons.message,         // 消息图标
              Icons.photo_camera,    // 相机图标
              Icons.video_library    // 视频库图标
            ],
            positionTop: 0.0,        // 初始顶部位置
            positionLeft: 0.0,       // 初始左侧位置
            backgroundColor: Color(0xFFEDEDED), // 面板背景颜色
            contentColor: Colors.black,         // 图标颜色
            panelShape: PanelShape.rectangle,   // 面板形状(矩形)
            borderRadius: BorderRadius.circular(8.0), // 面板圆角
            dockType: DockType.inside,          // 面板停靠类型(内部)
            dockOffset: 5.0,                    // 面板停靠偏移量
            panelAnimDuration: 300,             // 面板打开/关闭动画时长
            panelAnimCurve: Curves.easeOut,     // 面板打开/关闭动画曲线
            dockAnimDuration: 300,              // 自动停靠动画时长
            dockAnimCurve: Curves.easeOut,      // 自动停靠动画曲线
            panelOpenOffset: 20.0,              // 面板打开时的偏移量
            panelIcon: Icons.menu,              // 面板开关图标
            size: 70.0,                         // 单个按钮的大小
            iconSize: 24.0,                     // 图标的大小
            borderWidth: 1.0,                   // 面板边框宽度
            borderColor: Colors.black,          // 面板边框颜色
          ),
        ],
      ),
    );
  }
}

更多关于Flutter浮动菜单面板插件floating_menu_panel的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter浮动菜单面板插件floating_menu_panel的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用floating_menu_panel插件的示例代码。这个插件允许你创建一个浮动菜单面板,非常适合用于显示快捷操作或菜单项。

首先,你需要在你的pubspec.yaml文件中添加floating_menu_panel依赖:

dependencies:
  flutter:
    sdk: flutter
  floating_menu_panel: ^最新版本号  # 请替换为实际发布的最新版本号

然后,运行flutter pub get来安装依赖。

接下来,你可以在你的Flutter应用中使用这个插件。以下是一个简单的示例,展示了如何创建一个包含几个菜单项的浮动菜单面板:

import 'package:flutter/material.dart';
import 'package:floating_menu_panel/floating_menu_panel.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Floating Menu Panel Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  FloatingMenuPanelController? _controller;

  @override
  void initState() {
    super.initState();
    _controller = FloatingMenuPanelController();
  }

  @override
  void dispose() {
    _controller?.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Floating Menu Panel Demo'),
      ),
      body: Center(
        child: FloatingActionButton(
          onPressed: () {
            _controller?.showMenu(context, position: Offset(0, 300));
          },
          tooltip: 'Show Menu',
          child: Icon(Icons.menu),
        ),
      ),
      floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
      bottomNavigationBar: BottomAppBar(
        shape: CircularNotchedRectangle(),
        notchMargin: 4.0,
        child: Container(
          height: 50.0,
          child: Row(
            mainAxisAlignment: MainAxisAlignment.spaceAround,
            children: <Widget>[
              IconButton(
                icon: Icon(Icons.home),
                onPressed: () {},
              ),
              IconButton(
                icon: Icon(Icons.search),
                onPressed: () {},
              ),
            ],
          ),
        ),
      ),
      floatingActionButton: FloatingMenuPanel(
        controller: _controller,
        menuItems: [
          FloatingMenuItem(
            icon: Icon(Icons.add),
            title: 'Add',
            onTap: () {
              print('Add tapped');
              _controller?.hideMenu();
            },
          ),
          FloatingMenuItem(
            icon: Icon(Icons.edit),
            title: 'Edit',
            onTap: () {
              print('Edit tapped');
              _controller?.hideMenu();
            },
          ),
          FloatingMenuItem(
            icon: Icon(Icons.delete),
            title: 'Delete',
            onTap: () {
              print('Delete tapped');
              _controller?.hideMenu();
            },
          ),
        ],
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个FloatingActionButton,点击该按钮时会显示一个浮动菜单面板。浮动菜单面板包含三个菜单项:添加、编辑和删除。每个菜单项都有一个图标和标题,点击菜单项时会打印相应的信息并隐藏菜单。

注意:

  1. FloatingMenuPanelController用于控制浮动菜单面板的显示和隐藏。
  2. FloatingMenuPanel组件用于定义浮动菜单面板及其菜单项。
  3. 使用_controller?.showMenu(context, position: Offset(0, 300));来显示菜单,你可以根据需要调整菜单的位置。

请确保你已经按照步骤正确安装了floating_menu_panel插件,并根据实际使用的插件版本调整代码。

回到顶部