🦔
【Flutter】久しぶりにgo_router触ったらエラーにハマった話
はじめに
go_router
はFlutterで開発する際に画面遷移を簡単に実装しやすくするパッケージですが、久しぶりに使用した際にエラーに遭遇したので書きます。
公式はこちら↓
バージョン
- Flutter 3.13.9
- go_router ^12.1.3
エラー内容
ルーティングを設定してデバッグを行ったところ、次のようなエラーメッセージが表示されました。
══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
The following assertion was thrown building DefaultSelectionStyle:
'package:go_router/src/parser.dart': Failed assertion: line 64 pos 12: 'routeInformation.state !=
null': is not true.
The relevant error-causing widget was:
MaterialApp
...
Simulatorだとこんな感じ
ググってみたが、記事を書いてる時点ではヒットせず。
結論
go_router
のバージョン違いによる書き方の違いでした。
sample.dart
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';
import 'package:test_project/presentation/pages/home_screen.dart';
import 'package:test_project/presentation/pages/login_screen.dart';
import 'package:test_project/presentation/pages/settings_page.dart';
void main() {
runApp(
ProviderScope(
child: const App(),
),
);
}
class App extends ConsumerWidget {
const App({super.key});
Widget build(BuildContext context, WidgetRef ref) {
final goRouter = ref.watch(goRouterProvider);
return MaterialApp.router(
title: 'Test Project',
+ routerConfig: goRouter,
- routerDelegate: goRouter.routerDelegate,
- routeInformationParser: goRouter.routeInformationParser,
);
}
}
final goRouterProvider = Provider<GoRouter>(
(ref) {
return GoRouter(
initialLocation: '/home',
routes: [
GoRoute(
path: '/login',
builder: (context, state) => const LoginScreen(),
),
GoRoute(
path: '/home',
builder: (context, state) => const HomeScreen(),
),
GoRoute(
path: '/settings',
builder: (context, state) => const SettingsPage(),
),
],
);
},
);
ちなみに
ChatGPTさんに聞いてみても良い回答は得られませんでした。
最後に
公式サイトや公式のGithubを見る限りgo_router
はバージョンによってかなり書き方が変わってます。
Linterでエラーにしてくれるものもありますが、今回のようにエラーにならず、変わるスパンが早いと生成AIでも良い回答が得られないこともあります。
go_router
に限らずFlutterはまだまだ成長しているフレームワークですので、やはり公式のドキュメントを読むことが一番ですね。
再度公式はこちら↓
Discussion
go routerは進化するの早いので、riverpodみたいに公式を見るしかないですね。