🏛️ 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

  1. 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.
  2. 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.
  3. 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).