Skip to content
This repository was archived by the owner on Feb 10, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 34 additions & 18 deletions example/lib/src/storybook/stories/primitives/auth_code.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:example/src/storybook/common/color_options.dart';
import 'package:example/src/storybook/common/widgets/text_divider.dart';
import 'package:flutter/material.dart';
import 'package:moon_core/moon_core.dart';
import 'package:moon_design/moon_design.dart';
import 'package:storybook_flutter/storybook_flutter.dart';

Expand All @@ -27,7 +28,7 @@ class AuthCodeStory extends StatelessWidget {
);

final shapeKnob = context.knobs.nullable.options(
label: "shape",
label: "authFieldShape",
description: "Shape of MoonAuthCode input fields.",
enabled: false,
initial: AuthFieldShape.box,
Expand All @@ -50,7 +51,7 @@ class AuthCodeStory extends StatelessWidget {
final textColor = colorTable(context)[textColorKnob ?? 40];

final cursorColorKnob = context.knobs.nullable.options(
label: "authFieldCursorColor",
label: "cursorColor",
description: "MoonColors variants for MoonAuthCode cursor.",
enabled: false,
initial: 0,
Expand All @@ -60,6 +61,18 @@ class AuthCodeStory extends StatelessWidget {

final cursorColor = colorTable(context)[cursorColorKnob ?? 40];

final cursorErrorColorKnob = context.knobs.nullable.options(
label: "cursorErrorColor",
description:
"MoonColors variants for MoonAuthCode cursor in error state.",
enabled: false,
initial: 0,
// piccolo
options: colorOptions,
);

final cursorErrorColor = colorTable(context)[cursorErrorColorKnob ?? 40];

final selectedFillColorKnob = context.knobs.nullable.options(
label: "selectedFillColor",
description: "MoonColors variants for MoonAuthCode selected input field.",
Expand Down Expand Up @@ -144,7 +157,7 @@ class AuthCodeStory extends StatelessWidget {
description: "Gap between MoonAuthCode input fields.",
enabled: false,
initial: 8,
max: 12,
max: 16,
);

final enableKnob = context.knobs.boolean(
Expand All @@ -163,7 +176,7 @@ class AuthCodeStory extends StatelessWidget {
);

final errorAnimationKnob = context.knobs.boolean(
label: "Error shake animation",
label: "errorAnimationType",
description:
"Show error with shake animation (ErrorAnimationType.shake).",
);
Expand All @@ -189,7 +202,8 @@ class AuthCodeStory extends StatelessWidget {
mainAxisAlignmentKnob ?? MainAxisAlignment.center,
borderRadius: borderRadius,
textStyle: TextStyle(color: textColor),
authFieldCursorColor: cursorColor,
cursorColor: cursorColor,
cursorErrorColor: cursorErrorColor,
selectedFillColor: selectedFillColor,
activeFillColor: activeFillColor,
inactiveFillColor: inactiveFillColor,
Expand All @@ -202,7 +216,7 @@ class AuthCodeStory extends StatelessWidget {
peekWhenObscuring: peekWhenObscuringKnob,
validator: (String? value) => null,
errorBuilder: (BuildContext context, String? errorText) =>
const SizedBox(),
const SizedBox.shrink(),
),
const TextDivider(text: "Active MoonAuthCode"),
MoonAuthCode(
Expand All @@ -212,7 +226,8 @@ class AuthCodeStory extends StatelessWidget {
mainAxisAlignmentKnob ?? MainAxisAlignment.center,
borderRadius: borderRadius,
textStyle: TextStyle(color: textColor),
authFieldCursorColor: cursorColor,
cursorColor: cursorColor,
cursorErrorColor: cursorErrorColor,
selectedFillColor: selectedFillColor,
activeFillColor: activeFillColor,
inactiveFillColor: inactiveFillColor,
Expand All @@ -224,44 +239,45 @@ class AuthCodeStory extends StatelessWidget {
obscureText: obscuringKnob,
peekWhenObscuring: peekWhenObscuringKnob,
validator: (String? value) => null,
errorBuilder: (BuildContext context, String? errorText) =>
const SizedBox(),
errorBuilder: (BuildContext _, String? __) =>
const SizedBox.shrink(),
),
const TextDivider(text: "Error MoonAuthCode"),
SizedBox(
height: 95,
child: MoonAuthCode(
enableInputFill: true,
authInputFieldCount: 4,
disabledOpacityValue: 1,
mainAxisAlignment:
mainAxisAlignmentKnob ?? MainAxisAlignment.center,
errorAnimationType: errorAnimationKnob
? ErrorAnimationType.shake
: ErrorAnimationType.noAnimation,
borderRadius: borderRadius,
textStyle: TextStyle(color: textColor),
authFieldCursorColor: cursorColor,
cursorColor: cursorColor,
cursorErrorColor: cursorErrorColor,
selectedFillColor: selectedFillColor,
activeFillColor: activeFillColor,
inactiveFillColor: inactiveFillColor,
selectedBorderColor: selectedBorderColor,
activeBorderColor: activeBorderColor,
inactiveBorderColor: inactiveBorderColor,
animationDuration: const Duration(seconds: 1),
gap: gapKnob?.toDouble(),
authFieldShape: shapeKnob,
obscureText: obscuringKnob,
peekWhenObscuring: peekWhenObscuringKnob,
validator: (String? pin) {
return (pin != null && pin != '0000' && pin.length == 4)
? 'The input must be exactly "0000".'
return (pin != null && pin != "0000" && pin.length == 4)
? "The input must be exactly '0000'."
: null;
},
errorBuilder: (BuildContext context, String? errorText) {
return Align(
child: Padding(
padding: const EdgeInsets.only(top: 8),
child: Text(errorText ?? ''),
),
errorBuilder: (BuildContext _, String? errorText) {
return Padding(
padding: const EdgeInsets.only(top: 8),
child: Text(errorText ?? ""),
);
},
),
Expand Down
Loading