🏛️ ADR-003: Flutter for Mobile Client
Context
We need to build a cross-platform mobile application for SplitDee supporting both Android and iOS users, featuring smooth transitions, real-time message feeds, custom PromptPay QR displays, and interactive animations for the Mochi pet gamification.
Alternatives Considered
- React Native: Good for cross-platform, but layout calculations can be inconsistent between iOS and Android. Re-renders can also lead to performance bottlenecks during complex animations.
- Swift (iOS) & Kotlin (Android) Native: Offers the best possible performance, but requires maintaining two separate codebases. This increases engineering effort and doubles time-to-market.
- Flutter (Selected): Google’s open-source UI software development kit.
Decision
We selected Flutter (Dart) for our mobile frontend application.
Consequences
- Single Codebase: One codebase compiles natively to both Android and iOS, reducing development overhead.
- Skia/Impeller Rendering Engine: Guarantees consistent, high-performance UI rendering and animations (e.g., Mochi pet reactions, level-up celebrations) across different devices.
- Riverpod State Management: Riverpod provides compile-safe, testable state tracking for multi-screen data synchronizations.
- Native Bridges: Standard plugins enable smooth device hardware integrations (e.g., camera access for slip uploads, local secure storage for tokens).