SDK版本升级后异步请求方法非空返回类型报错如何解决?
Dart空安全返回类型不匹配报错修复方案
报错原因
你声明了makeRequest方法的返回类型为Future<String>,代表该异步方法最终必须返回一个非空的String类型值,但当前代码全程没有执行return操作,方法执行完毕后默认返回null,和声明的非空返回类型冲突,所以触发空安全编译校验报错。
修复方案
根据你的业务需求选择对应方案即可:
- 方案1:方法不需要返回任何值
直接修改方法签名的返回类型为Future<void>即可,原有业务逻辑不需要改动,修改后代码示例:Future<void> makeRequest() async { // 原有业务代码保持不变 HttpClient client = new HttpClient(); client.badCertificateCallback = ((X509Certificate cert, String host, int port) => true); String url = global.urlVar; Map map = { "object": global.nameObj, "type": global.typesOp, }; HttpClientRequest request = await client.postUrl(Uri.parse(url)); request.headers.set('content-type', 'application/json'); request.add(utf8.encode(json.encode(map))); HttpClientResponse response = await request.close(); _isButtonDisabled = false; if (200 == response.statusCode ) { Navigator.push( context, MaterialPageRoute(builder: (context) => Status_Obj()) ); } else { Navigator.push( context, MaterialPageRoute(builder: (context) => Error_Auth()), ); } } - 方案2:方法需要返回字符串结果
在所有逻辑分支末尾补充对应return语句,保证方法不管走哪个分支最终都会返回非空String即可,示例代码:Future<String> makeRequest() async { HttpClient client = new HttpClient(); client.badCertificateCallback = ((X509Certificate cert, String host, int port) => true); String url = global.urlVar; Map map = { "object": global.nameObj, "type": global.typesOp, }; HttpClientRequest request = await client.postUrl(Uri.parse(url)); request.headers.set('content-type', 'application/json'); request.add(utf8.encode(json.encode(map))); HttpClientResponse response = await request.close(); _isButtonDisabled = false; if (200 == response.statusCode) { Navigator.push( context, MaterialPageRoute(builder: (context) => Status_Obj()) ); // 按需返回成功对应的字符串,也可以读取响应体返回 return "请求成功"; } else { Navigator.push( context, MaterialPageRoute(builder: (context) => Error_Auth()), ); // 按需返回失败对应的字符串 return "请求失败,状态码:${response.statusCode}"; } }
注意事项
如果方法执行过程中有可能抛出未捕获的异常,你可以选择两种处理方式:
- 补充
try-catch结构,在异常捕获分支也返回对应String值 - 将返回类型修改为
Future<String?>,显式声明返回值可空,避免运行时异常
内容的提问来源于stack exchange,提问作者Andrii Havrylyak
相关产品推荐
相关产品推荐

