modalDialogStory top-level property

Story modalDialogStory
getter/setter pair

Implementation

Story modalDialogStory = Story(
  name: 'Modal Dialog',
  builder: (context) {
    final totalSteps = context.knobs.sliderInt(
      label: 'Total Steps',
      initial: 3,
      min: 1,
      max: 5,
    );

    final stepContents = List.generate(totalSteps, (index) {
      return context.knobs.text(
          label: 'Step ${index + 1} Content',
          initial: 'Step ${index + 1} content');
    });

    final headerIcon = context.knobs.options(
      label: 'Header Icon',
      options: [
        const Option(label: 'Info', value: Icons.info),
        const Option(label: 'Check Circle', value: Icons.check_circle),
        const Option(label: 'Warning', value: Icons.warning),
      ],
      initial: Icons.info,
    );

    final variant = context.knobs.options(
      label: 'Variant',
      options: [
        const Option(label: 'Basic', value: ModalDialogueVariant.basic),
        const Option(
            label: 'Multi Steps', value: ModalDialogueVariant.multiStep),
      ],
      initial: ModalDialogueVariant.basic,
    );

    final headerIconColor = context.knobs.options(
      label: 'Header Icon Color',
      initial: Colors.black,
      options: const [
        Option(label: 'Primary', value: Color(0xFFF15A29)),
        Option(label: 'Black', value: Colors.black),
        Option(label: 'White', value: Colors.white),
      ],
    );

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

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

    final backButton =
        context.knobs.boolean(label: 'Custom Back Button', initial: false)
            ? DDSButton(
                onPressed: () {},
                type: ButtonType.secondary,
                shape: ButtonShape.roundedRectangle,
                size: ButtonSize.small,
                minWidth: 95,
                width: 95,
                label: backButtonText,
              )
            : null;

    final finishButton =
        context.knobs.boolean(label: 'Custom Finish Button', initial: false)
            ? DDSButton(
                onPressed: () {},
                type: ButtonType.primary,
                shape: ButtonShape.roundedRectangle,
                minWidth: 95,
                width: 95,
                label: finishButtonText,
              )
            : null;

    final headerIconSize = context.knobs.slider(
      label: 'Header Icon Size',
      initial: 40.0,
      min: 20.0,
      max: 80.0,
    );
    final iconOffsetVertical = context.knobs.slider(
      label: 'Icon Offset Vertical',
      initial: 10.0,
      min: 0.0,
      max: 100.0,
    );
    final iconOffsetHorizontal = context.knobs.slider(
      label: 'Icon Offset Horizontal',
      initial: 0.0,
      min: 0.0,
      max: 100.0,
    );

    final contentButtonSpacing = context.knobs.slider(
      label: 'Content-Button Spacing',
      initial: 20.0,
      min: 0.0,
      max: 60.0,
    );

    final backgroundColor = context.knobs.options(
      label: 'Background Color',
      initial: Colors.white,
      options: const [
        Option(label: 'Primary', value: Color(0xFFF15A29)),
        Option(label: 'Black', value: Colors.black),
        Option(label: 'White', value: Colors.white),
      ],
    );
    final elevation = context.knobs.slider(
      label: 'Elevation',
      initial: 2.0,
      min: 0.0,
      max: 10.0,
    );

    final cancelButtonText =
        context.knobs.text(label: 'Cancel Button Text', initial: 'Cancel');
    final actionButtonText =
        context.knobs.text(label: 'Action Button Text', initial: 'Proceed');
    final showIcon = context.knobs.boolean(label: 'Show Icon', initial: false);
    final showCurrentStepsDot =
        context.knobs.boolean(label: 'Show Current Steps Dot', initial: false);
    final multiStepCancelButton = context.knobs
            .boolean(label: 'Custom Multi-Step Cancel Button', initial: true)
        ? DDSButton(
            onPressed: () {},
            type: ButtonType.primary,
            shape: ButtonShape.roundedRectangle,
            size: ButtonSize.small,
            minWidth: 95,
            width: 95,
            label: cancelButtonText,
          )
        : null;

    final cancelButton =
        context.knobs.boolean(label: 'Custom Cancel Button', initial: true)
            ? DDSButton(
                onPressed: () {},
                type: ButtonType.primary,
                shape: ButtonShape.roundedRectangle,
                primaryButtonBackgroundColor: Color(0xFFF1F6FF),
                primaryButtonTextColor: Color(0xFF1C6ADD),
                minWidth: 140,
                width: 140,
                label: 'Cancel',
              )
            : null;

    final actionButton =
        context.knobs.boolean(label: 'Custom Action Button', initial: true)
            ? DDSButton(
                onPressed: () {},
                type: ButtonType.secondary,
                secondaryButtonBackgroundColor: Color(0xFF1C6ADD),
                secondaryButtonTextColor: Colors.white,
                shape: ButtonShape.roundedRectangle,
                minWidth: 140,
                width: 140,
                label: 'Mark as N/A',
              )
            : null;

    final buttonDirection = context.knobs.options(
      label: 'Button Direction',
      options: [
        const Option(label: 'Horizontal', value: Axis.horizontal),
        const Option(label: 'Vertical', value: Axis.vertical),
      ],
      initial: Axis.horizontal,
    );
    final width = context.knobs.slider(
      label: 'Width',
      min: 100,
      max: 600,
      initial: 400,
    );
    final height = context.knobs.slider(
      label: 'Height',
      min: 100,
      max: 400,
      initial: 250,
    );

    return Center(
      child: ElevatedButton(
        onPressed: () {
          showDialog(
            context: context,
            builder: (BuildContext context) {
              return DDSModalDialog(
                title: SizedBox(
                  width: 305,
                  child: Text(
                    'Confirm Bulk Update to N/A',
                    textAlign: TextAlign.center,
                    style: TextStyle(
                      color: Color(0xFF171717),
                      fontSize: 16,
                      fontFamily: 'Poppins',
                      fontWeight: FontWeight.w600,
                    ),
                  ),
                ),
                content: SizedBox(
                  width: 305,
                  child: Text.rich(
                    TextSpan(
                      children: [
                        TextSpan(
                          text: 'Youre about to set all workspaces within the ',
                          style: TextStyle(
                            color: Color(0xFF262626),
                            fontSize: 14,
                            fontFamily: 'Poppins',
                            fontWeight: FontWeight.w400,
                          ),
                        ),
                        TextSpan(
                          text: 'living room to N/A',
                          style: TextStyle(
                            color: Color(0xFF262626),
                            fontSize: 14,
                            fontFamily: 'Poppins',
                            fontWeight: FontWeight.w600,
                          ),
                        ),
                        TextSpan(
                          text: '. Are you sure you want to proceed?',
                          style: TextStyle(
                            color: Color(0xFF262626),
                            fontSize: 14,
                            fontFamily: 'Poppins',
                            fontWeight: FontWeight.w400,
                          ),
                        ),
                      ],
                    ),
                    textAlign: TextAlign.center,
                  ),
                ),
                variant: variant,
                totalSteps: totalSteps,
                width: width,
                height: height,
                showIcon: showIcon,
                stepContents: stepContents,
                showCurrentStepsDot: showCurrentStepsDot,
                buttonDirection: buttonDirection,
                headerIcon: headerIcon,
                headerIconColor: headerIconColor,
                headerIconSize: headerIconSize,
                backgroundColor: backgroundColor,
                elevation: elevation,
                cancelButton: variant == ModalDialogueVariant.multiStep
                    ? multiStepCancelButton
                    : cancelButton,
                actionButton: actionButton,
                cancelButtonText: cancelButtonText,
                actionButtonText: actionButtonText,
                backButton: backButton,
                finishButton: finishButton,
                backButtonText: backButtonText,
                finishButtonText: finishButtonText,
                iconOffsetVertical: iconOffsetVertical,
                iconOffsetHorizontal: iconOffsetHorizontal,
                contentButtonSpacing: contentButtonSpacing,
                onComplete: () {
                  print('Completed!');
                },
                onCancel: () {
                  print('Dialog canceled.');
                },
              );
            },
          );
        },
        child: const Text('Show Modal Dialog'),
      ),
    );
  },
);