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

Posted

技术标签:

【中文标题】尝试使用来自提供者的值时出现错误“空值检查运算符用于空值”【英文标题】:Getting an error "Null check operator used on a null value" when trying to consume value from provider 【发布时间】:2021-09-13 00:22:27 【问题描述】:

我在尝试执行我的颤振应用时遇到以下错误:

======== Exception caught by widgets library =======================================================
The following _CastError was thrown building VerifyEmail(dirty, dependencies: [_InheritedProviderScope<User?>], state: _VerifyEmailState#da862):
Null check operator used on a null value

The relevant error-causing widget was: 
  VerifyEmail file:///Users/sas/Projects/Development/App/Flutter/netapp/lib/screens/sign_up.dart:152:61
When the exception was thrown, this was the stack: 
#0      _VerifyEmailState.build (package:netapp/screens/verify_email.dart:58:40)
#1      StatefulElement.build (package:flutter/src/widgets/framework.dart:4691:27)
#2      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4574:15)
#3      StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4746:11)
#4      Element.rebuild (package:flutter/src/widgets/framework.dart:4267:5)
...
====================================================================================================

导致错误的代码:

    User? firebaseUser = Provider.of<User?>(context, listen: false);
    String? emailAddress = firebaseUser!.email;

如果我没有将空检查运算符 [!] 指定给 email,则会出现语法错误。

我在 Text 小部件中使用此 emailAddress 变量。

                Text(
                  emailAddress!,
                  textAlign: TextAlign.center,
                  style: GoogleFonts.roboto(
                    textStyle: Theme.of(context).textTheme.subtitle1!.copyWith(
                          color: kBrandAccentColor,
                        ),
                  ),
                ),

下面列出的代码与main.dart 文件中的提供程序相关:

    return MultiProvider(
      providers: [
        StreamProvider<User?>.value(
          value: AuthService().onAuthStateChanged,
          initialData: null,
        ),
       ]
      )

以下代码存在于我的身份验证服务文件中:

  Stream<User?> get onAuthStateChanged => authInstance.authStateChanges();

包的版本:

  firebase_core: ^1.3.0
  firebase_auth: ^1.4.1
  cloud_firestore: ^2.2.2
  provider: ^5.0.0

flutter --version 的输出:

Flutter 2.2.1 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 02c026b03c (5 weeks ago) • 2021-05-27 12:24:44 -0700
Engine • revision 0fdb562ac8
Tools • Dart 2.13.1

【问题讨论】:

【参考方案1】:

当您想询问其电子邮件时,firebaseUser 仍然是 null。通过使用! 运算符,您明确告诉“我个人保证此对象不为空”,但事实并非如此,因此它会引发异常。

也许您想改用? 运算符?

String? emailAddress = firebaseUser?.email;

这将使用可选链接,这似乎是您在这里需要的东西。

【讨论】:

我确实尝试过使用 ?运算符,但仍然是同样的错误。 @xpetta 这是不可能的。您一定是从错误使用 ! 的其他地方收到错误。 我仍然无法解决此错误。不确定,需要做什么。我整天都在挠头来解决这个问题。任何帮助将不胜感激。

以上是关于尝试使用来自提供者的值时出现错误“空值检查运算符用于空值”的主要内容,如果未能解决你的问题,请参考以下文章

尝试合并来自两个不同表的两个选择时出现错误

尝试使用 REST API 公开对象时出现“拒绝访问。提供的范围未经授权”错误

尝试使用“下载”属性以 HTML5 提供下载时出现“失败 - 网络错误”

尝试从分支合并时出现 SVN 错误

当我尝试使用 symfony 创建实体时出现 Aborted 错误消息 [重复]

尝试构建 RESTless API 时出现“方法不允许”错误