参数类型“List<Categories>”不能分配给参数类型“Iterable<Categories>”
Posted
技术标签:
【中文标题】参数类型“List<Categories>”不能分配给参数类型“Iterable<Categories>”【英文标题】:The argument type 'List<Categories>' can't be assigned to the parameter type 'Iterable<Categories>' 【发布时间】:2021-07-25 17:55:20 【问题描述】:这是我的模型类类别
List<Categories> categoriesFromJson(String str) => List<Categories>.from(json.decode(str).map((x) => Categories.fromJson(x)));
String categoriesToJson(List<Categories> data) => json.encode(List<dynamic>.from(data.map((x) => x.toJson())));
class Categories
Categories(
this.id,
this.name,
this.parentId,
this.slug,
this.position,
this.status,
);
int id;
String name;
int parentId;
String slug;
int position;
int status;
factory Categories.fromJson(Map<String, dynamic> json) => Categories(
id: json["id"],
name: json["name"],
parentId: json["parent_id"],
slug: json["slug"],
position: json["position"],
status: json["status"],
);
Map<String, dynamic> toJson() =>
"id": id,
"name": name,
"parent_id": parentId,
"slug": slug,
"position": position,
"status": status,
;
我的 apiServices
static Future<List<Categories>> fetchCategories() async
String url = "/categories/all";
var response = await http.get(BASE_URL + url);
if(response.statusCode == 200)
return categoriesFromJson(response.body).toList();
else
return null;
我的控制器中的api调用函数
var categoryNames = <Categories>[].obs;
void fetchCategories() async
try
isLoading(true);
var res = await ApiServices.fetchCategories();
if(res !=null)
categoryNames.addAll(res);
finally
isLoading(false);
在控制器中,而 categoryNames.addAll(res) 中的 res 用红色弯曲线加下划线,并显示上述错误消息。当我对 apiService 的 categoryNews 和 fetchCategories() 使用相同的类型时,为什么会出现此错误。任何帮助将不胜感激。
【问题讨论】:
我尝试更改 var categoryNames =categoriesFromJson
中的.map()
之后添加一个.toList()
,因为map 返回一个Iterable。
我在从 api 调用返回值时转换为 List。另外,我尝试在模型类的 categoriesFromJson 方法中的 .map() 之后添加 .toList() ,但是红色的弯曲线不会走。
我刚刚尝试过,但没有帮助......我也在 app.quicktype.io 的帮助下生成了模型类
你试过了吗? Categories.fromJson(json.decode(str))
。我又看了一下代码,不需要List.from
和.map()
。
【参考方案1】:
尝试像这样明确定义类型
List<Categories> categoryNames = [];
还要确保从您的.map()
返回一个列表并将.toList()
添加到末尾
【讨论】:
检查.map()
让它像List<Categories>.from(json.decode(str).map((x) => Categories.fromJson(x)).toList())
另外,我想通知我在app.quicktype.io的帮助下生成了模型类
打印res
?它是什么类型的?
类型为 List以上是关于参数类型“List<Categories>”不能分配给参数类型“Iterable<Categories>”的主要内容,如果未能解决你的问题,请参考以下文章
获取错误“未知”类型的参数不能分配给“错误”类型的参数 |空值'
参数类型“Type”不能分配给参数类型“FirebaseUser”