menu_bar 0.3.0 menu_bar: ^0.3.0 copied to clipboard
A customizable application menu bar with submenus for your Flutter Desktop apps.
import 'package:flutter/material.dart';
import 'package:menu_bar/menu_bar.dart';
void main() {
runApp(const MyHomePage());
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key});
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List<BarButton> _menuBarButtons() {
return [
BarButton(
text: const Text(
'File',
style: TextStyle(color: Colors.white),
),
submenu: SubMenu(
menuItems: [
MenuButton(
onTap: () {},
text: const Text('Save'),
shortcutText: 'Ctrl+S',
),
MenuButton(
onTap: () {},
text: const Text('Save as'),
shortcutText: 'Ctrl+Shift+S',
),
const MenuDivider(),
MenuButton(
onTap: () {},
text: const Text('Open File'),
),
MenuButton(
onTap: () {},
text: const Text('Open Folder'),
),
const MenuDivider(),
MenuButton(
text: const Text('Preferences'),
onTap: () {},
icon: const Icon(Icons.settings),
submenu: SubMenu(
menuItems: [
MenuButton(
onTap: () {},
icon: const Icon(Icons.keyboard),
text: const Text('Shortcuts'),
),
const MenuDivider(),
MenuButton(
onTap: () {},
icon: const Icon(Icons.extension),
text: const Text('Extensions'),
),
const MenuDivider(),
MenuButton(
onTap: () {},
icon: const Icon(Icons.looks),
text: const Text('Change theme'),
submenu: SubMenu(
menuItems: [
MenuButton(
onTap: () {},
icon: const Icon(Icons.light_mode),
text: const Text('Light theme'),
),
const MenuDivider(),
MenuButton(
onTap: () {},
icon: const Icon(Icons.dark_mode),
text: const Text('Dark theme'),
),
],
),
),
],
),
),
const MenuDivider(),
MenuButton(
onTap: () {},
shortcutText: 'Ctrl+Q',
text: const Text('Exit'),
icon: const Icon(Icons.exit_to_app),
),
],
),
),
BarButton(
text: const Text(
'Edit',
style: TextStyle(color: Colors.white),
),
submenu: SubMenu(
menuItems: [
MenuButton(
onTap: () {},
text: const Text('Undo'),
shortcutText: 'Ctrl+Z',
),
MenuButton(
onTap: () {},
text: const Text('Redo'),
shortcutText: 'Ctrl+Y',
),
const MenuDivider(),
MenuButton(
onTap: () {},
text: const Text('Cut'),
shortcutText: 'Ctrl+X',
),
MenuButton(
onTap: () {},
text: const Text('Copy'),
shortcutText: 'Ctrl+C',
),
MenuButton(
onTap: () {},
text: const Text('Paste'),
shortcutText: 'Ctrl+V',
),
const MenuDivider(),
MenuButton(
onTap: () {},
text: const Text('Find'),
shortcutText: 'Ctrl+F',
),
],
),
),
BarButton(
text: const Text(
'Help',
style: TextStyle(color: Colors.white),
),
submenu: SubMenu(
menuItems: [
MenuButton(
onTap: () {},
text: const Text('Check for updates'),
),
const MenuDivider(),
MenuButton(
onTap: () {},
text: const Text('View License'),
),
const MenuDivider(),
MenuButton(
onTap: () {},
icon: const Icon(Icons.info),
text: const Text('About'),
),
],
),
),
];
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MenuBar(
// Add a list of [MenuButton]. The buttons in this List are
// displayed as the buttons on the bar itself
barButtons: _menuBarButtons(),
// Style the menu bar itself. Hover over BarStyle for all the options
barStyle: const BarStyle(),
// Style the menu bar buttons. Hover over BarButtonStyle for all the options
barButtonStyle: const BarButtonStyle(),
// Style the menus and submenus. Hover over MenuStyle for all the options
menuStyle: const MenuStyle(),
// Style the menu and submenu buttons. Hover over MenuButtonStyle for all the options
menuButtonStyle: const MenuButtonStyle(),
// Enable or disable the bar
enabled: true,
// Set the child, i.e. the application under the menu bar
child: Scaffold(
appBar: AppBar(
title: const Text('Menu Bar Example'),
),
body: const Center(
child: Text(
'My application',
style: TextStyle(
fontSize: 32.0,
fontWeight: FontWeight.bold,
),
),
),
),
),
);
}
}