这是我的json
{
"data": [
{
"id": 2,
"createdAt": "2023-07-14T13:04:00.394Z",
"updatedAt": "2023-07-14T13:04:03.572Z",
"publishedAt": "2023-07-14T13:04:03.564Z",
"locale": "en",
"Title": "AWS Job Ready course",
"Description": "Amazon Web Services, Inc. is a subsidiary of Amazon that provides on-demand cloud computing platforms and APIs to individuals, companies, and governments, on a metered, pay-as-you-go basis. Oftentimes, clients will use this in combination with autoscaling.",
"Order": 1,
"CoverPic": {
"id": 2,
"name": "awscoursebanner.jpg",
"alternativeText": null,
"caption": null,
"width": 650,
"height": 345,
"formats": {
"small": {
"ext": ".jpg",
"url": "/uploads/small_awscoursebanner_fbe397f8d5.jpg",
"hash": "small_awscoursebanner_fbe397f8d5",
"mime": "image/jpeg",
"name": "small_awscoursebanner.jpg",
"path": null,
"size": 15.2,
"width": 500,
"height": 265
},
"thumbnail": {
"ext": ".jpg",
"url": "/uploads/thumbnail_awscoursebanner_fbe397f8d5.jpg",
"hash": "thumbnail_awscoursebanner_fbe397f8d5",
"mime": "image/jpeg",
"name": "thumbnail_awscoursebanner.jpg",
"path": null,
"size": 5.15,
"width": 245,
"height": 130
}
},
"hash": "awscoursebanner_fbe397f8d5",
"ext": ".jpg",
"mime": "image/jpeg",
"size": 22.33,
"url": "/uploads/awscoursebanner_fbe397f8d5.jpg",
"previewUrl": null,
"provider": "local",
"provider_metadata": null,
"createdAt": "2023-07-14T13:03:24.800Z",
"updatedAt": "2023-07-14T13:03:24.800Z"
}
}
],
"meta": {
"pagination": {
"page": 1,
"pageSize": 25,
"pageCount": 1,
"total": 1
}
}
}
字符串
下面是我从JSON到Dart站点生成的模型
class CoursesModel {
List<Data>? data;
Meta? meta;
CoursesModel({this.data, this.meta});
CoursesModel.fromJson(Map<String, dynamic> json) {
if (json['data'] != null) {
data = <Data>[];
json['data'].forEach((v) {
data!.add(new Data.fromJson(v));
});
}
meta = json['meta'] != null ? new Meta.fromJson(json['meta']) : null;
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.data != null) {
data['data'] = this.data!.map((v) => v.toJson()).toList();
}
if (this.meta != null) {
data['meta'] = this.meta!.toJson();
}
return data;
}
}
class Data {
int? id;
String? createdAt;
String? updatedAt;
String? publishedAt;
String? locale;
String? title;
String? description;
int? order;
CoverPic? coverPic;
Data(
{this.id,
this.createdAt,
this.updatedAt,
this.publishedAt,
this.locale,
this.title,
this.description,
this.order,
this.coverPic});
Data.fromJson(Map<String, dynamic> json) {
id = json['id'];
createdAt = json['createdAt'];
updatedAt = json['updatedAt'];
publishedAt = json['publishedAt'];
locale = json['locale'];
title = json['Title'];
description = json['Description'];
order = json['Order'];
coverPic = json['CoverPic'] != null
? new CoverPic.fromJson(json['CoverPic'])
: null;
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['createdAt'] = this.createdAt;
data['updatedAt'] = this.updatedAt;
data['publishedAt'] = this.publishedAt;
data['locale'] = this.locale;
data['Title'] = this.title;
data['Description'] = this.description;
data['Order'] = this.order;
if (this.coverPic != null) {
data['CoverPic'] = this.coverPic!.toJson();
}
return data;
}
}
class CoverPic {
int? id;
String? name;
Null? alternativeText;
Null? caption;
int? width;
int? height;
Formats? formats;
String? hash;
String? ext;
String? mime;
double? size;
String? url;
Null? previewUrl;
String? provider;
Null? providerMetadata;
String? createdAt;
String? updatedAt;
CoverPic(
{this.id,
this.name,
this.alternativeText,
this.caption,
this.width,
this.height,
this.formats,
this.hash,
this.ext,
this.mime,
this.size,
this.url,
this.previewUrl,
this.provider,
this.providerMetadata,
this.createdAt,
this.updatedAt});
CoverPic.fromJson(Map<String, dynamic> json) {
id = json['id'];
name = json['name'];
alternativeText = json['alternativeText'];
caption = json['caption'];
width = json['width'];
height = json['height'];
formats =
json['formats'] != null ? new Formats.fromJson(json['formats']) : null;
hash = json['hash'];
ext = json['ext'];
mime = json['mime'];
size = json['size'];
url = json['url'];
previewUrl = json['previewUrl'];
provider = json['provider'];
providerMetadata = json['provider_metadata'];
createdAt = json['createdAt'];
updatedAt = json['updatedAt'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
data['alternativeText'] = this.alternativeText;
data['caption'] = this.caption;
data['width'] = this.width;
data['height'] = this.height;
if (this.formats != null) {
data['formats'] = this.formats!.toJson();
}
data['hash'] = this.hash;
data['ext'] = this.ext;
data['mime'] = this.mime;
data['size'] = this.size;
data['url'] = this.url;
data['previewUrl'] = this.previewUrl;
data['provider'] = this.provider;
data['provider_metadata'] = this.providerMetadata;
data['createdAt'] = this.createdAt;
data['updatedAt'] = this.updatedAt;
return data;
}
}
class Formats {
Small? small;
Small? thumbnail;
Formats({this.small, this.thumbnail});
Formats.fromJson(Map<String, dynamic> json) {
small = json['small'] != null ? new Small.fromJson(json['small']) : null;
thumbnail = json['thumbnail'] != null
? new Small.fromJson(json['thumbnail'])
: null;
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.small != null) {
data['small'] = this.small!.toJson();
}
if (this.thumbnail != null) {
data['thumbnail'] = this.thumbnail!.toJson();
}
return data;
}
}
class Small {
String? ext;
String? url;
String? hash;
String? mime;
String? name;
Null? path;
double? size;
int? width;
int? height;
Small(
{this.ext,
this.url,
this.hash,
this.mime,
this.name,
this.path,
this.size,
this.width,
this.height});
Small.fromJson(Map<String, dynamic> json) {
ext = json['ext'];
url = json['url'];
hash = json['hash'];
mime = json['mime'];
name = json['name'];
path = json['path'];
size = json['size'];
width = json['width'];
height = json['height'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['ext'] = this.ext;
data['url'] = this.url;
data['hash'] = this.hash;
data['mime'] = this.mime;
data['name'] = this.name;
data['path'] = this.path;
data['size'] = this.size;
data['width'] = this.width;
data['height'] = this.height;
return data;
}
}
class Meta {
Pagination? pagination;
Meta({this.pagination});
Meta.fromJson(Map<String, dynamic> json) {
pagination = json['pagination'] != null
? new Pagination.fromJson(json['pagination'])
: null;
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.pagination != null) {
data['pagination'] = this.pagination!.toJson();
}
return data;
}
}
class Pagination {
int? page;
int? pageSize;
int? pageCount;
int? total;
Pagination({this.page, this.pageSize, this.pageCount, this.total});
Pagination.fromJson(Map<String, dynamic> json) {
page = json['page'];
pageSize = json['pageSize'];
pageCount = json['pageCount'];
total = json['total'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['page'] = this.page;
data['pageSize'] = this.pageSize;
data['pageCount'] = this.pageCount;
data['total'] = this.total;
return data;
}
}
型
这是使用http的块代码
class CoursesBloc extends Bloc<CoursesEvent, CoursesState> {
CoursesBloc() : super(CoursesInitial()) {
on<CoursesInitialEvent>(coursesInitialEvent);
on<CourseCardNavigateEvent>(courseCardNavigateEvent);
}
FutureOr<void> coursesInitialEvent(
CoursesInitialEvent event, Emitter<CoursesState> emit) async {
var client = http.Client();
List<Data> datums = [];
try{
var response = await client.get(Uri.parse('http://192.168.66.1:1337/api/courses?populate=CoverPic'));
List result = jsonDecode(response.body);
for(var i=0; i<result.length;i++)
{
Data datum = Data.fromJson(result[i]);
datums.add(datum);
}
print(datums);
emit(CoursesLoadedSuccessState(datums));
}
catch(e){
log(e.toString());
}
}
}
型
我得到的错误是:
[log] type '_Map<String, dynamic>' is not a subtype of type 'List<dynamic>'
型
我觉得这是在Map中调用的Coverpic类,所以我使用了
“http://192.168.66.1:1337/api/courses”,因为它不会填充CoverPic,但我最终得到了相同的错误
1条答案
按热度按时间g52tjvyc1#
你的React体是一张Map。要访问数据列表,需要使用键
data
字符串
你可以检查这个例子。