尝试使用来自提供者的值时出现错误“空值检查运算符用于空值”
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 提供下载时出现“失败 - 网络错误”