如何有效地将非空安全代码与空安全省道代码一起使用?

aemubtdh  于 2022-10-07  发布在  其他
关注(0)|答案(1)|浏览(119)

有没有办法正确地使用非空安全代码来转换为空安全代码?例如,我有一个函数返回null值,但它不会迁移到空安全。例如,

// @dart=2.9
User getUser(){
 if(loggedIn){
   return user;
 }
 return null
}

现在我想在空的安全代码…中调用上面的代码

void build(){
 final user = getUser();
 if(user==null){
  return LoginScreen();
 }else{
  return HomeScreen();
 }
}

现在Linterer表示user == null将始终返回FALSE,假设通过getUser()返回的用户总是非空的,但问题是getUser()运行在非空的安全代码中。

因此,每当我运行Linter时,LoginScreen小部件都会被删除,整个逻辑就会崩溃。

现在我不确定我们是否可以解决这个问题,但我认为更好的方法是在IDE中处理注解,就像Kotlin处理Java代码一样。根据您的函数知识将Java函数标记为@Nullable或@Nullable,然后由Kotlin编译器或IDE进行处理。

我们有办法做这个飞镖吗?因为我到处都找不到它。

解决这个问题的一种方法是使用Null Pattern,但由于代码库是50%的空安全代码,因此很难在任何地方都这样做,相反,我会依赖一个工具来实现这一点。

guykilcj

guykilcj1#

也许你能做到

// @dart=2.9
dynamic getUser(){
 if(loggedIn){
   return user;
 }
 return null
}

..。

void build(){
     final user = getUser();
     if(user is User){
      return LoginScreen();
     }else{
      return HomeScreen();
     }
    }

相关问题