使用命名路由时对空值使用空值检查运算符

Posted

技术标签:

【中文标题】使用命名路由时对空值使用空值检查运算符【英文标题】:Null check operator used on a null value when using Named routes 【发布时间】:2021-06-15 23:33:08 【问题描述】:

在我切换到named routes 后,我收到此错误,我的应用在使用MaterialPageRoute 时可以正常工作:

ma​​in.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() 调用提供程序时“对空值使用空检查运算符”

为啥我在 Flutter 测试期间使用 rootBundle.load 得到“对空值使用空检查运算符”?

错误:对空值使用空检查运算符

Flutter:FCM未处理异常:空值检查运算符用于空值

尝试使用来自提供者的值时出现错误“空值检查运算符用于空值”

Flutter Bloc Test:空值检查运算符用于空值(空安全)