resolve static method

  1. @internal
PullDownMenuItemTheme resolve(
  1. BuildContext context, {
  2. required PullDownMenuItemTheme? itemTheme,
  3. required bool enabled,
  4. required bool isDestructive,
})

The helper method to quickly resolve PullDownMenuItemTheme from PullDownButtonTheme.itemTheme or PullDownMenuItemTheme.defaults as well as from theme data from PullDownMenuItem.

Implementation

@internal
static PullDownMenuItemTheme resolve(
  BuildContext context, {
  required PullDownMenuItemTheme? itemTheme,
  required bool enabled,
  required bool isDestructive,
}) {
  final theme = PullDownMenuItemTheme.of(context);
  final defaults = PullDownMenuItemTheme.defaults(context);

  var resolved = PullDownMenuItemTheme(
    destructiveColor: itemTheme?.destructiveColor ??
        theme?.destructiveColor ??
        defaults.destructiveColor!,
    iconSize: itemTheme?.iconSize ?? theme?.iconSize ?? defaults.iconSize!,
    checkmark:
        itemTheme?.checkmark ?? theme?.checkmark ?? defaults.checkmark!,
    checkmarkWeight: itemTheme?.checkmarkWeight ??
        theme?.checkmarkWeight ??
        defaults.checkmarkWeight!,
    checkmarkSize: itemTheme?.checkmarkSize ??
        theme?.checkmarkSize ??
        defaults.checkmarkSize!,
    textStyle: defaults.textStyle!
        .merge(theme?.textStyle)
        .merge(itemTheme?.textStyle),
    iconActionTextStyle: defaults.iconActionTextStyle!
        .merge(theme?.iconActionTextStyle)
        .merge(itemTheme?.iconActionTextStyle),
    onHoverColor: itemTheme?.onHoverColor ??
        theme?.onHoverColor ??
        defaults.onHoverColor!,
    onHoverTextStyle: defaults.onHoverTextStyle!
        .merge(theme?.onHoverTextStyle)
        .merge(itemTheme?.onHoverTextStyle),
  );

  if (isDestructive) {
    resolved = resolved.copyWith(
      textStyle: resolved.textStyle!.copyWith(
        color: resolved.destructiveColor,
      ),
      iconActionTextStyle: resolved.iconActionTextStyle!.copyWith(
        color: resolved.destructiveColor,
      ),
    );
  }

  if (!enabled) {
    resolved = resolved.copyWith(
      textStyle: resolved.textStyle!.copyWith(
        color: resolved.textStyle!.color!.withOpacity(
          _PullDownMenuItemThemeDefaults._disabledOpacity(context),
        ),
      ),
      iconActionTextStyle: resolved.iconActionTextStyle!.copyWith(
        color: resolved.iconActionTextStyle!.color!.withOpacity(
          _PullDownMenuItemThemeDefaults._disabledOpacity(context),
        ),
      ),
    );
  }

  return resolved;
}