Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MVVM から MVVM-C に変えてみた話 〜画面遷移どうしてる?〜

Avatar for Ricky-yu Ricky-yu
November 18, 2025

MVVM から MVVM-C に変えてみた話 〜画面遷移どうしてる?〜

Avatar for Ricky-yu

Ricky-yu

November 18, 2025
Tweet

Other Decks in Programming

Transcript

  1. 実例1:画面遷移テストの実施が困難 class _HomeViewState extends State<HomeView> { onTap: () async {

    // ❌ 問題:onTap 内で非同期処理+画面遷移を直接実装 // 処理状態のダイアログを表示。 CommonUtils.showProgressDialog(context); // 2秒待機、ダイヤログを消す。 await Future<dynamic>.delayed(Duration(seconds: 2)); Navigator.of(context).pop(); // 次の画面へ遷移する。 Get.to(BirthdayTestView(), }, }
  2. 画面遷移テスト(Before) testWidgets('HomeView Test', (WidgetTester tester) async { getPages: [ //

    ❌ ルーティング設定 が必要です。 GetPage(name: '/birthday', page: () => BirthdayTestView()), GetPage(name: '/fingerprint', page: () => FingerPrintTestView()), ], await tester.tap(find.text('Date_Fortune_Tell'.tr)); await tester.pump(Duration(seconds: 2)); // ❌ 2秒を待つ必要。 await tester.pumpAndSettle(); //❌ アニメーション完了を 待つ必要。 // ❌ 正しいページに遷移したかどうかを検証するのが難しい。 expect(find.byType(BirthdayTestView), findsOneWidget); }
  3. 画面遷移テスト(After)画面遷移テストがシンプル・高速・安定に testWidgets('HomeView Test(Mock Coordinator)', (WidgetTester tester) async { final mockCoordinator

    = MockHomeCoordinator(); Get.put<HomeCoordinator>(mockCoordinator); // ✅ View 本体だけをテストすればよい await tester.pumpWidget( GetMaterialApp(home: HomeView()), ); // ✅ ボタンをタップするだけに await tester.tap(find.text('Date_Fortune_Tell'.tr)); // ✅ 正しい Coordinator のメソッドが呼び出されたかを検証する verify(mockCoordinator.navigateToBirthdayTest()).called(1); }
  4. 導入にあたって検討すべきポイント • 画面遷移の依存関係 現在の画面遷移は View または ViewModel のどちらに依存しているかを確認する。 (View に依存している

    → Coordinator 導入の効果が大きい) • 遷移経路の複数性 複数のフローからその画面に遷移される可能性があるかを確認する。 (例:通知/ディープリンク/通常遷移など) • 遷移ロジックの複雑さ 条件分岐や状態管理を伴う遷移ロジックが複雑になっていないかを確認する。 • チーム方針 アーキテクチャは「正解」ではなく「哲学」。 チームの開発方針・保守性・テスト戦略に合わせて実装方針を検討する。
  5. 16 ©Linc' well inc. クリフォアアプリについて クリフォアアプリ • Linc’wellが提供するサービスをまとめたアプリ • オンライン・オフラインの診療予約

    • ヘルスケア製品の購入 • 服薬管理機能 • 体重管理サポート • MVVM+Coordinator導入中 • Flutterエンジニア採用中 • FlutterKaigi 2025 出展中