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.
IMG_2099.MP4
UI/UX design was created by me.
View the full Figma design file: Lotus Wallet on Figma
- 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 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)
- 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
- DEX Listings — Curated whitelist of 75+ DEX tokens for discovery (PEPE variants, AI tokens, DeFi protocols, and more)
- 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
| 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 |
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)
| 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 |
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- Flutter SDK installed and on your PATH
- For iOS builds: Xcode + CocoaPods
- For Android builds: Android Studio + Android SDK
# 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# 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 # Windowsflutter 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 executableflutter pub run flutter_launcher_icons| Role | Color |
|---|---|
| Primary | #009C68 (Green) |
| Primary Flavor | #00BE0C (Bright Green) |
| Secondary | #4161D4 (Blue) |
| Splash / Nav | #4161D4 (Blue) |
| Dark Scaffold | #1C1C1E |
The app uses the Lato typeface across all weights (300–700), paired with a custom Lotus icon font.
The project includes a Storybook Flutter setup for developing and previewing UI components in isolation.
flutter run -t lib/storybook.dartCC-BY-4.0