Flutter如何添加自定义菜单栏menu_bar

注我,一起成长,一起变强。

1.menu_bar

官方链接见https://pub-web.flutter-io.cn/packages/menu_bar

支持Android/iOS/linux/MacOS/Web/Windows

2.pubspec.yaml添加依赖

   menu_bar: ^0.5.3

3.示例

  • • menu_bar_page.dart

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:menu_bar/menu_bar.dart';

class MenuBarPage extends StatefulWidget {
  const MenuBarPage({super.key});

  @override
  State<MenuBarPage> createState() => _MenuBarPageState();
}

class _MenuBarPageState extends State<MenuBarPage> {

  List<BarButton> _menuBarButtons() {
    return [
      BarButton(
        text: const Text(
          '文件',
          style: TextStyle(color: Colors.white),
        ),
        submenu: SubMenu(
          menuItems: [
            MenuButton(
              onTap: () => debugPrint('Save'),
              text: const Text('保存'),
              shortcutText: 'Ctrl+S',
              shortcut:
              const SingleActivator(LogicalKeyboardKey.keyS, control: true),
            ),
            MenuButton(
              onTap: () {},
              text: const Text('保存为'),
              shortcutText: 'Ctrl+Shift+S',
            ),
            const MenuDivider(),
            MenuButton(
              onTap: () {},
              text: const Text('打开 文件'),
            ),
            MenuButton(
              onTap: () {},
              text: const Text('打开 文件夹'),
            ),
            const MenuDivider(),
            MenuButton(
              text: const Text('偏好设置'),
              icon: const Icon(Icons.settings),
              submenu: SubMenu(
                menuItems: [
                  MenuButton(
                    onTap: () {},
                    icon: const Icon(Icons.keyboard),
                    text: const Text('快捷键'),
                  ),
                  const MenuDivider(),
                  MenuButton(
                    onTap: () {},
                    icon: const Icon(Icons.extension),
                    text: const Text('扩展'),
                  ),
                  const MenuDivider(),
                  MenuButton(
                    icon: const Icon(Icons.looks),
                    text: const Text('更换主题'),
                    submenu: SubMenu(
                      menuItems: [
                        MenuButton(
                          onTap: () {},
                          icon: const Icon(Icons.light_mode),
                          text: const Text('浅色 主题'),
                        ),
                        const MenuDivider(),
                        MenuButton(
                          onTap: () {},
                          icon: const Icon(Icons.dark_mode),
                          text: const Text('深色 主题'),
                        ),
                      ],
                    ),
                  ),
                ],
              ),
            ),
            const MenuDivider(),
            MenuButton(
              onTap: () {},
              shortcutText: 'Ctrl+Q',
              text: const Text('退出'),
              icon: const Icon(Icons.exit_to_app),
            ),
          ],
        ),
      ),
      BarButton(
        text: const Text(
          '编辑',
          style: TextStyle(color: Colors.white),
        ),
        submenu: SubMenu(
          menuItems: [
            MenuButton(
              onTap: () {},
              text: const Text('撤销'),
              shortcutText: 'Ctrl+Z',
            ),
            MenuButton(
              onTap: () {},
              text: const Text('重做'),
              shortcutText: 'Ctrl+Y',
            ),
            const MenuDivider(),
            MenuButton(
              onTap: () {},
              text: const Text('剪贴'),
              shortcutText: 'Ctrl+X',
            ),
            MenuButton(
              onTap: () {},
              text: const Text('复制'),
              shortcutText: 'Ctrl+C',
            ),
            MenuButton(
              onTap: () {},
              text: const Text('粘贴'),
              shortcutText: 'Ctrl+V',
            ),
            const MenuDivider(),
            MenuButton(
              onTap: () {},
              text: const Text('查找'),
              shortcutText: 'Ctrl+F',
            ),
          ],
        ),
      ),
      BarButton(
        text: const Text(
          '帮助',
          style: TextStyle(color: Colors.white),
        ),
        submenu: SubMenu(
          menuItems: [
            MenuButton(
              onTap: () {},
              text: const Text('检查 版本更新'),
            ),
            const MenuDivider(),
            MenuButton(
              onTap: () {},
              text: const Text('查看 许可'),
            ),
            const MenuDivider(),
            MenuButton(
              onTap: () {},
              icon: const Icon(Icons.info),
              text: const Text('关于'),
            ),
          ],
        ),
      ),
    ];
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MenuBarWidget(
        barButtons: _menuBarButtons(),

        enabled: true,//开启菜单
        barStyle: const MenuStyle(
          padding: MaterialStatePropertyAll(EdgeInsets.zero),
          backgroundColor: MaterialStatePropertyAll(Color(0xFF6b2b6b)),
          maximumSize: MaterialStatePropertyAll(Size(double.infinity, 38.0)),
        ),

        // Style the menu bar buttons. Hover over [ButtonStyle] for all the options
        barButtonStyle:  ButtonStyle(
            padding: const MaterialStatePropertyAll(EdgeInsets.symmetric(horizontal: 6.0)),
            minimumSize: const MaterialStatePropertyAll(Size(0.032.0)),
            textStyle: MaterialStateTextStyle.resolveWith((states) =>  const TextStyle(fontSize:20.0), )
        ),

        // Style the menu and submenu buttons. Hover over [ButtonStyle] for all the options
        menuButtonStyle:  ButtonStyle(
            minimumSize: const MaterialStatePropertyAll(Size.fromHeight(36.0)),
            padding: const MaterialStatePropertyAll(
                EdgeInsets.symmetric(horizontal: 12.0, vertical: 6.0)),
            textStyle: MaterialStateTextStyle.resolveWith((states) =>  const TextStyle(fontSize:18.0), )
        ),

        child: Scaffold(
          appBar: AppBar(
            title: const Text('菜单栏示例'),
          ),
        ),
      ),
    );
  }
}

4.效果

Flutter如何添加自定义菜单栏menu_bar

5.小结

  • • 菜单栏虽然移动端也支持,但是桌面端使用的较多,移动端很少见。


原文始发于微信公众号(客户端全栈技术养成记):Flutter如何添加自定义菜单栏menu_bar

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/286507.html

(0)
李, 若俞的头像李, 若俞

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!