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

Flutter调用古兰经API报错:_InternalLinkedHashMap无法转为Iterable

问题排查:古兰经API数据解析的TypeError错误

问题概述

开发一款支持古兰经与圣经阅读的APP,从Firebase拉取章节列表,通过API获取章节内容。圣经功能正常,但获取古兰经API返回的verses数据时,触发错误:

_TypeError (type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Iterable<dynamic>')

错误原因

从API返回结构可以看到,verses是键值对格式的Map(键为经文序号1、2...),而代码中直接用for (var item in map["verses"])尝试遍历Map。在Dart里,Map本身不属于Iterable类型,不能直接用这种方式循环,因此抛出类型不匹配的错误。

修复方案

需要将Map类型的verses转换为可遍历的List,同时为了保证经文顺序正确,建议先对Map的键(经文序号)进行排序,再按顺序提取对应的数据。

代码修改示例

修改getQuran方法中的数据解析部分:

Future<List<Map<String, dynamic>>> getQuran(String surah) async {
    var uri = Uri.https(
      'ajith-holy-bible.p.rapidapi.com',
      '/${surah}',
    );

    var response = await http.get(uri, headers: {
      'X-RapidAPI-Key': 'd88d0a8158mshb8b539da6b34179p137959jsn31258093d5c2',
      'X-RapidAPI-Host': 'al-quran1.p.rapidapi.com'
    });
    print(response.statusCode);
    print(response.body);
    Map<String, dynamic> map = jsonDecode(response.body);

    List<Map<String, dynamic>> myData = [];
    // 提取verses的Map结构
    Map<String, dynamic> versesMap = map["verses"];
    // 将键转换为整数并排序,确保经文按顺序排列
    List<int> sortedVerseNumbers = versesMap.keys
        .map((key) => int.parse(key))
        .toList()
      ..sort();
    // 按排序后的序号提取经文数据
    for (int number in sortedVerseNumbers) {
      myData.add(versesMap[number.toString()]);
    }

    return myData;
  }

额外优化点(解决潜在滚动冲突)

在SurahReading页面的嵌套ListView.builder中,添加以下属性避免内外ListView的滚动冲突:

return Container(
  child: ListView.builder(
    shrinkWrap: true, // 适配父容器高度
    physics: NeverScrollableScrollPhysics(), // 禁用自身滚动,由外层SingleChildScrollView控制
    itemCount: quran.length,
    itemBuilder: (context, index) {
      return Row(
        children: [
          Center(
            child: Text(
              quran[index]["content"],
              style: TextStyle(fontSize: 15),
            ),
          ),
          Center(
            child: Text(
              quran[index]["translation_eng"],
              style: TextStyle(fontSize: 15),
            ),
          ),
        ],
      );
    },
  ),
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:20:34