button method

Widget button(
  1. AppModel app,
  2. BuildContext context,
  3. AbstractMenuItemAttributes item,
  4. RgbModel? menuBackgroundColor,
  5. RgbModel? selectedIconColor,
  6. RgbModel? iconColor,
)

Implementation

Widget button(
  AppModel app,
  BuildContext context,
  AbstractMenuItemAttributes item,
  RgbModel? menuBackgroundColor,
  RgbModel? selectedIconColor,
  RgbModel? iconColor,
) {
  var color = item.isActive
      ? RgbHelper.color(rgbo: selectedIconColor)
      : RgbHelper.color(rgbo: iconColor);

  var rgbcolor = item.isActive ? selectedIconColor : iconColor;
  if (item is MenuItemAttributes) {
    if (item.icon != null) {
      return IconButton(
          icon: IconHelper.getIconFromModel(iconModel: item.icon)!,
          color: color,
          onPressed: item.onTap);
    } else if (item.imageURL != null) {
      return IconButton(
          icon: Image.network(item.imageURL!),
          color: RgbHelper.color(rgbo: iconColor),
          onPressed: item.onTap);
    } else {
      return Center(
          child: _frontEndStyle.buttonStyle().button(
                app,
                context,
                label: item.label == null ? '?' : item.label!,
                onPressed: item.onTap,
              ));
    }
  } else if (item is MenuItemWithMenuItems) {
    var icon =
        IconHelper.getIconFromModel(iconModel: item.icon, color: rgbcolor);
    var text = _frontEndStyle.textStyle().text(app, context, (item.label!));
    var popupMenu = popupMenuButton<int>(app, context,
        icon: icon,
        child: icon == null ? text : null, onSelected: (int result) {
      var thisItem = item.items[result];
      if (thisItem is MenuItemWithMenuItems) {
        _hasMenu.openMenu(app, context,
            position: RelativeRect.fromLTRB(1000.0, 0.0, 0.0, 0.0),
            menuItems: thisItem.items,
            popupMenuBackgroundColorOverride: menuBackgroundColor);
      } else if (thisItem is MenuItemAttributes) {
        thisItem.onTap();
      }
    }, itemBuilder: (BuildContext context) {
      var entries = <PopupMenuEntry<int>>[];
      var index = 0;
      for (var thisItem in item.items) {
        var label = thisItem.label!;
        var menuItem = popupMenuItem<int>(
          app,
          context,
          value: index,
          label: label,
        );
        entries.add(menuItem);
        index++;
      }

      return entries;
    });

    return Theme(
        data: Theme.of(context).copyWith(
          cardColor: RgbHelper.color(rgbo: menuBackgroundColor),
        ),
        child: popupMenu);
  } else {
    throw Exception("item $item not supported");
  }
}