flutter - 我们可以在具有 null 安全功能的情况下执行“Not null or return”吗?
问题描述
我正在尝试将 null 安全功能迁移到我的 Flutter 项目中,因为这对我的项目未来有好处。因为我已经有通过 Kotlin 开发 Android 应用程序的经验,所以我已经习惯了这个 null 安全特性。但似乎我无法执行可以在 Kotlin 中完成的一件事。
user?.name ?? "Unknown"
我注意到在 Dart 中,我可以使用此代码行设置默认值。现在我正在尝试执行此操作
fun performOrReturn(users: Map<String, User>, id: String) {
val user = users[id] ?: return //This line
println("User info gotten : ${user.name}")
}
在 Kotlin 中,我可以执行此操作。如果特定变量为空,我可以让方法自己返回,因此 Kotlin 可以灵活地处理空安全。
所以这就是我想要做的,我的代码中有表格。我想检查该字段的指定列和行中是否存在数据。
Map<int, List<MyData>> table = Map();
...
int _findDataExisting(int row, int col) {
List<MyData> data = table[row]; //This is causing problem because table[row] can be null
//Alternative solution is
//List<MyData> data = table[row] ?? List.empty();
//
//if(data.isEmpty) {
// return -1;
//}
//
for(int i = 0; i < data.length; i++) {
if(data[i].column == col) {
return i;
}
}
return -1;
}
我想让它返回 -1 而不是初始化默认值,因为它不利于处理内存,并且代码效率低下。
List<MyData> data = map[row] ?? return -1;
我像 Kotlin 一样尝试了下面的行,但 Dart 似乎无法处理这个问题。
Dart 中是否有任何等价的东西?如果特定变量为空,则使其返回方法。
解决方案
不要花哨。
int _findDataExisting(int row, int col) {
if (table[row] != null) {
List<MyData> data = table[row]!;
for(int i = 0; i < data.length; i++) {
if(data[i].column == col) {
return i;
}
}
}
return -1;
}
推荐阅读
- xcode - 在 SwiftUI (5) 和 Xcode (12.4) 中实现 AdMob 插页式广告
- c - 将平方 x,y 坐标转换为圆坐标
- python - 在切片后绘制下一行
- c# - 从特定标签获取所有提交的列表,直到最后一个
- c# - 更新列表中的属性字段
- perl - 如何执行模板takelit脚本?
- android - 在片段中绑定 MediaProjection 服务会导致配置更改出现安全异常
- c# - C# 剪贴板和 DataObject 未按预期运行
- python - 如何在 Python 中编写正则表达式以删除字符串中间数字的前导零
- generics - 如何创建一个采用 u32 或 &str 并分别返回 u32 或 usize 的闭包?