timePickerStory top-level property

Story timePickerStory
getter/setter pair

Implementation

Story timePickerStory = Story(
  name: 'Time Picker',
  builder: (BuildContext context) {
    final variant = context.knobs.options(
      label: 'Time Picker Variant',
      options: [
        Option(label: 'Input', value: TimePickerVariant.input),
        Option(label: 'Dial', value: TimePickerVariant.dial),
        Option(label: 'Spinner', value: TimePickerVariant.spinner),
      ],
      initial: TimePickerVariant.input,
    );

    final title = context.knobs.text(
      label: 'Time Picker Title',
      initial: 'Select Time',
    );

    final cancelButtonText = context.knobs.text(
      label: 'Cancel Button Text',
      initial: 'Cancel',
    );

    final okButtonText = context.knobs.text(
      label: 'Ok Button Text',
      initial: 'Set',
    );

    final accentColor = context.knobs.options(
      label: 'Accent Color',
      options: [
        Option(
          label: 'Primary',
          value: ThemeColors.primary,
        ),
        Option(
          label: 'Red',
          value: Colors.red,
        ),
        Option(
          label: 'Blue',
          value: Colors.blue,
        ),
        Option(
          label: 'Green',
          value: Colors.green,
        ),
        Option(
          label: 'Purple',
          value: Colors.purple,
        ),
      ],
      initial: ThemeColors.primary,
    );

    return Material(
      child: Builder(
        builder: (BuildContext innerContext) {
          void _showTimePicker() {
            showDialog(
              context: innerContext,
              useRootNavigator: true,
              barrierDismissible: true,
              builder: (BuildContext dialogContext) {
                final screenSize = MediaQuery.of(dialogContext).size;

                return Center(
                  child: ConstrainedBox(
                    constraints: BoxConstraints(
                      maxWidth: _getMaxWidth(variant),
                      maxHeight: _getMaxHeight(variant, screenSize.height),
                    ),
                    child: Dialog(
                      insetPadding: EdgeInsets.zero,
                      child: Container(
                        padding: const EdgeInsets.symmetric(vertical: 24),
                        child: DDSTimePicker(
                          spinnerWidth: 400,
                          dateColumnWidth: 200,
                          timeColumnWidth: 50,
                          initialTime: TimeOfDay.now(),
                          initialDate: DateTime.now(),
                          variant: variant,
                          title: title,
                          cancelButtonText: cancelButtonText,
                          okButtonText: okButtonText,
                          onDateChanged: (date) {
                            print('Selected date: $date');
                          },
                          accentColor: accentColor,
                          firstDate: DateTime.now()
                              .subtract(const Duration(days: 365)),
                          lastDate:
                              DateTime.now().add(const Duration(days: 365)),
                        ),
                      ),
                    ),
                  ),
                );
              },
            );
          }

          return Container(
            padding: const EdgeInsets.all(24),
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                ElevatedButton(
                  onPressed: _showTimePicker,
                  child: const Text('Open Time Picker'),
                ),
              ],
            ),
          );
        },
      ),
    );
  },
);