setMenus method

  1. @override
void setMenus(
  1. List<PlatformMenuItem> topLevelMenus
)
override

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);
}