在我的旧项目中,我在dart中使用了一种方法来执行get操作,如果输出无效,我曾经在那里返回null。
我的代码 -
Future<Map<String, dynamic>> get(String url) async {
final response = await http.get(
Uri.parse(url),
headers: basicHeaderInfo()
);
if (response.statusCode == 200) {
return jsonDecode(response.body);
} else if (response.statusCode == 401) {
ErrorResponse res = ErrorResponse.fromJson(jsonDecode(response.body));
return null;
} else {
ErrorResponse res = ErrorResponse.fromJson(jsonDecode(response.body));
ToastMessage.error(res.message);
return null;
}
}
我的错误响应类 -
class ErrorResponse {
String message;
String errors;
ErrorResponse({
this.errors,
this.message,
});
factory ErrorResponse.fromJson(Map<String, dynamic> json) {
return ErrorResponse(
errors: json["errors"],
message: json["message"],
);
}
}
那些在零安全之前做得最好的,但最近我决定搬到零安全,我真正的教育才刚刚开始。
在我的 get
方法中,我遇到了一个错误,它会闪烁一条错误消息
A value of type 'Null' can't be returned from the method 'get' because it has a return type of 'Future<Map<String, dynamic>>'
不知道怎么处理。 而在 Class 中,还有一条错误信息
"The parameter 'errors' can't have a value of 'null' because of its type, but the implicit default value is 'null'.
我是这样解决的-
class ErrorResponse {
String message;
String errors;
ErrorResponse({
this.errors = "",
this.message = "",
});
factory ErrorResponse.fromJson(Map<String, dynamic> json) {
return ErrorResponse(
errors: json["errors"],
message: json["message"],
);
}
}
不知道这是常规还是非常规。
答案 0 :(得分:1)
在这种情况下我能想到的最佳选择是
throw Exception;
并在接收代码中使用异常处理(try and catch)。 另一种选择是返回一个空对象或字符串,然后在代码中进行检查。
答案 1 :(得分:1)
你应该使用:
Future<Map<String, dynamic>?>
String? message;
String? errors;
阅读这些文章: