Flutter中捕获异常仍报错?catchError返回值类型问题咨询
问题原因与解决方法
这个报错的核心原因是:getName()返回的是Future<String>,调用then后生成的新Future依然是Future<String>类型。而catchError作为Future链的一部分,它的错误处理函数必须返回一个与原Future类型一致的值(也就是String),或者重新抛出异常。你的catchError里只执行了打印操作,没有返回符合要求的值,所以触发了参数错误。
解决方法1:返回符合类型的默认值
在catchError中返回一个String类型的默认值,让Future链的类型保持一致:
onPressed: () { getName().then((value){ print(value); print('The Last'); throw('000'); }).catchError((error){ print('error (${error.toString()}) has been caught'); return '默认返回值'; // 返回String类型的值 }); }
解决方法2:改用async/await写法(更推荐)
用try/catch替代Future链式调用,这种写法不需要纠结Future的类型匹配,异常处理更直观:
onPressed: () async { try { final value = await getName(); print(value); print('The Last'); throw('000'); } catch (error) { print('error (${error.toString()}) has been caught'); } }
异步函数代码保持不变:
Future<String> getName() async { return 'Basel Elazaly'; }
内容的提问来源于stack exchange,提问作者basel elazaly
相关产品推荐
相关产品推荐

