Flutter Currency Converter Card with Live Exchange Rate

A currency exchange card built with Wind: stacked send and receive amount blocks with currency chips, a convert-flow badge, a live exchange rate with a trend indicator, and a full-width action button. Dark-mode ready.

Anılcan Çakır by Anılcan Çakır 59 views 0 stars 3 weeks ago Rev 1
Flutter Currency Converter Card with Live Exchange Rate preview
main.dart
WDiv(
  className: 'mx-auto max-w-sm flex flex-col gap-4 rounded-3xl p-6 bg-white border border-gray-100 shadow-xl dark:bg-gray-900 dark:border-gray-800',
  children: [
    WDiv(
      className: 'flex flex-row items-center justify-between w-full',
      children: [
        WText(
          'Currency Exchange',
          className: 'text-lg font-bold text-gray-900 dark:text-white'
        ),
        WDiv(
          className: 'flex flex-row items-center gap-1.5 px-2.5 py-1 rounded-full bg-emerald-50 dark:bg-emerald-500/15',
          children: [
            WDiv(
              className: 'w-1.5 h-1.5 rounded-full bg-emerald-500 dark:bg-emerald-400',
              child: WSpacer(
                className: 'w-1.5 h-1.5'
              )
            ),
            WText(
              'Live rate',
              className: 'text-xs font-semibold text-emerald-600 dark:text-emerald-300'
            ),
          ]
        ),
      ]
    ),
    WDiv(
      className: 'flex flex-col gap-2 w-full rounded-2xl p-4 bg-gray-50 dark:bg-gray-800',
      children: [
        WText(
          'You send',
          className: 'text-xs font-medium text-gray-400 dark:text-gray-500'
        ),
        WDiv(
          className: 'flex flex-row items-center justify-between w-full',
          children: [
            WText(
              '$1,000.00',
              className: 'text-2xl font-bold text-gray-900 dark:text-white'
            ),
            WDiv(
              className: 'flex flex-row items-center gap-2 px-3 py-1.5 rounded-full bg-white border border-gray-200 dark:bg-gray-700 dark:border-gray-600',
              children: [
                WDiv(
                  className: 'w-5 h-5 rounded-full bg-blue-600 dark:bg-blue-500',
                  child: WSpacer(
                    className: 'w-5 h-5'
                  )
                ),
                WText(
                  'USD',
                  className: 'text-sm font-bold text-gray-900 dark:text-white'
                ),
              ]
            ),
          ]
        ),
      ]
    ),
    WDiv(
      className: 'flex flex-row items-center justify-center w-full',
      child: WDiv(
        className: 'w-9 h-9 rounded-full bg-indigo-600 shadow-lg dark:bg-indigo-500 flex flex-row items-center justify-center',
        child: WIcon(
          Icons.expand_more,
          className: 'text-lg text-white dark:text-white'
        )
      )
    ),
    WDiv(
      className: 'flex flex-col gap-2 w-full rounded-2xl p-4 bg-indigo-50 dark:bg-indigo-500/10',
      children: [
        WText(
          'They receive',
          className: 'text-xs font-medium text-indigo-400 dark:text-indigo-300'
        ),
        WDiv(
          className: 'flex flex-row items-center justify-between w-full',
          children: [
            WText(
              '925.40',
              className: 'text-2xl font-bold text-indigo-700 dark:text-indigo-200'
            ),
            WDiv(
              className: 'flex flex-row items-center gap-2 px-3 py-1.5 rounded-full bg-white border border-indigo-200 dark:bg-gray-700 dark:border-indigo-500/40',
              children: [
                WDiv(
                  className: 'w-5 h-5 rounded-full bg-amber-500 dark:bg-amber-400',
                  child: WSpacer(
                    className: 'w-5 h-5'
                  )
                ),
                WText(
                  'EUR',
                  className: 'text-sm font-bold text-gray-900 dark:text-white'
                ),
              ]
            ),
          ]
        ),
      ]
    ),
    WDiv(
      className: 'flex flex-row items-center justify-between w-full',
      children: [
        WText(
          '1 USD = 0.9254 EUR',
          className: 'text-sm font-medium text-gray-500 dark:text-gray-400'
        ),
        WDiv(
          className: 'flex flex-row items-center gap-1',
          children: [
            WIcon(
              Icons.trending_up,
              className: 'text-sm text-emerald-500 dark:text-emerald-400'
            ),
            WText(
              '+0.32%',
              className: 'text-sm font-semibold text-emerald-600 dark:text-emerald-400'
            ),
          ]
        ),
      ]
    ),
    WButton(
      className: 'w-full rounded-2xl py-3.5 bg-indigo-600 shadow-lg dark:bg-indigo-500 flex flex-row items-center justify-center',
      child: WText(
        'Exchange now',
        className: 'text-sm font-bold text-white dark:text-white'
      )
    ),
  ],
)
Stats
Views
59
Stars
0
Revisions
1
Size
4,506 chars
Created
Jul 4, 2026