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

Flutter开发中HTTP请求结果无法赋值给自定义模型列表问题求解

报错原因
  1. 模型构造函数命名错误:类名是AstronomyModel,但构造函数写为AstronomyPicModel,属于基础语法错误。
  2. 解析逻辑与接口返回结构不匹配:你当前的astronomyModelFromJson方法只能解析单个AstronomyModel对象,但传入count=20参数后接口返回的是包含20个对象的JSON数组,类型不匹配导致赋值报错。
  3. 额外问题:模型中描述字段名写错,常见天文图片接口的描述字段为explanation不是description,会导致解析后描述字段为空;URL拼接最后会多出冗余的&符号,可能触发接口参数校验报错。
修复方案

1. 修正数据模型与解析逻辑

import 'dart:convert';

// 新增JSON数组解析方法
List<AstronomyModel> astronomyModelListFromJson(String str) => 
    List<AstronomyModel>.from(json.decode(str).map((item) => AstronomyModel.fromJson(item)));

class AstronomyModel {
  // 修正构造函数名称与类名一致
  AstronomyModel({
    this.date,
    this.hdurl,
    this.description,
    this.mediaType,
    this.thumbnailUrl,
    this.title,
    this.url,
  });

  DateTime? date;
  String? hdurl;
  String? description;
  String? mediaType;
  String? thumbnailUrl;
  String? title;
  String? url;

  factory AstronomyModel.fromJson(Map<String, dynamic> json) =>
      AstronomyModel(
        date: DateTime.parse(json["date"]),
        hdurl: json["hdurl"],
        // 修正字段名匹配接口返回
        description: json["explanation"],
        mediaType: json["media_type"],
        thumbnailUrl: json["thumbnail_url"],
        title: json["title"],
        url: json["url"],
      );
}

2. 修正列表请求逻辑的解析调用

class AstronomyService {
  Future<List<AstronomyModel>?> getAstronomy() async {
    try {
      final response = await ApiService().fetchData({
        "thumbs": true.toString(),
        "count": "20",
      });

      if (response.statusCode == 200) {
        // 调用数组解析方法返回列表
        final result = astronomyModelListFromJson(response.body);
        return result;
      }
      return null;
    } catch (e) {
      rethrow;
    }
  }
}

3. (可选)优化URL拼接逻辑

避免手动拼接参数出现冗余&符号:

String combineUrl({Map<String, String>? urlParams}) {
  final uri = Uri.parse("$baseUrl/api/");
  if (urlParams == null || urlParams.isEmpty) return uri.toString();
  return uri.replace(queryParameters: urlParams).toString();
}

内容的提问来源于stack exchange,提问作者P-J

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:27:01