Flutter Json 未处理异常:类型“_InternalLinkedHashMap<String, dynamic>”不是“Iterable<dynamic>”类型的子类
Posted
技术标签:
【中文标题】Flutter Json 未处理异常:类型“_InternalLinkedHashMap<String, dynamic>”不是“Iterable<dynamic>”类型的子类型【英文标题】:Flutter Json Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Iterable<dynamic>' 【发布时间】:2021-08-01 07:17:39 【问题描述】:类类别
错误:未处理的异常:类型“_InternalLinkedHashMap
class Category
int id;
String categoryName;
String seoUrl;
Category(this.id,this.categoryName,this.seoUrl);
Category.fromJson(Map json)
id = json["id"];
categoryName = json["categoryName"];
seoUrl = json["seoUrl"];
Map toJson()
return
"id": id,
"categoryName": categoryName,
"seoUrl": seoUrl
;
类主屏幕
错误:未处理的异常:类型“_InternalLinkedHashMap
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http_demo/data/api/category_api.dart';
import 'package:http_demo/models/category.dart';
class MainScreen extends StatefulWidget
@override
State<StatefulWidget> createState()
return MainScreenState();
class MainScreenState extends State
List<Category> categories = List<Category>();
List<Widget> categoryWidgets = List<Widget>();
@override
void initState()
getCategoriesFromApi();
super.initState();
@override
Widget build(BuildContext context)
return Scaffold(
appBar: AppBar(
title: Text(
"Alışveriş Sistemi",
style: TextStyle(color: Colors.white),
),
backgroundColor: Colors.blueGrey,
centerTitle: true,
),
body: Padding(
padding: EdgeInsets.all(10.0),
child: Column(
children: <Widget>[
SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Row(
children: categoryWidgets,
),
)
],
),
),
);
void getCategoriesFromApi()
CategoryApi.getCategories().then((response)
setState(()
Iterable list = json.decode(response.body);
//categories = list.map((category) => Category.fromJson(category)).toList();
this.categories = List<Category>.from(list.map((model)=> Category.fromJson(model)));
getCategoryWidgets();
);
);
List<Widget> getCategoryWidgets()
for (int i = 0; i < categories.length; i++)
categoryWidgets.add(getCategoryWidget(categories[i]));
return categoryWidgets;
Widget getCategoryWidget(Category category)
return FlatButton(
onPressed: null,
child: Text(
category.categoryName,
style: TextStyle(color: Colors.blueGrey),
),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(15.0),
side: BorderSide(color: Colors.lightGreenAccent),
),
);
Error: Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Iterable<dynamic>'
错误:未处理的异常:类型“_InternalLinkedHashMap
【问题讨论】:
【参考方案1】:请检查 JSON 转换后的响应。
void getCategoriesFromApi()
CategoryApi.getCategories().then((response)
setState(()
var list = json.decode(response.body);
//categories = list.map((category) => Category.fromJson(category)).toList();
if (list is List)
this.categories = list.map((e) => Category.fromJson(e)).toList();
getCategoryWidgets();
else
print('response is not list');
);
);
【讨论】:
可以分享一下response.body 吗? 我得到了文本“response is not list” import 'package:http/http.dart' as http;类 CategoryApi 静态未来 getCategories() return http.get("10.0.2.2:3000/category"); 是的。您可以检查响应。打印(response.body); 类类别 int id;字符串类别名称;字符串 seoUrl;类别(this.id,this.categoryName,this.seoUrl); Category.fromJson(Map json) id = json["id"];类别名称 = json["类别名称"]; seoUrl = json["seoUrl"]; Map toJson() return "id": id, "categoryName": categoryName, "seoUrl": seoUrl ; 我正在使用 bluestack。以上是关于Flutter Json 未处理异常:类型“_InternalLinkedHashMap<String, dynamic>”不是“Iterable<dynamic>”类型的子类的主要内容,如果未能解决你的问题,请参考以下文章
Flutter 中的错误:未处理的异常:“Null”类型不是“String”类型的子类型
Dart 未处理的异常:类型 'List<dynamic>' 不是类型 'Family' 的子类型,- Flutter
未处理的异常:类型“int”不是 Flutter 应用程序中“String”类型的子类型
Flutter [错误:flutter/lib/ui/ui_dart_state.cc(177)] 未处理的异常:类型“int”不是类型转换中“String”类型的子类型