Dart 空安全 - 返回一个 none 可为空的类型
Dart null safety - Returning a none nullable type
我对新的 Dart Null Safety 完全陌生,我正在尝试转换我的一个项目并学习它。我对函数收到的一个错误有点困惑,它返回一个类型。这是代码:
Exercise getExerciseByID(String exerciseId) {
for (var exercise in _exercises) {
if (exercise.id == exerciseId) {
return exercise;
}
}
}
我收到的错误如下:
The body might complete normally, causing 'null' to be returned, but the return type, 'Exercise', is a potentially non-nullable type. (Documentation) Try adding either a return or a throw statement at the end.
我想知道在这种情况下我应该做什么/返回什么?对此的任何建议都会非常有帮助。非常感谢。
因为你这里隐含了return null
。如果 if
语句中的 none 将被执行,excersise
将不会被 returned,因此结果将为空。
Exercise getExerciseByID(String exerciseId) {
for (var exercise in _exercises) {
if (exercise.id == exerciseId) {
return exercise;
}
}
return null; //this is what it complains, that the result might be null while you declare non null response
}
选项(备选方案):
- 将 return 声明更改为可空类型 (jamesdlin)
Exercise?
- 最后抛出异常而不是 returning
null
- 总是 return 某些东西 - 例如默认值或 'nothing found value'
您收到该错误是因为您的 return 语句在 if 条件内,因此它假设它可能永远不会 return 一个值(如果所有条件都失败)。所以这可能是适合您的解决方案:
Exercise getExerciseByID(String exerciseId) {
// initialize some default value to return if all conditions fail
Exercise returnValue = Exercise();
for (var exercise in _exercises) {
if (exercise.id == exerciseId) {
// if found update your initial value with found one
returnValue = exercise;
// stop for loop after finding right value
break;
}
}
return returnValue;
}
在方法末尾添加 return 以防 if 条件不成立。
或者您可以使用简单的 firstWhere 方法,例如:
return _exercises.firstWhere((exercise) => exercise.id == exerciseId);
我对新的 Dart Null Safety 完全陌生,我正在尝试转换我的一个项目并学习它。我对函数收到的一个错误有点困惑,它返回一个类型。这是代码:
Exercise getExerciseByID(String exerciseId) {
for (var exercise in _exercises) {
if (exercise.id == exerciseId) {
return exercise;
}
}
}
我收到的错误如下:
The body might complete normally, causing 'null' to be returned, but the return type, 'Exercise', is a potentially non-nullable type. (Documentation) Try adding either a return or a throw statement at the end.
我想知道在这种情况下我应该做什么/返回什么?对此的任何建议都会非常有帮助。非常感谢。
因为你这里隐含了return null
。如果 if
语句中的 none 将被执行,excersise
将不会被 returned,因此结果将为空。
Exercise getExerciseByID(String exerciseId) {
for (var exercise in _exercises) {
if (exercise.id == exerciseId) {
return exercise;
}
}
return null; //this is what it complains, that the result might be null while you declare non null response
}
选项(备选方案):
- 将 return 声明更改为可空类型 (jamesdlin)
Exercise?
- 最后抛出异常而不是 returning
null
- 总是 return 某些东西 - 例如默认值或 'nothing found value'
您收到该错误是因为您的 return 语句在 if 条件内,因此它假设它可能永远不会 return 一个值(如果所有条件都失败)。所以这可能是适合您的解决方案:
Exercise getExerciseByID(String exerciseId) {
// initialize some default value to return if all conditions fail
Exercise returnValue = Exercise();
for (var exercise in _exercises) {
if (exercise.id == exerciseId) {
// if found update your initial value with found one
returnValue = exercise;
// stop for loop after finding right value
break;
}
}
return returnValue;
}
在方法末尾添加 return 以防 if 条件不成立。
或者您可以使用简单的 firstWhere 方法,例如:
return _exercises.firstWhere((exercise) => exercise.id == exerciseId);