ArcaneToggleButtonGroup#
A group of connected toggle buttons for selecting one or multiple options, styled as a segmented control.
Basic Usage#
ArcaneToggleButtonGroup<String>(
value: selectedOption,
options: [
ToggleOption(value: 'left', label: 'Left'),
ToggleOption(value: 'center', label: 'Center'),
ToggleOption(value: 'right', label: 'Right'),
],
onChanged: (value) {
setState(() => selectedOption = value);
},
)
Properties#
| Property | Type | Default | Description |
|---|---|---|---|
value |
T? |
null |
Currently selected value |
values |
Set<T>? |
null |
Selected values (multi-select) |
options |
List<ToggleOption<T>> |
required | Available options |
onChanged |
ValueChanged<T>? |
null |
Single selection handler |
onMultiChanged |
ValueChanged<Set<T>>? |
null |
Multi selection handler |
multiSelect |
bool |
false |
Allow multiple selections |
size |
ToggleGroupSize |
medium |
Button size |
isDisabled |
bool |
false |
Disable all buttons |
styles |
ArcaneStyleData? |
null |
Custom styling |
ToggleOption#
ToggleOption<String>(
value: 'option1',
label: 'Label', // Text label
icon: span([text('🔍')]), // Optional icon
isDisabled: false, // Disable specific option
)
With Icons#
ArcaneToggleButtonGroup<String>(
value: alignment,
options: [
ToggleOption(value: 'left', icon: span([text('⬅')])),
ToggleOption(value: 'center', icon: span([text('⬌')])),
ToggleOption(value: 'right', icon: span([text('➡')])),
],
onChanged: (v) => setState(() => alignment = v),
)
Multi-Select#
ArcaneToggleButtonGroup<String>(
values: selectedFormats,
multiSelect: true,
options: [
ToggleOption(value: 'bold', label: 'B'),
ToggleOption(value: 'italic', label: 'I'),
ToggleOption(value: 'underline', label: 'U'),
],
onMultiChanged: (values) {
setState(() => selectedFormats = values);
},
)
Sizes#
// Small
ArcaneToggleButtonGroup<String>(
value: selected,
size: ToggleGroupSize.small,
options: options,
onChanged: (v) => setState(() => selected = v),
)
// Medium (default)
ArcaneToggleButtonGroup<String>(
value: selected,
size: ToggleGroupSize.medium,
options: options,
onChanged: (v) => setState(() => selected = v),
)
// Large
ArcaneToggleButtonGroup<String>(
value: selected,
size: ToggleGroupSize.large,
options: options,
onChanged: (v) => setState(() => selected = v),
)
Examples#
View Mode Selector#
ArcaneToggleButtonGroup<String>(
value: viewMode,
options: [
ToggleOption(value: 'grid', icon: span([text('⊞')]), label: 'Grid'),
ToggleOption(value: 'list', icon: span([text('☰')]), label: 'List'),
ToggleOption(value: 'table', icon: span([text('▦')]), label: 'Table'),
],
onChanged: (v) => setState(() => viewMode = v),
)
Time Period Selector#
ArcaneToggleButtonGroup<String>(
value: period,
options: [
ToggleOption(value: '1d', label: '1D'),
ToggleOption(value: '1w', label: '1W'),
ToggleOption(value: '1m', label: '1M'),
ToggleOption(value: '3m', label: '3M'),
ToggleOption(value: '1y', label: '1Y'),
ToggleOption(value: 'all', label: 'All'),
],
onChanged: (v) {
setState(() => period = v);
fetchData(v);
},
)
Text Alignment#
ArcaneDiv(
styles: const ArcaneStyleData(
display: Display.flex,
alignItems: AlignItems.center,
gap: Gap.md,
),
children: [
ArcaneText('Align:'),
ArcaneToggleButtonGroup<String>(
value: textAlign,
size: ToggleGroupSize.small,
options: [
ToggleOption(value: 'left', icon: span([text('⬅')])),
ToggleOption(value: 'center', icon: span([text('⬌')])),
ToggleOption(value: 'right', icon: span([text('➡')])),
ToggleOption(value: 'justify', icon: span([text('☰')])),
],
onChanged: (v) => setState(() => textAlign = v),
),
],
)
Feature Tags (Multi-select)#
ArcaneDiv(
styles: const ArcaneStyleData(
display: Display.flex,
flexDirection: FlexDirection.column,
gap: Gap.sm,
),
children: [
ArcaneText('Features:'),
ArcaneToggleButtonGroup<String>(
values: selectedFeatures,
multiSelect: true,
options: [
ToggleOption(value: 'wifi', label: 'WiFi'),
ToggleOption(value: 'parking', label: 'Parking'),
ToggleOption(value: 'pool', label: 'Pool'),
ToggleOption(value: 'gym', label: 'Gym'),
],
onMultiChanged: (values) {
setState(() => selectedFeatures = values);
},
),
],
)
Billing Cycle#
ArcaneDiv(
styles: const ArcaneStyleData(
display: Display.flex,
flexDirection: FlexDirection.column,
alignItems: AlignItems.center,
gap: Gap.md,
),
children: [
ArcaneToggleButtonGroup<String>(
value: billingCycle,
options: [
ToggleOption(value: 'monthly', label: 'Monthly'),
ToggleOption(value: 'yearly', label: 'Yearly (Save 20%)'),
],
onChanged: (v) => setState(() => billingCycle = v),
),
// Pricing cards based on selection...
],
)
Related Components#
- ArcaneToggleButton - Single toggle button
- ArcaneRadio - Radio button selection
- ArcaneSelect - Dropdown selection