Expandable Menu

The menu system employed in the Focus UI kit is an expendable menu. This functionality is achieved through widget classes such as FUIExpMenu
and FUIMenuItem
. The menu can be controlled via the FUIExpMenuController
.
Widget Class Location
The necessary menu widget classes could be found in the directory of:
lib/focus_ui_kit/components/menu/
Widget Theme Location
The FUIMenuTheme
class is the theme class holds the default theme variables/values for the expendable menu and the menu items.
Accessing the theme
To access the theme class object, do the following:
@override
Widget build(BuildContext context) {
FUIMenuTheme fuiMenuTheme = context.theme.fuiMenu;
// ...
}
Usage
A general way to use the FUIExpMenu
is as follows:
It is advisable to assign key values to menu items and sub-menu items, enabling programmatic control via the controller.
var menuItemKey1 = ValueKey('menuItemKey1');
var menuItemKey2 = ValueKey('menuItemKey2');
var submMenuItemKey1 = ValueKey('submMenuItemKey1');
var submMenuItemKey2 = ValueKey('submMenuItemKey2');
FUIExpMenu(
fuiMenuItems: [
FUIMenuItem(
key: menuItemKey1,
label: const Text('Item Without Sub-Items'),
icon: const Icon(LineAwesome.chart_bar),
selected: true,
onPressed: () { // Do something... },
),
FUIMenuItem(
key: menuItemKey2,
label: const Text('Item With Sub-Items'),
icon: const Icon(LineAwesome.chart_bar),
onPressed: () { // Do something... },
fuiSubMenuItems: [
FUISubMenuItem(
key: submMenuItemKey1,
label: const Text('Sub Item 1'),
onPressed: () { // Do something... },
),
FUISubMenuItem(
key: submMenuItemKey2,
label: const Text('Sub Item 2'),
onPressed: () { // Do something... },
),
],
),
],
);
With a controller (initialization)
To implement a controller that programmatically controls the expansion and collapse of the menu, please ensure that the controller is disposed of when it is no longer in use.
// Do this in a Stateful Widget...
late FUIExpMenuController menuCtrl;
@override
void initState() {
super.initState();
menuCtrl = FUIExpMenuController();
}
@override
dispose() {
menuCtrl.close();
super.dispose();
}
@override
Widget build(BuildContext context) {
// ...
var menu = FUIExpMenu(
fuiMenuController: menuCtrl,
fuiMenuItems: [
// The rest of the menu items...
]
);
// ...
}
To select a menu item via controller
menuCtrl.trigger(
FUIExpMenuEvent(
selectedMenuKey: menuItemKey2,
),
);
To select a sub-menu item
menuCtrl.trigger(
FUIExpMenuEvent(
selectedSubMenuKey: submMenuItemKey2,
),
);
To select a manu & a sub-menu item simultaneously
menuCtrl.trigger(
FUIExpMenuEvent(
selectedMenuKey: menuItemKey2,
selectedSubMenuKey: submMenuItemKey2,
),
);
Last updated