Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 使用getX注销时对空值使用的空检查运算符_Flutter_Dart_Flutter Test_Getx - Fatal编程技术网

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
时。如果你知道什么时候用,你会没事的。。空安全性很酷!:)