【发布时间】:2021-12-21 14:18:39
【问题描述】:
更新到新版本的颤振(空安全)后,我的应用程序出现问题。
我按照下面的代码设置了路由器和导航器,当我运行应用程序时,路由器返回错误:“类型 Null 不是类型转换中 ScreenArgs 类型的子项”
这可能是由于没有初始化类 ScreenArgs 的任何实例造成的,但我不知道错误在哪里。
布局:
final _navigatorKey = GlobalKey<NavigatorState>();
...
return Scaffold(
backgroundColor: Colors.white,
body: Navigator(
key: _navigatorKey,
initialRoute: profileRoute,
onGenerateRoute: generateRoute,
),
bottomNavigationBar: navBar(),
);
void _onItemTapped(int index) {
setState(() {
_screenIndex = index;
});
switch (index) {
case 0:
_navigatorKey.currentState!.pushNamed(coursesRoute);
break;
}
}
路由器:
Route<dynamic> generateRoute(RouteSettings settings) {
final args = settings.arguments as ScreenArgs;
switch (settings.name) {
...
case profileRoute:
return PageTransition(
child: const ProfileScreen(), type: PageTransitionType.fade);
case coursesRoute:
return PageTransition(
child: CoursesScreen(
entityId: args.entityId,
),
type: PageTransitionType.fade);
...
}
}
屏幕参数:
class ScreenArgs {
final String quizId;
final String courseId;
final String entityId;
final numOfQuestions = numberOfQuestions;
ScreenArgs(this.quizId, this.entityId, this.courseId);
}
我尝试在 Layout 中初始化 ScreenArgs 的实例并将其传递给导航器,如下所示:
final args = ScreenArgs("","","");
Navigator(
key: _navigatorKey,
initialRoute: profileRoute,
onGenerateRoute: (args) {generateRoute(args);}
),
bottomNavigationBar: navBar(),
);
或者在itemTapped切换器中如下:
switch (index) {
case 0:
_navigatorKey.currentState!.pushNamed(profileRoute, arguments: args);
break;
但没有任何效果,我收到了同样的错误消息,我被困了几个小时。如果有人看到我哪里出错了,请告诉我,提前谢谢。
【问题讨论】:
标签: flutter router navigator dart-null-safety