import 'package:flutter/material.dart'; import 'package:phylum/libphylum/db/db.dart'; import 'package:phylum/libphylum/phylum_account.dart'; import 'menu_option.dart'; typedef MenuOptionGroups = Iterable>; Future>> buildPopupMenuItems( PhylumAccount account, MenuOptionGroups options, Iterable resources, [ bool hideDisabled = true, ]) async { final availableOptions = await Future.wait( options.map( (group) async => Future.wait( group.map((o) async { final enabled = await o.filter(account, resources); return hideDisabled && !enabled ? null : PopupMenuItem( value: o, enabled: enabled, child: ListTile( visualDensity: VisualDensity.adaptivePlatformDensity, leading: Icon(o.icon), title: Text(o.text), ), ); }), ).then((items) => items.whereType>()), ), ); final m = availableOptions.fold( >[], (acc, e) { if (e.isEmpty) { return acc; } if (acc.isEmpty) { return e.toList(growable: false); } return [...acc, PopupMenuDivider(), ...e]; }, ); return m; }