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

Flutter GoRouter路径参数异常:API数据传递后显示Null

问题排查与解决方案

核心问题分析

  1. 重定向逻辑错误:你的重定向代码中,手动拼接/note/$title/$tags/$summary路径时,state.pathParameters在重定向触发时并未携带正确参数,导致新路径中的参数被替换为null。而硬编码时参数直接传入GoRouter,未经过重定向的错误拼接,因此功能正常。
  2. 路径参数未编码:API返回的数据可能包含空格、特殊字符等,直接作为路径参数传递会触发GoRouter解析异常,导致参数丢失。硬编码的字符串无特殊字符,所以不受影响。

解决方案

1. 修复重定向逻辑

删除手动拼接路径的代码,重定向只需处理权限校验,无需重新构造路径:

else if (isGoingToNote && auth) {
  // 已通过权限验证,直接允许访问目标路由
  return null;
} else if (isGoingToNote && !auth) {
  // 未登录则跳转到登录页
  return '/login';
}

注:GoRouter的重定向返回null表示允许当前路由跳转,无需修改路径。

2. 对路径参数进行URI编码/解码

传递参数前编码,接收时解码,避免特殊字符干扰:

在summarize_controller中传递参数时编码:

if (response.statusCode == 200) {
  print("Title of note: ${titleController.text}");
  print("Tags of note: ${tagsController.text}");
  print("Summary of note: ${summaryController.text}");
  
  // 对参数进行URI编码
  final encodedTitle = Uri.encodeComponent(titleController.text);
  final encodedTags = Uri.encodeComponent(tagsController.text);
  final encodedSummary = Uri.encodeComponent(summaryController.text);
  
  GoRouter.of(context).goNamed('note', pathParameters: {
    'title': encodedTitle,
    'tags': encodedTags,
    'summary': encodedSummary,
  });
}

在note_screen的路由builder中解码:

GoRoute(
  path: '/note/:title/:tags/:summary',
  name: 'note',
  builder: (context, state) {
    var pathParams = state.pathParameters;
    print("After passing: $pathParams");
    // 解码参数
    var title = Uri.decodeComponent(pathParams['title']!);
    var tags = Uri.decodeComponent(pathParams['tags']!);
    var summary = Uri.decodeComponent(pathParams['summary']!);
    return SafeArea(
      child: NoteScreen(
        title: title,
        tagString: tags,
        summary: summary,
      ),
    );
  },
),

3. 额外验证:确认API返回值非空

虽然已确认API返回有效数据,仍需添加空值判断避免意外:

titleController.text = responseBody['title'] ?? '默认标题';
tagsController.text = (responseBody['tags'] as List<dynamic>?)?.join(', ') ?? '默认标签';
summaryController.text = responseBody['summary'] ?? '默认摘要';

内容的提问来源于stack exchange,提问作者Muzammil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 18:43:11