Flutter OTP Verification PIN Entry Card

A one-time-code verification card with a six-cell PIN entry row, a focused cell showing a caret and ring glow, a resend countdown, and a primary verify action. Built with Wind UI utility classes and dark mode pairs.

Anılcan Çakır by Anılcan Çakır 29 views 0 stars 1 week ago Rev 1
Flutter OTP Verification PIN Entry Card preview
main.dart
WDiv(
  className: '''
    mx-auto w-[400px] flex flex-col items-center gap-5 p-8 rounded-3xl
    bg-white dark:bg-gray-900
    border border-gray-200 dark:border-gray-800
    shadow-xl shadow-black/5 dark:shadow-black/40
  ''',
  children: [
    WDiv(
      className: '''
        w-16 h-16 rounded-2xl
        bg-indigo-100 dark:bg-indigo-950
        flex flex-row items-center justify-center
      ''',
      child: WIcon(
        Icons.mail,
        className: 'text-3xl text-indigo-600 dark:text-indigo-400',
      ),
    ),
    WDiv(
      className: 'flex flex-col items-center gap-1',
      children: [
        WText(
          'Verify your number',
          className: 'text-xl font-bold text-gray-900 dark:text-white',
        ),
        WText(
          'Enter the 6-digit code sent to +1 (555) 012-3489',
          className: 'text-sm text-center text-gray-500 dark:text-gray-400',
        ),
      ],
    ),
    WDiv(
      className: 'flex flex-row items-center justify-center gap-2',
      children: [
        WDiv(
          className: '''
            w-12 h-14 rounded-xl border-2
            border-gray-200 dark:border-gray-700
            bg-gray-50 dark:bg-gray-800
            flex flex-row items-center justify-center
          ''',
          child: WText(
            '8',
            className: 'text-2xl font-bold text-gray-900 dark:text-white',
          ),
        ),
        WDiv(
          className: '''
            w-12 h-14 rounded-xl border-2
            border-gray-200 dark:border-gray-700
            bg-gray-50 dark:bg-gray-800
            flex flex-row items-center justify-center
          ''',
          child: WText(
            '2',
            className: 'text-2xl font-bold text-gray-900 dark:text-white',
          ),
        ),
        WDiv(
          className: '''
            w-12 h-14 rounded-xl border-2
            border-gray-200 dark:border-gray-700
            bg-gray-50 dark:bg-gray-800
            flex flex-row items-center justify-center
          ''',
          child: WText(
            '4',
            className: 'text-2xl font-bold text-gray-900 dark:text-white',
          ),
        ),
        WDiv(
          className: '''
            w-12 h-14 rounded-xl border-2
            border-indigo-500 dark:border-indigo-400
            ring-2 ring-indigo-500/30 dark:ring-indigo-400/30
            bg-white dark:bg-gray-800
            flex flex-row items-center justify-center
          ''',
          child: WDiv(
            className: 'w-0.5 h-6 rounded-full bg-indigo-500 dark:bg-indigo-400',
          ),
        ),
        WDiv(
          className: '''
            w-12 h-14 rounded-xl border-2
            border-gray-200 dark:border-gray-700
            bg-gray-50 dark:bg-gray-800
          ''',
        ),
        WDiv(
          className: '''
            w-12 h-14 rounded-xl border-2
            border-gray-200 dark:border-gray-700
            bg-gray-50 dark:bg-gray-800
          ''',
        ),
      ],
    ),
    WDiv(
      className: 'flex flex-row items-center gap-1',
      children: [
        WIcon(
          Icons.schedule,
          className: 'text-sm text-gray-400 dark:text-gray-500',
        ),
        WText(
          'Resend code in 0:24',
          className: 'text-sm text-gray-500 dark:text-gray-400',
        ),
      ],
    ),
    WDiv(
      className: '''
        w-full rounded-2xl py-4
        bg-indigo-600 dark:bg-indigo-500
        flex flex-row items-center justify-center gap-2
      ''',
      children: [
        WText(
          'Verify',
          className: 'text-base font-bold text-white dark:text-white',
        ),
        WIcon(
          Icons.arrow_forward,
          className: 'text-lg text-white dark:text-white',
        ),
      ],
    ),
  ],
)
Stats
Views
29
Stars
0
Revisions
1
Size
3,777 chars
Created
Jun 12, 2026