forked from mirrors/material_3_expressive
190 lines
5.3 KiB
Dart
190 lines
5.3 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:m3e_collection/m3e_collection.dart';
|
|
|
|
import 'section_card.dart';
|
|
|
|
class ButtonGroupSection extends StatelessWidget {
|
|
const ButtonGroupSection({super.key});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
SectionCard(
|
|
title: 'ButtonGroupM3E — basic (menu overflow default)',
|
|
child: _demoBasic(context),
|
|
),
|
|
SectionCard(
|
|
title: 'ButtonGroupM3E — scroll overflow',
|
|
child: _demoScroll(context),
|
|
),
|
|
SectionCard(
|
|
title: 'ButtonGroupM3E — wrap layout',
|
|
child: _demoWrap(context),
|
|
),
|
|
SectionCard(
|
|
title: 'ButtonGroupM3E — connected',
|
|
child: _demoConnected(context),
|
|
),
|
|
SectionCard(
|
|
title: 'ButtonGroupM3E — connected with selection',
|
|
child: _demoConnectedSelection(context),
|
|
),
|
|
SectionCard(
|
|
title: 'ButtonGroupM3E — connected, menu overflow',
|
|
child: _demoConnectedMenu(context),
|
|
),
|
|
SectionCard(
|
|
title: 'ButtonGroupM3E — vertical, menu overflow',
|
|
child: _demoVertical(context),
|
|
),
|
|
SectionCard(
|
|
title: 'ButtonGroupM3E — centered (expanded)',
|
|
child: _demoAlignedCenter(context),
|
|
),
|
|
SectionCard(
|
|
title: 'ButtonGroupM3E — right aligned (expanded)',
|
|
child: _demoAlignedRight(context),
|
|
),
|
|
],
|
|
);
|
|
}
|
|
|
|
Widget _demoBasic(BuildContext context) {
|
|
return SizedBox(
|
|
width: 280,
|
|
child: ButtonGroupM3E(
|
|
actions: [
|
|
for (final label in ['One', 'Two', 'Three', 'Four', 'Five', 'Six'])
|
|
ButtonGroupM3EAction(label: Text(label), onPressed: () {}),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
|
|
Widget _demoScroll(BuildContext context) {
|
|
return SizedBox(
|
|
width: 280,
|
|
child: ButtonGroupM3E(
|
|
overflow: ButtonGroupM3EOverflow.scroll,
|
|
actions: [
|
|
for (final label in ['A', 'B', 'C', 'D', 'E', 'F'])
|
|
ButtonGroupM3EAction(
|
|
label: Text('Item $label'),
|
|
onPressed: () {},
|
|
style: ButtonM3EStyle.filled,
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
|
|
Widget _demoWrap(BuildContext context) {
|
|
return ButtonGroupM3E(
|
|
wrap: true,
|
|
spacing: 8,
|
|
runSpacing: 8,
|
|
actions: [
|
|
for (final i in List.generate(10, (i) => i))
|
|
ButtonGroupM3EAction(label: Text('Wrap $i'), onPressed: () {}),
|
|
],
|
|
);
|
|
}
|
|
|
|
Widget _demoConnected(BuildContext context) {
|
|
return SizedBox(
|
|
width: 300,
|
|
child: ButtonGroupM3E(
|
|
type: ButtonGroupM3EType.connected,
|
|
dividerColor: Theme.of(context).colorScheme.outlineVariant,
|
|
actions: [
|
|
for (final label in ['Low', 'Med', 'High'])
|
|
ButtonGroupM3EAction(
|
|
style: ButtonM3EStyle.tonal,
|
|
label: Text(label),
|
|
onPressed: () {},
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
|
|
Widget _demoConnectedSelection(BuildContext context) {
|
|
return SizedBox(
|
|
width: 300,
|
|
child: ButtonGroupM3E(
|
|
type: ButtonGroupM3EType.connected,
|
|
dividerColor: Theme.of(context).colorScheme.outlineVariant,
|
|
style: ButtonM3EStyle.tonal,
|
|
selection: true,
|
|
actions: [
|
|
for (final label in ['Low', 'Med', 'High'])
|
|
ButtonGroupM3EAction(
|
|
label: Text(label),
|
|
onPressed: () {},
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
|
|
Widget _demoConnectedMenu(BuildContext context) {
|
|
return SizedBox(
|
|
width: 300,
|
|
child: ButtonGroupM3E(
|
|
type: ButtonGroupM3EType.connected,
|
|
dividerColor: Theme.of(context).colorScheme.outlineVariant,
|
|
style: ButtonM3EStyle.tonal,
|
|
actions: [
|
|
for (final label in ['One', 'Two', 'Three', 'Four', 'Five', 'Six'])
|
|
ButtonGroupM3EAction(
|
|
style: ButtonM3EStyle.tonal,
|
|
label: Text(label),
|
|
onPressed: () {},
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
|
|
Widget _demoVertical(BuildContext context) {
|
|
return SizedBox(
|
|
height: 160,
|
|
child: ButtonGroupM3E(
|
|
direction: Axis.vertical,
|
|
actions: [
|
|
for (final label in ['Top', 'Middle', 'Bottom', 'Extra'])
|
|
ButtonGroupM3EAction(label: Text(label), onPressed: () {}),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
|
|
Widget _demoAlignedCenter(BuildContext context) {
|
|
return ButtonGroupM3E(
|
|
expanded: true,
|
|
linearMainAxisAlignment: MainAxisAlignment.center,
|
|
actions: const [
|
|
ButtonGroupM3EAction(label: Text('Center 1')),
|
|
ButtonGroupM3EAction(label: Text('Center 2')),
|
|
ButtonGroupM3EAction(label: Text('Center 3')),
|
|
],
|
|
);
|
|
}
|
|
|
|
Widget _demoAlignedRight(BuildContext context) {
|
|
return ButtonGroupM3E(
|
|
expanded: true,
|
|
linearMainAxisAlignment: MainAxisAlignment.end,
|
|
overflow: ButtonGroupM3EOverflow.menu,
|
|
actions: const [
|
|
ButtonGroupM3EAction(label: Text('Right 1')),
|
|
ButtonGroupM3EAction(label: Text('Right 2')),
|
|
ButtonGroupM3EAction(label: Text('Right 3')),
|
|
ButtonGroupM3EAction(label: Text('Right 4')),
|
|
ButtonGroupM3EAction(label: Text('Right 5')),
|
|
],
|
|
);
|
|
}
|
|
}
|