Joseph Obaje's personal currency converter: a Flutter (Material 3) app with live exchange rates.
Author: Joseph Obaje
App ID: com.josephobaje.forex_converter (Android/Linux), com.josephobaje.forexConverter (iOS)
- Convert tab: amount, from/to pickers, swap, live result, rate used (both directions), fetch time and provider update time. Default USD → NGN.
- Rates tab: rates of all supported currencies against a selectable base (default NGN), pull-to-refresh, last-updated timestamp.
- Currencies: NGN, USD, EUR, GBP, CNY, GHS, ZAR, KES, XOF, XAF, EGP, AED, SAR, INR, CAD, JPY, CHF, AUD (edit
lib/src/currencies.dart). - Rates: open.er-api.com (free, no API key, CORS-enabled, updated daily). Cross rates are derived from the USD-based snapshot.
- Offline: last successful response is cached in
shared_preferences; cached or >24h-old rates show a "may be stale" banner. - Light/dark follows the system theme (deep teal Material 3 colour scheme).
- In-app credit on the Rates tab: "Rates by ExchangeRate-API · https://www.exchangerate-api.com".
lib/main.dart entry point
lib/src/app.dart MaterialApp, themes, bottom navigation
lib/src/models/rates_snapshot.dart parsing, cache JSON, conversion math
lib/src/services/rates_repository.dart HTTP fetch + local cache
lib/src/state/rates_controller.dart ChangeNotifier app state
lib/src/screens/ converter & rates screens
lib/src/widgets/ currency picker, status banners
flutter pub get
flutter analyze
flutter test
flutter run # device/emulator or -d chrome
flutter build web # output: build/web
flutter build apk # requires Android SDK
Rates by ExchangeRate-API (https://www.exchangerate-api.com); their free terms require attribution.