Flutter中调用异步函数报类型不匹配错误该如何解决?
错误原因
getCompletionOpenAi是异步函数,默认返回Future<String>类型,而ChatMessage的messageContent参数要求传入同步的String类型值,直接把未等待结果的异步函数返回值传入,就会触发类型不匹配报错。
之前在异步函数内部加await没有生效,是因为await的作用域不对:只有在调用getCompletionOpenAi的位置加await,才能拿到异步返回的实际字符串值,仅在函数内部写await不会自动把Future类型转成同步String。
修复步骤
- 把调用
getCompletionOpenAi、添加消息的逻辑放在带async标记的函数中 - 在调用
getCompletionOpenAi时加await关键字,拿到实际的String类型返回值后,再传入ChatMessage构造函数
修复后的代码示例:
// 外层函数必须加async关键字 void handleSendMessage() async { // 调用异步函数时加await,拿到String类型的结果 final String aiReplyContent = await getCompletionOpenAi(myController.text); // 再把拿到的字符串传入参数 messages.add(ChatMessage( messageContent: aiReplyContent, messageType: "receiver", )); // 如果是StatefulWidget场景,更新UI需要调用setState setState(() {}); }
注意事项
- 不要在build这类同步执行的渲染逻辑里直接await异步函数,会阻塞UI渲染
- 如果需要在UI加载时就展示异步返回的内容,可以使用
FutureBuilder组件承接Future类型的返回值做分状态渲染,消息列表追加场景优先使用上面的方案即可
内容的提问来源于stack exchange,提问作者John Jacob
相关产品推荐
相关产品推荐

