Flutter Dart中获取会话与消息API请求的问题求助
Flutter API对接问题修复
问题1:ConversationPage中globalId和accessToken未定义
原因
UserService.getTabAccessCode需要传入globalId和accessToken参数,但当前代码中这两个变量未初始化也没有来源。accessToken一般是用户登录后的凭证,globalId可通过调用UserService.fetchUserInfo从用户信息接口获取。
修复方案
- 让
ConversationPage接收外部传入的accessToken(比如从登录页通过路由传递); - 在初始化方法中先调用
fetchUserInfo拿到globalId,再调用getTabAccessCode; - 注意不要在方法内重新定义局部变量
pid和tac,直接给类成员变量赋值。
修正后的conversation_page.dart关键代码:
class ConversationPage extends StatefulWidget { // 新增:接收accessToken参数 final String accessToken; const ConversationPage({required this.accessToken, super.key}); @override _ConversationPageState createState() => _ConversationPageState(); } class _ConversationPageState extends State<ConversationPage> { List<Map<String, dynamic>> conversations = []; String pid = ''; String tac = ''; @override void initState() { super.initState(); initConversations(); } Future<void> initConversations() async { // 先调用用户信息接口获取globalId var userInfo = await UserService.fetchUserInfo(widget.accessToken); String globalId = userInfo['globalId']; // 字段名根据实际接口返回调整 // 调用getTabAccessCode接口 var accessInfo = await UserService.getTabAccessCode(globalId, widget.accessToken); // 给类成员变量赋值 pid = accessInfo["pid"]; tac = accessInfo["tabAccessCode"]; await fetchConversations(pid, tac); } // 其余代码保持不变 }
问题2:MessagePage中消息API参数引用错误
原因
在fetchMessages方法中直接使用$pid和$tac,但这两个变量是MessagePage的widget成员变量,必须通过widget.pid和widget.tac访问。
修复方案
修改fetchMessages中的URL拼接逻辑,替换为正确的成员变量引用方式。
修正后的messages_page.dart的fetchMessages方法:
Future<void> fetchMessages() async { final response = await http.get(Uri.parse( 'https://example.com/doc/getMessages?user_type=doctor&function=messages&conversation_id=${widget.conversationId}&pid=${widget.pid}&tac=${widget.tac}&view_as=doctor', )); // 其余代码保持不变 }
额外提示
- 确认
fetchUserInfo返回的用户信息中确实包含globalId字段,若字段名不符需对应调整; - 建议在异步方法中添加
try-catch捕获异常,避免接口调用失败导致页面崩溃; - 如果
accessToken需要全局使用,可采用Provider、Riverpod等状态管理工具,避免频繁通过路由传参。
内容的提问来源于stack exchange,提问作者nxmo
相关产品推荐
相关产品推荐

