progressStory top-level property
Story
progressStory
getter/setter pair
Implementation
Story progressStory = Story(
name: 'Progress Indicator',
builder: (BuildContext context) {
final knobs = context.knobs;
final ValueNotifier<bool> indeterminateNotifier =
ValueNotifier<bool>(true);
final ValueNotifier<bool> showProgressNotifier =
ValueNotifier<bool>(true);
final ValueNotifier<int> durationNotifier = ValueNotifier<int>(3);
return StatefulBuilder(
builder: (BuildContext context, StateSetter setState) {
final variant = knobs.options(
label: 'Variant',
options: [
Option(label: 'Linear', value: ProgressIndicatorVariant.linear),
Option(
label: 'Circular', value: ProgressIndicatorVariant.circular),
Option(
label: 'Discrete', value: ProgressIndicatorVariant.discrete),
],
initial: ProgressIndicatorVariant.linear,
);
final textVariant = knobs.options(
label: 'Text Variant',
options: [
Option(label: 'Done', value: DiscreteProgressTextVariant.done),
Option(label: 'Fraction', value: DiscreteProgressTextVariant.fraction),
Option(label: 'Percentage', value: DiscreteProgressTextVariant.percentage),
],
initial: DiscreteProgressTextVariant.done,
);
final indeterminate = knobs.boolean(
label: 'Indeterminate',
initial: indeterminateNotifier.value,
);
final showProgress = knobs.boolean(
label: 'Show Progress',
initial: showProgressNotifier.value,
);
if (indeterminate != indeterminateNotifier.value) {
indeterminateNotifier.value = indeterminate;
}
final valueColor = knobs.options<Color>(
label: 'Value Color',
options: [
Option(label: 'Red', value: Colors.red),
Option(label: 'Green', value: Colors.green),
Option(label: 'Blue', value: Colors.blue),
Option(label: 'Primary', value: ThemeColors.primary),
],
initial: ThemeColors.primary,
);
final duration = knobs.sliderInt(
label: 'Duration',
initial: durationNotifier.value,
min: 1,
max: 10,
);
if (duration != durationNotifier.value) {
durationNotifier.value = duration;
}
final backgroundColor = knobs.options<Color>(
label: 'Background Color',
options: [
Option(label: 'Red', value: Colors.red),
Option(label: 'Green', value: Colors.green),
Option(label: 'Blue', value: Colors.blue),
Option(label: 'Default', value: const Color(0xFFFACDBE)),
],
initial: const Color(0xFFFACDBE),
);
final borderRadius = knobs.options<BorderRadius>(
label: 'Border Radius',
options: [
Option(label: '0', value: BorderRadius.zero),
Option(label: '6', value: BorderRadius.all(Radius.circular(6))),
Option(label: '10', value: BorderRadius.all(Radius.circular(10))),
Option(
label: '100', value: BorderRadius.all(Radius.circular(100))),
],
initial: const BorderRadius.all(Radius.circular(6)),
);
final currentValue = context.knobs.sliderInt(
label: 'Steps Completed',
min: 0,
max: 100,
initial: 8,
);
final totalValue = context.knobs.sliderInt(
label: 'Total Steps',
min: 1,
max: 100,
initial: 10,
);
final size = knobs.slider(
label: 'Size',
initial: 20,
min: 10,
max: 100,
);
final thickness = knobs.slider(
label: 'Thickness',
initial: 1,
min: 1,
max: 100,
);
return Center(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: ValueListenableBuilder<bool>(
valueListenable: indeterminateNotifier,
builder: (context, indeterminateValue, child) {
return ValueListenableBuilder<int>(
valueListenable: durationNotifier,
builder: (context, durationValue, child) {
return Row(
children: [
Expanded(
child: DDSProgressIndicator(
key: ValueKey(
'progress-$durationValue-$indeterminateValue'),
variant: variant,
indeterminate: indeterminateValue,
valueColor: valueColor,
duration: Duration(seconds: durationValue),
backgroundColor: backgroundColor,
totalValue: totalValue,
currentValue: currentValue,
size: size,
thickness: thickness,
borderRadius: borderRadius,
showProgress: showProgress,
textVariant: textVariant,
),
),
],
);
},
);
},
),
),
);
},
);
});