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.
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