Flutter VPN Connection Status Card with Server and Speed Stats

A VPN client status card with a large protected state badge, the active server and its latency, protocol and kill switch rows in a soft inner panel, session and throughput stats, plus a disconnect action. Shows how Wind handles centred column layouts, nested panels and dark-mode inverted buttons.

Anılcan Çakır by Anılcan Çakır 2 views 0 stars 8 hours ago Rev 1
Flutter VPN Connection Status Card with Server and Speed Stats preview
main.dart
WDiv(
  className: 'max-w-sm w-full rounded-3xl bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-800 shadow-xl p-6',
  children: [
    WDiv(
      className: 'flex flex-row items-center justify-between w-full',
      children: [
        WText(
          'Private Tunnel',
          className: 'text-base font-bold text-gray-900 dark:text-white'
        ),
        WDiv(
          className: 'flex flex-row items-center px-3 py-1 rounded-full bg-emerald-100 dark:bg-emerald-800',
          children: [
            WDiv(
              className: 'w-2 h-2 rounded-full bg-emerald-500 dark:bg-emerald-300'
            ),
            WText(
              'Connected',
              className: 'text-xs font-semibold text-emerald-700 dark:text-emerald-100 ml-1.5'
            ),
          ],
        ),
      ],
    ),
    WDiv(
      className: 'flex flex-col items-center w-full mt-6',
      children: [
        WDiv(
          className: 'w-16 h-16 rounded-full bg-emerald-50 dark:bg-emerald-900 flex flex-row items-center justify-center',
          child: WIcon(
            Icons.check_circle,
            className: 'text-emerald-600 dark:text-emerald-300 text-3xl'
          ),
        ),
        WText(
          'Protected',
          className: 'text-xl font-extrabold text-gray-900 dark:text-white mt-3'
        ),
        WText(
          'Your traffic is encrypted end to end',
          className: 'text-xs text-gray-500 dark:text-gray-400 mt-1'
        ),
      ],
    ),
    WDiv(
      className: 'flex flex-col w-full rounded-2xl bg-gray-50 dark:bg-gray-800 p-4 mt-6',
      children: [
        WDiv(
          className: 'flex flex-row items-center justify-between w-full',
          children: [
            WDiv(
              className: 'flex flex-row items-center',
              children: [
                WIcon(
                  Icons.location_on,
                  className: 'text-indigo-500 dark:text-indigo-400 text-base'
                ),
                WText(
                  'Frankfurt, Germany',
                  className: 'text-sm font-semibold text-gray-900 dark:text-white ml-2'
                ),
              ],
            ),
            WDiv(
              className: 'px-2.5 py-1 rounded-full bg-emerald-100 dark:bg-emerald-800',
              child: WText(
                '18 ms',
                className: 'text-xs font-semibold text-emerald-700 dark:text-emerald-100'
              ),
            ),
          ],
        ),
        WDiv(
          className: 'flex flex-row items-center justify-between w-full mt-3',
          children: [
            WText(
              'Protocol',
              className: 'text-xs text-gray-500 dark:text-gray-400'
            ),
            WText(
              'WireGuard  |  AES-256',
              className: 'text-xs font-semibold text-gray-700 dark:text-gray-200'
            ),
          ],
        ),
        WDiv(
          className: 'flex flex-row items-center justify-between w-full mt-2',
          children: [
            WText(
              'Kill switch',
              className: 'text-xs text-gray-500 dark:text-gray-400'
            ),
            WDiv(
              className: 'flex flex-row items-center',
              children: [
                WIcon(
                  Icons.bolt,
                  className: 'text-amber-500 dark:text-amber-400 text-sm'
                ),
                WText(
                  'Always on',
                  className: 'text-xs font-semibold text-gray-700 dark:text-gray-200 ml-1'
                ),
              ],
            ),
          ],
        ),
      ],
    ),
    WDiv(
      className: 'flex flex-row items-center justify-between w-full mt-5',
      children: [
        WDiv(
          className: 'flex flex-col',
          children: [
            WText(
              '01:42:07',
              className: 'text-sm font-bold text-gray-900 dark:text-white'
            ),
            WText(
              'Session',
              className: 'text-xs text-gray-400 dark:text-gray-500 mt-0.5'
            ),
          ],
        ),
        WDiv(
          className: 'flex flex-col',
          children: [
            WText(
              '84 Mbps',
              className: 'text-sm font-bold text-gray-900 dark:text-white'
            ),
            WText(
              'Download',
              className: 'text-xs text-gray-400 dark:text-gray-500 mt-0.5'
            ),
          ],
        ),
        WDiv(
          className: 'flex flex-col',
          children: [
            WText(
              '21 Mbps',
              className: 'text-sm font-bold text-gray-900 dark:text-white'
            ),
            WText(
              'Upload',
              className: 'text-xs text-gray-400 dark:text-gray-500 mt-0.5'
            ),
          ],
        ),
      ],
    ),
    WDiv(
      className: 'w-full mt-6',
      child: WButton(
        className: 'w-full rounded-2xl bg-gray-900 dark:bg-white py-3',
        child: WText(
          'Disconnect',
          className: 'text-white dark:text-gray-900 text-center font-semibold text-sm'
        ),
      ),
    ),
  ],
)
Stats
Views
2
Stars
0
Revisions
1
Size
5,158 chars
Created
Jul 25, 2026