buildMaterial method

  1. @override
Widget buildMaterial(
  1. BuildContext context
)
override

Builds the Material Design (Android) variant of this widget.

Implementation

@override
Widget buildMaterial(BuildContext context) {
  final resolvedMaterialButtonData = MaterialButtonData(
    widgetKey: materialButtonData?.widgetKey ?? widgetKey,
    onPressed: materialButtonData?.onPressed ?? onPressed!,
    onLongPress: materialButtonData?.onLongPress ?? onLongPress,
    mouseCursor: materialButtonData?.mouseCursor ?? mouseCursor,
    focusNode: materialButtonData?.focusNode ?? focusNode,
    autofocus: materialButtonData?.autofocus ?? autofocus ?? kDefaultAutofocus,
    child: materialButtonData?.child ?? child,
    onHover: materialButtonData?.onHover,
    onFocusChange: materialButtonData?.onFocusChange,
    style: materialButtonData?.style,
    statesController: materialButtonData?.statesController,
    isSemanticButton: materialButtonData?.isSemanticButton,
    icon: materialButtonData?.icon,
    label: materialButtonData?.label,
    iconAlignment: materialButtonData?.iconAlignment,
  );
  assert(
    (resolvedMaterialButtonData.child != null) ^ (resolvedMaterialButtonData.icon != null),
    'child and icon are mutually exclusive: provide either one.',
  );
  assert(
    (resolvedMaterialButtonData.child != null) ^ (resolvedMaterialButtonData.label != null),
    'child and label are mutually exclusive: provide either one.',
  );

  return switch ((materialButtonVariant, resolvedMaterialButtonData.useNormalConstructor)) {
    (.text, true) => TextButton(
      key: resolvedMaterialButtonData.widgetKey,
      onPressed: !isEnabled ? null : resolvedMaterialButtonData.onPressed,
      onLongPress: !isEnabled ? null : resolvedMaterialButtonData.onLongPress,
      focusNode: resolvedMaterialButtonData.focusNode,
      autofocus: resolvedMaterialButtonData.autofocus,
      onHover: resolvedMaterialButtonData.onHover,
      onFocusChange: resolvedMaterialButtonData.onFocusChange,
      style: resolvedMaterialButtonData.style,
      clipBehavior: resolvedMaterialButtonData.clipBehavior,
      statesController: resolvedMaterialButtonData.statesController,
      isSemanticButton: resolvedMaterialButtonData.isSemanticButton,
      child: resolvedMaterialButtonData.child!,
    ),
    (.text, false) => TextButton.icon(
      key: widgetKey,
      onPressed: !isEnabled ? null : resolvedMaterialButtonData.onPressed,
      onLongPress: !isEnabled ? null : resolvedMaterialButtonData.onLongPress,
      focusNode: resolvedMaterialButtonData.focusNode,
      autofocus: resolvedMaterialButtonData.autofocus,
      onHover: resolvedMaterialButtonData.onHover,
      onFocusChange: resolvedMaterialButtonData.onFocusChange,
      style: resolvedMaterialButtonData.style,
      clipBehavior: resolvedMaterialButtonData.clipBehavior,
      statesController: resolvedMaterialButtonData.statesController,
      label: resolvedMaterialButtonData.label!,
      icon: resolvedMaterialButtonData.icon,
      iconAlignment: resolvedMaterialButtonData.iconAlignment,
    ),
    (.elevated, true) => ElevatedButton(
      key: resolvedMaterialButtonData.widgetKey,
      onPressed: !isEnabled ? null : resolvedMaterialButtonData.onPressed,
      onLongPress: !isEnabled ? null : resolvedMaterialButtonData.onLongPress,
      focusNode: resolvedMaterialButtonData.focusNode,
      autofocus: resolvedMaterialButtonData.autofocus,
      onHover: resolvedMaterialButtonData.onHover,
      onFocusChange: resolvedMaterialButtonData.onFocusChange,
      style: resolvedMaterialButtonData.style,
      clipBehavior: resolvedMaterialButtonData.clipBehavior,
      statesController: resolvedMaterialButtonData.statesController,
      child: resolvedMaterialButtonData.child,
    ),
    (.elevated, false) => ElevatedButton.icon(
      key: widgetKey,
      onPressed: !isEnabled ? null : resolvedMaterialButtonData.onPressed,
      onLongPress: !isEnabled ? null : resolvedMaterialButtonData.onLongPress,
      focusNode: resolvedMaterialButtonData.focusNode,
      autofocus: resolvedMaterialButtonData.autofocus,
      onHover: resolvedMaterialButtonData.onHover,
      onFocusChange: resolvedMaterialButtonData.onFocusChange,
      style: resolvedMaterialButtonData.style,
      clipBehavior: resolvedMaterialButtonData.clipBehavior,
      statesController: resolvedMaterialButtonData.statesController,
      label: resolvedMaterialButtonData.label!,
      icon: resolvedMaterialButtonData.icon,
      iconAlignment: resolvedMaterialButtonData.iconAlignment,
    ),
    (.outlined, true) => OutlinedButton(
      key: resolvedMaterialButtonData.widgetKey,
      onPressed: !isEnabled ? null : resolvedMaterialButtonData.onPressed,
      onLongPress: !isEnabled ? null : resolvedMaterialButtonData.onLongPress,
      focusNode: resolvedMaterialButtonData.focusNode,
      autofocus: resolvedMaterialButtonData.autofocus,
      onHover: resolvedMaterialButtonData.onHover,
      onFocusChange: resolvedMaterialButtonData.onFocusChange,
      style: resolvedMaterialButtonData.style,
      clipBehavior: resolvedMaterialButtonData.clipBehavior,
      statesController: resolvedMaterialButtonData.statesController,
      child: resolvedMaterialButtonData.child,
    ),
    (.outlined, false) => OutlinedButton.icon(
      key: widgetKey,
      onPressed: !isEnabled ? null : resolvedMaterialButtonData.onPressed,
      onLongPress: !isEnabled ? null : resolvedMaterialButtonData.onLongPress,
      focusNode: resolvedMaterialButtonData.focusNode,
      autofocus: resolvedMaterialButtonData.autofocus,
      onHover: resolvedMaterialButtonData.onHover,
      onFocusChange: resolvedMaterialButtonData.onFocusChange,
      style: resolvedMaterialButtonData.style,
      clipBehavior: resolvedMaterialButtonData.clipBehavior,
      statesController: resolvedMaterialButtonData.statesController,
      label: resolvedMaterialButtonData.label!,
      icon: resolvedMaterialButtonData.icon,
      iconAlignment: resolvedMaterialButtonData.iconAlignment,
    ),
    //TODO(lahaluhem): Add support for .tonal + .tonalIcon
    (.filled, true) => FilledButton(
      key: resolvedMaterialButtonData.widgetKey,
      onPressed: !isEnabled ? null : resolvedMaterialButtonData.onPressed,
      onLongPress: !isEnabled ? null : resolvedMaterialButtonData.onLongPress,
      focusNode: resolvedMaterialButtonData.focusNode,
      autofocus: resolvedMaterialButtonData.autofocus,
      onHover: resolvedMaterialButtonData.onHover,
      onFocusChange: resolvedMaterialButtonData.onFocusChange,
      style: resolvedMaterialButtonData.style,
      clipBehavior: resolvedMaterialButtonData.clipBehavior,
      statesController: resolvedMaterialButtonData.statesController,
      child: resolvedMaterialButtonData.child,
    ),
    (.filled, false) => FilledButton.icon(
      key: widgetKey,
      onPressed: !isEnabled ? null : resolvedMaterialButtonData.onPressed,
      onLongPress: !isEnabled ? null : resolvedMaterialButtonData.onLongPress,
      focusNode: resolvedMaterialButtonData.focusNode,
      autofocus: resolvedMaterialButtonData.autofocus,
      onHover: resolvedMaterialButtonData.onHover,
      onFocusChange: resolvedMaterialButtonData.onFocusChange,
      style: resolvedMaterialButtonData.style,
      clipBehavior: resolvedMaterialButtonData.clipBehavior,
      statesController: resolvedMaterialButtonData.statesController,
      label: resolvedMaterialButtonData.label!,
      icon: resolvedMaterialButtonData.icon,
      iconAlignment: resolvedMaterialButtonData.iconAlignment,
    ),
  };
}