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

Flutter调用Yummly2 API获取preparationSteps返回null求助

解决Flutter调用Yummly2 API获取preparationSteps为null的问题

排查方向

  1. API字段结构不匹配
    Yummly2 API的preparationSteps可能并非直接返回String类型,而是List数组;部分食谱可能无步骤数据,直接返回null;甚至字段名可能存在差异(如文档标注为instructions或嵌套在其他对象中)。

  2. 类型转换与空值未处理
    原代码直接强转json['preparationSteps'] as String,若字段不存在、类型不符,会直接返回null或抛出异常,未做任何兜底处理。

解决方案

1. 先确认API返回结构

在API请求成功后,打印原始JSON数据(如print(jsonDecode(response.body))),明确preparationSteps的实际类型和存在性,同时对照RapidAPI官方文档确认字段名是否正确。

2. 修改Recipe模型类

针对常见的数组类型步骤和空值情况,调整fromJson工厂方法,增加类型判断和空值兜底:

class Recipe {
  final String name;
  final String images;
  final double rating;
  final String totalTime;
  final String preparationSteps;

  Recipe({
    required this.name,
    required this.images,
    required this.rating,
    required this.totalTime,
    required this.preparationSteps,
  });

  factory Recipe.fromJson(dynamic json) {
    // 处理preparationSteps的多种可能情况
    dynamic stepsData = json['preparationSteps'];
    String steps = '暂无烹饪步骤';

    if (stepsData is List) {
      // 若为数组,拼接为换行分隔的字符串
      steps = stepsData.join('\n');
    } else if (stepsData is String) {
      steps = stepsData;
    }

    return Recipe(
      name: json['name'] as String? ?? '未知食谱名称',
      images: json['images']?[0]?['hostedLargeUrl'] as String? ?? '',
      rating: (json['rating'] as num?)?.toDouble() ?? 0.0,
      totalTime: json['totalTime'] as String? ?? '未知时长',
      preparationSteps: steps,
    );
  }

  static List<Recipe> recipesFromSnapshot(List snapshot) {
    return snapshot.map((data) => Recipe.fromJson(data)).toList();
  }

  @override
  String toString() {
    return 'Recipe {name: $name, image: $images, rating: $rating, totalTime: $totalTime, preparationSteps: $preparationSteps}';
  }
}

3. 额外优化点

  • 若API返回的步骤是嵌套对象(如每个步骤含text字段),需进一步解析数组中的对象,例如:
    if (stepsData is List) {
      steps = stepsData.map((step) => step['text'] as String).join('\n');
    }
    
  • 去掉不必要的dart:html导入(若不是Web平台开发),替换为dart:convert用于JSON解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:36:24