Flutter 使用getX注销时对空值使用的空检查运算符
因此,登录时一切都进行得很顺利,但在注销时抛出了一个Flutter 使用getX注销时对空值使用的空检查运算符,flutter,dart,flutter-test,getx,Flutter,Dart,Flutter Test,Getx,因此,登录时一切都进行得很顺利,但在注销时抛出了一个\u CastError,即使注销进行得很顺利,但我担心这个错误会在生产模式中造成问题 这是我的验证模型中的代码 Rxn<User> _user = Rxn<User>() ; String? get user => _user.value!.email; @override void onInit() { // TODO: implement onInit super.onInit();
\u CastError
,即使注销进行得很顺利,但我担心这个错误会在生产模式中造成问题
这是我的验证模型中的代码
Rxn<User> _user = Rxn<User>() ;
String? get user => _user.value!.email;
@override
void onInit() {
// TODO: implement onInit
super.onInit();
_user.bindStream(_auth.authStateChanges());
}
Rxn_user=Rxn();
一串get user=>\u user.value!。电子邮件;
@凌驾
void onInit(){
//TODO:实现onInit
super.onInit();
_user.bindStream(_auth.authStateChanges());
}
这是我的控制器视图中的代码
return Obx((){
return(Get.find<AuthViewModel>().user != null)
? HomeScreen()
: Home();
});
返回Obx(){
返回(Get.find().user!=null)
?主屏幕()
:Home();
});
这张是我的主屏幕上的
class HomeScreen extends StatelessWidget {
FirebaseAuth _auth = FirebaseAuth.instance;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(
"Home Screen",
textAlign: TextAlign.center,
),
),
body: Column(
children: <Widget>[
Center(
child: TextButton(
child: Text(
"logout"
),
onPressed: () {
_auth.signOut();
Get.offAll(Home());
},
),
),
],
),
);
}
}
类主屏幕扩展小部件{
FirebaseAuth _auth=FirebaseAuth.instance;
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:正文(
“主屏幕”,
textAlign:textAlign.center,
),
),
正文:专栏(
儿童:[
居中(
孩子:文本按钮(
子:文本(
“注销”
),
已按下:(){
_auth.signOut();
滚(Home());
},
),
),
],
),
);
}
}
我将感谢任何帮助。这就是问题所在
///您试图声明一个可能为“null”的私有变量。
///默认情况下,所有'Rxn'都将为空。
Rxn_user=Rxn();
///您想从'email'属性获取字符串。。。从这个变量。
///但如果不存在,您还希望返回'null'。请参阅开头的:`String?`。
///但你也告诉dart它永远不会为空。请参阅:`u user.value!`。
一串get user=>\u user.value!。电子邮件;
///上面那一行将转换为这一行。
一串获取用户=>null!。电子邮件;
通过添加,您正在将null
标记为非null
代码>在下一个操作数之前。这就是为什么会出现错误。要解决此问题,请使用?
而不是代码>
///这将返回`null`并忽略下一个`email`操作数
///如果“\u user.value”为“null”。
一串获取用户=>\u user.value?.email;
这个问题是可以理解的,请提供一些更相关的代码。非常感谢,每当我编写代码时,这个空检查都会让我感到困惑,Flatter一直对我大喊大叫,让我设置空检查操作符,所以我只是在跟踪Flatter错误的修复。耶,一开始它让我感到困惑。。。请记住,当您希望对象可能为null
,并且还希望访问其中的属性时,请使用?
。。。只能使用
当您知道对象将始终存在并且永远不会为null
时。如果你知道什么时候用,你会没事的。。空安全性很酷!:)