MaterialStateBorderSide typedef

  1. @Deprecated('Use WidgetStateBorderSide instead. ' 'Moved to the Widgets layer to make code available outside of Material. ' 'This feature was deprecated after v3.19.0-0.3.pre.')
MaterialStateBorderSide = WidgetStateBorderSide

Defines a BorderSide whose value depends on a set of MaterialStates which represent the interactive state of a component.

To use a MaterialStateBorderSide, you should create a subclass of a MaterialStateBorderSide and override the abstract resolve method.

This class enables existing widget implementations with BorderSide properties to be extended to also effectively support MaterialStateProperty<BorderSide> property values. MaterialStateBorderSide should only be used with widgets that document their support, like ActionChip.side.

This example defines a subclass of MaterialStateBorderSide, that resolves to a red border side when its widget is selected.

To see it in action, copy and run this code snippet on DartPad.

import 'package:material_ui/material_ui.dart';

/// Flutter code sample for [WidgetStateBorderSide].

void main() => runApp(const MaterialStateBorderSideExampleApp());

class MaterialStateBorderSideExampleApp extends StatelessWidget {
  const MaterialStateBorderSideExampleApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('MaterialStateBorderSide Sample')),
        body: const Center(child: MaterialStateBorderSideExample()),
      ),
    );
  }
}

class MaterialStateBorderSideExample extends StatefulWidget {
  const MaterialStateBorderSideExample({super.key});

  @override
  State<MaterialStateBorderSideExample> createState() =>
      _MaterialStateBorderSideExampleState();
}

class _MaterialStateBorderSideExampleState
    extends State<MaterialStateBorderSideExample> {
  bool isSelected = true;

  @override
  Widget build(BuildContext context) {
    return FilterChip(
      label: const Text('Select chip'),
      selected: isSelected,
      onSelected: (bool value) {
        setState(() {
          isSelected = value;
        });
      },
      side: WidgetStateBorderSide.resolveWith((Set<WidgetState> states) {
        if (states.contains(WidgetState.selected)) {
          return const BorderSide(color: Colors.red);
        }
        return null; // Defer to default value on the theme or widget.
      }),
    );
  }
}

This class should only be used for parameters which are documented to take MaterialStateBorderSide, otherwise only the default state will be used.

See also:

  • WidgetStateBorderSide, the non-Material version that can be used interchangeably with MaterialStateBorderSide.

Implementation

// TODO(framework): Replace the following block with a @dartpad directive
// when it's supported. https://github.com/dart-lang/dartdoc/issues/4123
/// {@macro material_ui.dartpad_guide}
///
/// {@example /example/lib/material_state/material_state_border_side.0.dart#body}
///
/// </callout-box>
///
/// This class should only be used for parameters which are documented to take
/// [MaterialStateBorderSide], otherwise only the default state will be used.
///
/// See also:
///
///  * [WidgetStateBorderSide], the non-Material version that can be used
///    interchangeably with `MaterialStateBorderSide`.
@Deprecated(
  'Use WidgetStateBorderSide instead. '
  'Moved to the Widgets layer to make code available outside of Material. '
  'This feature was deprecated after v3.19.0-0.3.pre.',
)
typedef MaterialStateBorderSide = WidgetStateBorderSide;