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

Flutter中向GET请求传递参数报错,求解决方法

Flutter GET请求传参及解析问题修复

参数拼接优化

手动拼接URL参数容易出现编码问题,建议用更规范的方式生成Uri:

// 替换原有get请求的Uri生成代码
Response response = await get(
  Uri.parse(endpoint).replace(queryParameters: {'username': username})
);

这种方式会自动处理参数的URL编码,避免特殊字符导致的请求错误。

响应解析错误(核心问题)

你当前的解析逻辑把接口返回的JSON包在了额外的数组里:

final List result = [jsonDecode(response.body)];

如果后端返回的本身是数组格式的响应(比如[{"mood":"开心",...}, {...}]),这样处理后会得到一个嵌套数组[[...]],导致JournalResponseModel.fromJson无法正确解析(因为它期望单个对象的Map,而非数组)。

修复后的解析逻辑:

if (response.statusCode == 200) {
  final List result = jsonDecode(response.body);
  print(response.body);
  return result.map((e) => JournalResponseModel.fromJson(e)).toList();
}

如果后端返回的是带包裹的对象(比如{"list": [...], "code": 200}),则需要先提取对应的数组字段:

final Map<String, dynamic> resMap = jsonDecode(response.body);
final List result = resMap['list']; // 替换成实际的字段名

FutureBuilder重复请求问题

直接在future参数中调用GetJournalService().getArticles('jack'),会导致Widget每次重建时都发起新请求,造成资源浪费和异常。

修复方式:将Future对象提前初始化并存储:

// 在State类中定义变量
late Future<List<JournalResponseModel>> _journalFuture;

@override
void initState() {
  super.initState();
  // 在initState中初始化请求
  _journalFuture = GetJournalService().getArticles('jack');
}

// 使用存储的Future对象
FutureBuilder<List<JournalResponseModel>>(
  future: _journalFuture,
  builder: (context, snapshot) {
    if (snapshot.hasData) {
      return ListView.builder(
        shrinkWrap: true,
        itemCount: snapshot.data!.length,
        itemBuilder: (context, index) {
          final journal = snapshot.data![index];
          return EntryWidget(
            backgroundColor: AppColors.blue,
            icon: Icons.remove,
            mood: journal.mood!,
            date: journal.createdAt!,
          );
        },
      );
    } else if (snapshot.hasError) {
      return Text('${snapshot.error}');
    }
    return CircularProgressIndicator();
  },
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:27:50