The Duration knob renders a set of text fields in the Widgetbook UI where you can dynamically enter a Duration value for a widget property. By default, it shows inputs for hours, minutes, and seconds.
The Duration knob has two variants:
context.knobs.duration(): Lets you enter aDurationvalue. It does not acceptnull.context.knobs.durationOrNull(): Lets you enter aDurationvalue ornull. This is useful when the property is optional.
Besides the knob's base properties, the Duration knob supports one additional property to control which time units are displayed:
| Property | Type | Default | Description |
|---|---|---|---|
units | Set<DurationUnit> | {DurationUnit.hours, DurationUnit.minutes, DurationUnit.seconds} | The time units to show as separate inputs. |
DurationUnit has days, hours, minutes, seconds, milliseconds, and microseconds. Units render largest to smallest regardless of set order, and the largest absorbs any overflow so no value is hidden (e.g. with only seconds, Duration(seconds: 90) shows 90).
To use a Duration knob, call the context.knobs.duration() method.
@UseCase(type: MyWidget, name: 'Default')
Widget buildUseCase(BuildContext context) {
return MyWidget(
duration: context.knobs.duration(label: 'duration')
);
}To customize which time units are shown, pass a units set:
@UseCase(type: MyWidget, name: 'Default')
Widget buildUseCase(BuildContext context) {
return MyWidget(
duration: context.knobs.duration(
label: 'duration',
units: const {
DurationUnit.days,
DurationUnit.hours,
DurationUnit.minutes,
DurationUnit.seconds,
DurationUnit.milliseconds,
DurationUnit.microseconds,
},
),
);
}To use the nullable Duration knob, call the context.knobs.durationOrNull() method.
@UseCase(type: MyWidget, name: 'Default')
Widget buildUseCase(BuildContext context) {
return MyWidget(
duration: context.knobs.durationOrNull(label: 'duration'),
);
}Multi-snapshot support allows you to generate multiple screenshots of a single use case with varying values using KnobsConfigs and AddonsConfigs.
@UseCase(
type: MyWidget,
name: 'Default',
cloudKnobsConfigs: {
'duration': [DurationKnobConfig('duration', 2000)],
},
)
Widget buildUseCase(BuildContext context) {
return MyWidget(
duration: context.knobs.duration(label: 'duration')
);
}@UseCase(
type: MyWidget,
name: 'Default',
cloudKnobsConfigs: {
'Without duration': [NullKnobConfig('duration')],
'With duration': [DurationKnobConfig('duration', 2000)],
},
)
Widget buildUseCase(BuildContext context) {
return MyWidget(
duration: context.knobs.durationOrNull(label: 'duration')
);
}
