Skip to content

sokal32/crypto-wallet-ui

Repository files navigation

Lotus Wallet — Crypto Wallet UI MVP

A non-custodial, multi-chain cryptocurrency wallet built with Flutter. This project is an MVP (Minimum Viable Product) demonstrating a full-featured wallet UI with HD wallet generation, token management, DEX listings, and cross-platform support.


Demo

IMG_2099.MP4

Design

UI/UX design was created by me.

View the full Figma design file: Lotus Wallet on Figma

Lotus Wallet Design

Features

Wallet Management

  • HD Wallet (BIP32/BIP44) — Hierarchical deterministic wallet generation from a single seed phrase
  • BIP39 Mnemonic — Industry-standard 12/24-word seed phrase creation and import
  • Multi-wallet Support — Create and manage multiple wallets within one app
  • Secure Storage — Seed phrases encrypted and stored with flutter_secure_storage

Portfolio & Assets

  • Portfolio Dashboard — Real-time balance view with pending and confirmed amounts
  • Token Management — Add or remove tokens from your portfolio
  • Fiat Conversion — Display balances in 100+ fiat currencies (USD, EUR, GBP, UAH, JPY, CNY, RUB, and more)

Transactions

  • Send — Send crypto to any address with optional QR code scanning
  • Receive — Generate a QR code for your wallet address
  • Transaction History — Browse all past transactions per wallet

Discover

  • DEX Listings — Curated whitelist of 75+ DEX tokens for discovery (PEPE variants, AI tokens, DeFi protocols, and more)

UX & Accessibility

  • Dark / Light Theme — Full theme switching, defaulting to dark
  • Internationalization — 4 languages: English, Russian, Ukrainian, German
  • QR Scanner — Scan recipient addresses directly from the camera

Tech Stack

Layer Technology
Framework Flutter (Dart SDK >=2.19.6 <3.0.0)
State Management provider (ChangeNotifier)
Blockchain web3dart, trust_wallet_core
Wallet Crypto dart_bip32_bip44, bip39
Secure Storage flutter_secure_storage
Local Persistence shared_preferences
Localization flutter_localizations, intl
Charts fl_chart
QR Codes qr_flutter, qr_code_scanner
JSON json_serializable, json_annotation
Networking http
Dev / Testing storybook_flutter, flutter_lints

Architecture

The app follows a Provider-based MVVM pattern with a clear separation of concerns:

lib/
├── main.dart                 # App entry point, MultiProvider setup
├── storybook.dart            # Storybook for isolated widget development
├── lotus_icons.dart          # Custom icon font definitions
├── utils.dart                # Shared utilities
│
├── screens/                  # Full app screens
│   ├── init/                 # Splash and main navigation
│   ├── wallet/               # Portfolio, send, receive, transactions
│   └── welcome/              # Onboarding wizard
│
├── widgets/                  # Reusable UI components
│   ├── buttons/              # Button variants
│   └── bottom_modals/        # Modal sheet components
│
├── providers/                # ChangeNotifier state managers
│   ├── wallet_manager.dart   # Wallet CRUD, active wallet state
│   ├── theme_manager.dart    # Dark/light theme toggle
│   ├── language_manager.dart # Locale selection
│   └── currency_manager.dart # Fiat currency selection
│
├── crypto/                   # Blockchain interaction layer
│   ├── web3.dart             # Web3Client setup (BSC testnet)
│   ├── mnemonic_provider.dart
│   └── etherum_provider.dart
│
├── theme/                    # Color palette and TextTheme definitions
└── l10n/                     # ARB localization files (en, ru, uk, de)

State Managers

Provider Responsibility
WalletManager Create, import, select, remove wallets; serialize to SharedPreferences
ThemeManager Toggle dark/light theme, persist preference
LanguageManager Switch app locale, persist preference
CurrencyManager Select display fiat currency, persist preference

Localization

The app is fully internationalized via Flutter's ARB system. Locale files live in lib/l10n/.

File Language
app_en.arb English (template)
app_ru.arb Russian
app_uk.arb Ukrainian
app_de.arb German

After editing ARB files, regenerate the localization classes:

flutter gen-l10n

Getting Started

Prerequisites

  • Flutter SDK installed and on your PATH
  • For iOS builds: Xcode + CocoaPods
  • For Android builds: Android Studio + Android SDK

Installation

# Clone the repository
git clone https://github.com/sokal32/lotus-wallet.git
cd lotus-wallet

# Install dependencies
flutter pub get

# Generate localization files
flutter gen-l10n

Running

# Debug run (connected device or emulator)
flutter run

# Run on a specific platform
flutter run -d chrome        # Web
flutter run -d macos         # macOS
flutter run -d linux         # Linux
flutter run -d windows       # Windows

Building

flutter build apk            # Android APK
flutter build ipa            # iOS IPA (requires macOS + Xcode)
flutter build web            # Web (outputs to build/web/)
flutter build macos          # macOS app bundle
flutter build linux          # Linux executable
flutter build windows        # Windows executable

App Icons

flutter pub run flutter_launcher_icons

Design System

Colors

Role Color
Primary #009C68 (Green)
Primary Flavor #00BE0C (Bright Green)
Secondary #4161D4 (Blue)
Splash / Nav #4161D4 (Blue)
Dark Scaffold #1C1C1E

Typography

The app uses the Lato typeface across all weights (300–700), paired with a custom Lotus icon font.


Storybook

The project includes a Storybook Flutter setup for developing and previewing UI components in isolation.

flutter run -t lib/storybook.dart

License

CC-BY-4.0

About

Non-custodial multi-chain crypto wallet UI built with Flutter

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors