Flutter聊天助手报_TypeError:'String'非'index'的'int'子类型求助
Flutter集成ChatGPT API的错误修复
1. 类型错误(_TypeError: type 'String' is not a subtype of type 'int' of 'index')
你的API响应解析逻辑完全错误,ChatGPT的/v1/chat/completions返回结构里,model是字符串(比如"gpt-3.5-turbo-0613"),你用["model"][0]去索引字符串,自然会触发类型错误。正确的解析路径应该是从choices数组里取第一条结果的message.content。
修改ApiService里的解析代码:
if (response.statusCode == 200) { final Map<String, dynamic> responseData = jsonDecode(response.body); // 正确的解析路径 final String content = responseData["choices"][0]["message"]["content"]; // 注意:trim()返回新字符串,需要重新赋值后返回 return content.trim(); }
原代码里content.trim();没有赋值,属于无效操作,必须修正为返回处理后的字符串。
2. API未被调用的问题
检查以下几点:
- 确认
API_KEY常量文件里已经替换成新的API密钥,没有拼写错误,包括Bearer后面的空格不能省略。 - 检查Flutter项目的网络权限:Android端在
android/app/src/main/AndroidManifest.xml里添加<uses-permission android:name="android.permission.INTERNET"/>;iOS端默认允许HTTPS请求,无需额外配置,但若之前修改过Info.plist需确认未禁用网络。 - 验证新API密钥的权限:登录OpenAI后台,确认密钥已启用、有足够额度,且允许调用
gpt-3.5-turbo模型。 - 排查请求拦截:检查设备代理设置、防火墙或测试环境网络限制,确认请求能正常发送到OpenAI服务器。
3. 消息发送代码的小优化
调用ApiService.sendMessage时,方法参数是required String prompt,但你传入的是_messageController.text,而sendTextMessage本身接收String prompt参数,存在不一致,建议统一用传入的prompt:
final response = await ApiService.sendMessage(prompt: prompt);
内容的提问来源于stack exchange,提问作者Furqan Saify
相关产品推荐
相关产品推荐

