Flutter弹出菜单插件quds_popup_menu的使用

Flutter弹出菜单插件quds_popup_menu的使用

Quds Popup Menu 是一个用于在 Flutter 中展示高级弹出菜单的新方式。它作为 Quds UI Kit 的一部分引入,提供了通过单独的分区来收集命令的功能。

什么是 Quds Popup Menu

Quds Popup Menu 提供了一种新的方法来展示弹出菜单,并允许你将菜单项分组到不同的部分中。

如何使用?

Quds Popup Menu 包含以下组件:

  • QudsPopupButton
    • 用于显示 Quds Popup Menu
  • QudsPopupMenuSection
    • 用于添加具有子项的部分。
  • QudsPopupMenuItem
    • 用于添加独立的菜单项。
  • QudsPopupMenuWidget
    • 用于添加带有自定义小部件的菜单项。
  • QudsPopupMenuDivider
    • 用于在菜单项之间添加分隔符。
  • showQudsPopupMenu
    • 用于在不使用 QudsPopupButton 的情况下显示 QudsPopupMenu

示例代码

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Quds Popup Menu Example')),
        body: Center(
          child: QudsPopupButton(
            tooltip: '点击显示菜单',
            items: getMenuItems(),
            child: Icon(Icons.menu),
          ),
        ),
      ),
    );
  }

  List<QudsPopupMenuBase> getMenuItems() {
    return [
      QudsPopupMenuSection(
        backgroundColor: Colors.yellow.shade200,
        titleText: '我的设置',
        subTitle: Text('查看您的配置文件'),
        leading: Icon(
          Icons.redeem,
          size: 40,
        ),
        subItems: [
          QudsPopupMenuSection(
            titleText: '设置',
            leading: Icon(Icons.settings),
            subItems: [
              QudsPopupMenuItem(
                leading: Icon(Icons.logout),
                title: Text('退出登录'),
                onPressed: () {
                  showToast('退出登录');
                },
              )
            ],
          ),
        ],
      ),
      QudsPopupMenuDivider(),
      QudsPopupMenuItem(
        leading: Icon(Icons.info_outline),
        title: Text('反馈'),
        subTitle: Text('帮助我们改进应用'),
        onPressed: () {
          showToast('反馈已提交');
        },
      ),
      QudsPopupMenuDivider(),
      QudsPopupMenuSection(
        leading: Icon(Icons.place),
        titleText: '隐私与安全',
        subItems: [
          QudsPopupMenuItem(
            leading: Icon(Icons.settings),
            title: Text('设置'),
            onPressed: () {
              showToast('设置已更新');
            },
          ),
          QudsPopupMenuItem(
            leading: Icon(Icons.lock),
            title: Text('隐私检查'),
            onPressed: () {
              showToast('隐私检查完成');
            },
          ),
          QudsPopupMenuItem(
            leading: Icon(Icons.lock_clock),
            title: Text('隐私快捷方式'),
            onPressed: () {
              showToast('隐私快捷方式已启用');
            },
          ),
          QudsPopupMenuItem(
            leading: Icon(Icons.list),
            title: Text('活动日志'),
            onPressed: () {
              showToast('活动日志已查看');
            },
          ),
          QudsPopupMenuItem(
            leading: Icon(Icons.card_membership),
            title: Text('新闻源偏好'),
            onPressed: () {
              showToast('新闻源偏好已保存');
            },
          ),
          QudsPopupMenuItem(
            leading: Icon(Icons.language),
            title: Text('语言'),
            onPressed: () {
              showToast('语言已更改');
            },
          ),
        ],
      ),
      QudsPopupMenuDivider(),
      QudsPopupMenuWidget(
        builder: (context) => Container(
          padding: EdgeInsets.all(10),
          child: IntrinsicHeight(
            child: Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                IconButton(
                  onPressed: () {
                    showToast('收藏已添加');
                  },
                  icon: Icon(
                    Icons.favorite,
                    color: Colors.red,
                  ),
                ),
                VerticalDivider(),
                IconButton(
                  onPressed: () {},
                  icon: Icon(
                    Icons.music_note,
                    color: Colors.blue,
                  ),
                ),
                VerticalDivider(),
                IconButton(
                  onPressed: () {},
                  icon: Icon(
                    Icons.umbrella,
                    color: Colors.green,
                  ),
                ),
              ],
            ),
          ),
        ),
      ),
    ];
  }

  void showToast(String message) {
    ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(message)));
  }
}

更多关于Flutter弹出菜单插件quds_popup_menu的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


当然,下面是一个关于如何使用 quds_popup_menu 插件在 Flutter 中实现弹出菜单的示例代码。这个插件可以帮助你快速实现一个美观且功能强大的弹出菜单。

首先,确保你已经在 pubspec.yaml 文件中添加了 quds_popup_menu 依赖项:

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

然后运行 flutter pub get 来获取依赖项。

接下来是示例代码,展示如何在 Flutter 应用中使用 quds_popup_menu 插件:

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

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

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

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

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Quds Popup Menu Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Tap the button to show the popup menu',
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 20),
            QudsPopupMenuButton<String>(
              key: ValueKey('popupMenuButton'),
              child: Container(
                decoration: BoxDecoration(
                  shape: BoxShape.circle,
                  color: Colors.blue,
                ),
                child: Icon(
                  Icons.more_vert,
                  color: Colors.white,
                  size: 30,
                ),
              ),
              itemBuilder: (context) => [
                QudsPopupMenuItem<String>(
                  value: 'Option 1',
                  child: ListTile(
                    leading: Icon(Icons.star),
                    title: Text('Option 1'),
                  ),
                ),
                QudsPopupMenuItem<String>(
                  value: 'Option 2',
                  child: ListTile(
                    leading: Icon(Icons.favorite),
                    title: Text('Option 2'),
                  ),
                ),
                QudsPopupMenuItem<String>(
                  value: 'Option 3',
                  child: ListTile(
                    leading: Icon(Icons.share),
                    title: Text('Option 3'),
                  ),
                ),
              ],
              onSelected: (value) {
                // Handle menu item selection
                ScaffoldMessenger.of(context).showSnackBar(
                  SnackBar(
                    content: Text('Selected: $value'),
                    duration: Duration(seconds: 2),
                  ),
                );
              },
            ),
          ],
        ),
      ),
    );
  }
}

代码解释

  1. 依赖项添加

    • pubspec.yaml 中添加 quds_popup_menu 依赖项。
  2. 导入包

    • 在 Dart 文件中导入 quds_popup_menu 包。
  3. 主应用结构

    • 使用 MaterialApp 创建一个基本的 Flutter 应用。
    • 创建一个 Scaffold,包含一个 AppBar 和一个居中的 Column
  4. 弹出菜单按钮

    • 使用 QudsPopupMenuButton 创建一个弹出菜单按钮。
    • 设置按钮的 child 为一个带有图标的容器。
    • 使用 itemBuilder 构建菜单项,每个菜单项都是一个 QudsPopupMenuItem
    • onSelected 回调用于处理菜单项的选中事件。
  5. 菜单项

    • 每个菜单项都是一个 ListTile,带有图标和文本。
  6. 处理选中事件

    • 使用 ScaffoldMessenger.of(context).showSnackBar 显示一个 SnackBar,通知用户选择了哪个菜单项。

希望这个示例代码能帮助你理解如何在 Flutter 中使用 quds_popup_menu 插件来实现弹出菜单。如果有更多问题,请随时询问!

回到顶部