使用命名路由时对空值使用空值检查运算符
Posted
技术标签:
【中文标题】使用命名路由时对空值使用空值检查运算符【英文标题】:Null check operator used on a null value when using Named routes 【发布时间】:2021-06-15 23:33:08 【问题描述】:在我切换到named routes
后,我收到此错误,我的应用在使用MaterialPageRoute
时可以正常工作:
main.dart:
void main()
WidgetsFlutterBinding.ensureInitialized();
runApp(
MultiProvider(
providers: [
ChangeNotifierProvider(create: (context) => ClassA()),
ChangeNotifierProvider(
create: (context) => ClassB()),
],
child: MyApp(),
),
);
class MyApp extends StatelessWidget
@override
Widget build(BuildContext context)
return FutureBuilder(
future: Firebase.initializeApp(),
builder: (context, snapshot)
if (snapshot.hasError)
return ...
if (snapshot.connectionState == ConnectionState.done)
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'App Title',
initialRoute: '/',
routes:
'/': (context) => Wrapper(),
'somePage/': (context) => SomePage(),
,
);
//else ...
return ... ;
);
错误信息:
The following _CastError was thrown building Builder(dirty):
Null check operator used on a null value
The relevant error-causing widget was:
MaterialApp file:///.../lib/main.dart:40:20
When the exception was thrown, this was the stack:
#0 _WidgetsAppState._onGenerateRoute.<anonymous closure> (package:flutter/src/widgets/app.dart:1196:48)
#1 MaterialPageRoute.buildContent (package:flutter/src/material/page.dart:54:55)
#2 MaterialRouteTransitionMixin.buildPage (package:flutter/src/material/page.dart:107:27)
#3 _ModalScopeState.build.<anonymous closure>.<anonymous closure> (package:flutter/src/widgets/routes.dart:840:53)
#4 Builder.build (package:flutter/src/widgets/basic.dart:7555:48)
颤振医生:
Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel stable, 2.0.2, on Microsoft Windows [Version 10.0.19042.867], locale en-US)
[√] android toolchain - develop for Android devices (Android SDK version 30.0.1)
[√] Chrome - develop for the web
[√] Android Studio (version 4.1.0)
[√] VS Code (version 1.52.1)
[√] Connected device (3 available)
• No issues found!
奇怪的是,该应用程序在多次热重启后工作,然后热重启崩溃。
【问题讨论】:
你有没有弄清楚问题出在哪里? 在更改应用程序核心行为后使用完整的应用程序刷新。这对我有用。摆弄路线(我的解释)会混淆热刷新。 【参考方案1】:不确定“为什么”,但您必须将“根”小部件从 FutureBuilder 更改为注册命名路由的 MaterialApp。
与您具有相同的代码结构和相同的错误。我将我的 MaterialApp 作为runApp
的参数,一切都很好¯_(ツ)_/¯
【讨论】:
【参考方案2】:我遇到了和你一样的情况,重新启动应用解决了这个问题。
【讨论】:
【参考方案3】:您不能同时提供 initialRoute 和 '/',
Route '/' 已经是initialRoute 去掉initialRoute就行了
【讨论】:
查看文档:flutter.dev/docs/cookbook/navigation/named-routes以上是关于使用命名路由时对空值使用空值检查运算符的主要内容,如果未能解决你的问题,请参考以下文章
在 dispose() 调用提供程序时“对空值使用空检查运算符”