setMenus method
Serializes topLevelMenus and sends them to the native side, splitting
them into default (IPadMenu) and custom menus.
Implementation
@override
void setMenus(List<PlatformMenuItem> topLevelMenus) async {
_idMap.clear();
_presentDefaultMenus.clear();
_defaultMenuItems.clear();
final List<Map<String, Object?>> customMenus = <Map<String, Object?>>[];
if (topLevelMenus.isNotEmpty) {
for (final PlatformMenuItem childItem in topLevelMenus) {
if (childItem is IPadMenu) {
_presentDefaultMenus.add(childItem.menuId);
final menuItems = _getChildrenRepresentation(childItem.menus);
await _processIconsAndSetMenus(menuItems);
_defaultMenuItems[childItem.menuId] = menuItems;
} else {
final customMenuItems = _customToChannelRepresentation(childItem);
await _processIconsAndSetMenus(customMenuItems);
customMenus.addAll(customMenuItems);
}
}
}
final Map<String, Object?> payload = <String, Object?>{
'customMenus': customMenus,
'defaultMenus': _presentDefaultMenus.toList(),
'defaultMenuItems': _defaultMenuItems,
};
channel.invokeMethod<void>(_kMenuSetMethod, payload);
}