You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Dart中获取会话与消息API请求的问题求助

Flutter API对接问题修复

问题1:ConversationPage中globalId和accessToken未定义

原因

UserService.getTabAccessCode需要传入globalId和accessToken参数,但当前代码中这两个变量未初始化也没有来源。accessToken一般是用户登录后的凭证,globalId可通过调用UserService.fetchUserInfo从用户信息接口获取。

修复方案

  1. 让ConversationPage接收外部传入的accessToken(比如从登录页通过路由传递);
  2. 在初始化方法中先调用fetchUserInfo拿到globalId,再调用getTabAccessCode;
  3. 注意不要在方法内重新定义局部变量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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 00:40:11