【问题标题】:Unhandled Exception: type 'String' is not a subtype of type 'int' of 'index' in "flutter"未处理的异常:类型 \'String\' 不是 \"flutter\" 中 \'index\' 的 \'int\' 类型的子类型
【发布时间】:2022-09-22 21:53:32
【问题描述】:

我将我的 json 转换为类,并想使用 get.dio() 方法。我收到错误“未处理的异常:类型 \'String\' 不是 \'index\' 类型 \'int\' 的子类型。我该如何解决?

那是我的课。

 class Word {
Word({
String? kelime,
String? anlami,
}) {
_kelime = kelime;
_anlami = anlami;
}

Word.fromJson(dynamic json) {
_kelime = json[\'kelime\'];
_anlami = json[\'anlami\'];
}
String? _kelime;
String? _anlami;
Word copyWith({
  String? kelime,
  String? anlami,
 }) =>
  Word(
    kelime: kelime ?? _kelime,
    anlami: anlami ?? _anlami,
  );
String? get kelime => _kelime;
String? get anlami => _anlami;

Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map[\'kelime\'] = _kelime;
map[\'anlami\'] = _anlami;
return map;

} }

这些是我的获取代码。

Word wordData = Word();

@override
void initState() {
 super.initState();
    getWordData();
    setState(() {});
 });
}

getWordData() async {
  var dio = Dio();
  var responce = await dio.get(\"https://raw.githubusercontent.com/saturu/turkish_dictionary/main/4_letter.json\");
  wordData = Word.fromJson(responce.data);
  print(wordData);
}
  • 错误显示在哪里?并分享您的小部件文件
  • 不再是我的主页的小部件,它实际上是一个有状态的小部件, wordData = Word.fromJson(responce.data);犯了错误:(
  • 是的。错误就在这里, wordData = Word.fromJson(responce.data);这是您从 api 获得的地图列表。 List&lt;Word&gt; wordData = []; wordData = (responce.data as List).map((val)=&gt; Word.fromJson(val)); //改变

标签: json flutter dio


【解决方案1】:

api 返回一个单词列表,List。你可以修改代码如下

List<Word> wordData = [];

@override
void initState() {
 super.initState();
    getWordData();
    setState(() {});
 });
}

getWordData() async {
  final dio = Dio();
  final response = await dio.get("https://raw.githubusercontent.com/saturu/turkish_dictionary/main/4_letter.json");
  wordData = List.from(response).map((word)=> Word.fromJson(word)).toList();
}

【讨论】:

    【解决方案2】:

    URL 正在返回地图列表,您正尝试将列表分配给模型 Word

    我认为您需要将小部件更新为

    List<Word> wordData = [];
    
    @override
    void initState() {
     super.initState();
        getWordData();
        setState(() {});
     });
    }
    
    getWordData() async {
      var dio = Dio();
      var responce = await dio.get("https://raw.githubusercontent.com/saturu/turkish_dictionary/main/4_letter.json");
      wordData = (responce.data as List).map((e)=> Word.fromJson(e)).toList();
      print(wordData);
    }

    【讨论】:

      猜你喜欢
      • 2020-04-19
      • 1970-01-01
      • 2021-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-19
      相关资源
      最近更新 更多