From 616aa8d6be798b36cceaa94608a12320ed590965 Mon Sep 17 00:00:00 2001 From: Miguel Beltran Date: Tue, 20 Dec 2022 17:53:39 +0100 Subject: [PATCH] Migrate testing_app to go_router (#1541) * add go_router * migrate testing_app to go_router --- testing_app/lib/main.dart | 26 ++++++++++++++++++++------ testing_app/lib/screens/favorites.dart | 3 ++- testing_app/lib/screens/home.dart | 3 ++- testing_app/pubspec.yaml | 1 + testing_app/test/home_test.dart | 17 ++++++++++++++--- 5 files changed, 39 insertions(+), 11 deletions(-) diff --git a/testing_app/lib/main.dart b/testing_app/lib/main.dart index c00cef8f8..c30ea7927 100644 --- a/testing_app/lib/main.dart +++ b/testing_app/lib/main.dart @@ -3,6 +3,7 @@ // found in the LICENSE file. import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; import 'package:provider/provider.dart'; import 'package:testing_app/models/favorites.dart'; import 'package:testing_app/screens/favorites.dart'; @@ -12,6 +13,23 @@ void main() { runApp(const TestingApp()); } +GoRouter router() { + return GoRouter( + routes: [ + GoRoute( + path: HomePage.routeName, + builder: (context, state) => const HomePage(), + routes: [ + GoRoute( + path: FavoritesPage.routeName, + builder: (context, state) => const FavoritesPage(), + ), + ], + ), + ], + ); +} + class TestingApp extends StatelessWidget { const TestingApp({super.key}); @@ -19,17 +37,13 @@ class TestingApp extends StatelessWidget { Widget build(BuildContext context) { return ChangeNotifierProvider( create: (context) => Favorites(), - child: MaterialApp( + child: MaterialApp.router( title: 'Testing Sample', theme: ThemeData( primarySwatch: Colors.blue, visualDensity: VisualDensity.adaptivePlatformDensity, ), - routes: { - HomePage.routeName: (context) => const HomePage(), - FavoritesPage.routeName: (context) => const FavoritesPage(), - }, - initialRoute: HomePage.routeName, + routerConfig: router(), ), ); } diff --git a/testing_app/lib/screens/favorites.dart b/testing_app/lib/screens/favorites.dart index a245a4b38..83c1a7751 100644 --- a/testing_app/lib/screens/favorites.dart +++ b/testing_app/lib/screens/favorites.dart @@ -7,7 +7,8 @@ import 'package:provider/provider.dart'; import 'package:testing_app/models/favorites.dart'; class FavoritesPage extends StatelessWidget { - static const routeName = '/favorites_page'; + static const routeName = 'favorites_page'; + static const fullPath = '/$routeName'; const FavoritesPage({super.key}); diff --git a/testing_app/lib/screens/home.dart b/testing_app/lib/screens/home.dart index 0ff150e97..949f55901 100644 --- a/testing_app/lib/screens/home.dart +++ b/testing_app/lib/screens/home.dart @@ -3,6 +3,7 @@ // found in the LICENSE file. import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; import 'package:provider/provider.dart'; import 'package:testing_app/models/favorites.dart'; import 'package:testing_app/screens/favorites.dart'; @@ -21,7 +22,7 @@ class HomePage extends StatelessWidget { TextButton.icon( style: TextButton.styleFrom(foregroundColor: Colors.white), onPressed: () { - Navigator.pushNamed(context, FavoritesPage.routeName); + context.go(FavoritesPage.fullPath); }, icon: const Icon(Icons.favorite_border), label: const Text('Favorites'), diff --git a/testing_app/pubspec.yaml b/testing_app/pubspec.yaml index e9ad16357..d63dcce09 100644 --- a/testing_app/pubspec.yaml +++ b/testing_app/pubspec.yaml @@ -12,6 +12,7 @@ dependencies: cupertino_icons: ^1.0.3 provider: ^6.0.2 + go_router: ^6.0.0 dev_dependencies: integration_test: diff --git a/testing_app/test/home_test.dart b/testing_app/test/home_test.dart index 1808cc126..cd06114fb 100644 --- a/testing_app/test/home_test.dart +++ b/testing_app/test/home_test.dart @@ -5,13 +5,13 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:provider/provider.dart'; +import 'package:testing_app/main.dart'; import 'package:testing_app/models/favorites.dart'; -import 'package:testing_app/screens/home.dart'; Widget createHomeScreen() => ChangeNotifierProvider( create: (context) => Favorites(), - child: const MaterialApp( - home: HomePage(), + child: MaterialApp.router( + routerConfig: router(), ), ); @@ -65,5 +65,16 @@ void main() { // Check if the filled icon changes back to bordered icon. expect(find.byIcon(Icons.favorite), findsNothing); }); + + testWidgets('Testing Navigation', (tester) async { + await tester.pumpWidget(createHomeScreen()); + + // Tap the Favorites button in the app bar + await tester.tap(find.text('Favorites')); + await tester.pumpAndSettle(); + + // Verify if the empty favorites screen is shown. + expect(find.text('No favorites added.'), findsOneWidget); + }); }); }