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

Flutter新手求助:如何处理含字符串与数组的单个对象响应?

Flutter 单个API响应对象的处理方案

1. 定义实体类(Entity)

和处理数组时的思路一致,先定义与后端响应字段严格对应的实体类,确保字段名、类型完全匹配:

class CameraEntity {
  final String camera;
  final List<String> capacity;

  CameraEntity({
    required this.camera,
    required this.capacity,
  });

  // 从JSON映射生成实体
  factory CameraEntity.fromJson(Map<String, dynamic> json) {
    return CameraEntity(
      camera: json['camera'] as String,
      capacity: List<String>.from(json['capacity'] as List),
    );
  }
}

2. 定义模型类(Model)

如果需要在业务层做字段转换或添加逻辑,可以再封装一层Model,和数组处理的分层逻辑保持一致:

class CameraModel {
  final String cameraSpec; // 重命名字段适配业务
  final List<String> storageOptions;

  CameraModel({
    required this.cameraSpec,
    required this.storageOptions,
  });

  // 从Entity转换为Model
  factory CameraModel.fromEntity(CameraEntity entity) {
    return CameraModel(
      cameraSpec: entity.camera,
      storageOptions: entity.capacity,
    );
  }

  // 也可以直接从JSON生成Model(跳过Entity的话用这个)
  factory CameraModel.fromJson(Map<String, dynamic> json) {
    return CameraModel(
      cameraSpec: json['camera'] as String,
      storageOptions: List<String>.from(json['capacity'] as List),
    );
  }
}

3. 请求与解析代码

发起HTTP请求后,直接将JSON字符串解析为单个Map,再转成对应的实体/模型即可(和数组解析的区别是不需要遍历List):

import 'dart:convert';
import 'package:http/http.dart' as http;

Future<CameraModel> fetchCameraSpecs() async {
  final response = await http.get(Uri.parse('你的API接口地址'));

  if (response.statusCode == 200) {
    // 将响应体解析为单个Map对象
    final jsonMap = jsonDecode(response.body) as Map<String, dynamic>;
    // 转换为Model
    return CameraModel.fromJson(jsonMap);
  } else {
    throw Exception('请求失败,状态码:${response.statusCode}');
  }
}

关键注意点

  • 单个对象解析不需要处理List遍历,直接操作JSON对应的Map即可
  • 对于capacity这类数组字段,必须用List<String>.from()做类型转换,避免运行时类型错误
  • 如果业务逻辑简单,也可以合并Entity和Model为一个类,直接用fromJson解析

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:00:54