flatter如何获取json的数据
好的,我有以下问题,我有一个json,我有一个类来获取要使用的数据,代码如下flatter如何获取json的数据,json,dart,flutter,Json,Dart,Flutter,好的,我有以下问题,我有一个json,我有一个类来获取要使用的数据,代码如下 // To parse this JSON data, do // // final moviesFirstLoad = moviesFirstLoadFromJson(jsonString); import 'dart:convert'; MoviesFirstLoad moviesFirstLoadFromJson(String str) { final jsonData = json.decode
// To parse this JSON data, do
//
// final moviesFirstLoad = moviesFirstLoadFromJson(jsonString);
import 'dart:convert';
MoviesFirstLoad moviesFirstLoadFromJson(String str) {
final jsonData = json.decode(str);
return MoviesFirstLoad.fromJson(jsonData);
}
String moviesFirstLoadToJson(MoviesFirstLoad data) {
final dyn = data.toJson();
return json.encode(dyn);
}
class MoviesFirstLoad {
List<Movierecent> movierecent;
MoviesFirstLoad({
this.movierecent,
});
factory MoviesFirstLoad.fromJson(Map<String, dynamic> json) => new MoviesFirstLoad(
movierecent: new List<Movierecent>.from(json["movierecent"].map((x) => Movierecent.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"movierecent": new List<dynamic>.from(movierecent.map((x) => x.toJson())),
};
}
class Movierecent {
int id;
String movieId;
String title;
String genre;
String myear;
String released;
String runtime;
String rated;
String director;
String actors;
String plot;
String imdbrating;
String type;
String production;
int internalid;
String poster;
Movierecent({
this.id,
this.movieId,
this.title,
this.genre,
this.myear,
this.released,
this.runtime,
this.rated,
this.director,
this.actors,
this.plot,
this.imdbrating,
this.type,
this.production,
this.internalid,
this.poster,
});
factory Movierecent.fromJson(Map<String, dynamic> json) => new Movierecent(
id: json["id"],
movieId: json["movieID"],
title: json["title"],
genre: json["genre"],
myear: json["myear"],
released: json["released"],
runtime: json["runtime"],
rated: json["rated"],
director: json["director"],
actors: json["actors"],
plot: json["plot"],
imdbrating: json["imdbrating"],
type: json["type"],
production: json["production"],
internalid: json["internalid"],
poster: json["poster"],
);
Map<String, dynamic> toJson() => {
"id": id,
"movieID": movieId,
"title": title,
"genre": genre,
"myear": myear,
"released": released,
"runtime": runtime,
"rated": rated,
"director": director,
"actors": actors,
"plot": plot,
"imdbrating": imdbrating,
"type": type,
"production": production,
"internalid": internalid,
"poster": poster,
};
}
因此,我有以下几点,在这里我不知道该怎么做,因为访问数据以将它们放在列表中类似于
Future<List<Movierecent>> loadMovies() async {
final response = await http.get("http://emovies.evolucionone.com/");
if (response.statusCode == 200){
final moviesFirstLoad = moviesFirstLoadFromJson(response.body);
return moviesFirstLoad.movierecent;
}else{
throw Exception ('Failed to load Data');
}
}
Future loadMovies()异步{
最终响应=等待http.get(“http://emovies.evolucionone.com/");
如果(response.statusCode==200){
final moviesFirstLoad=moviesFirstLoadFromJson(response.body);
返回moviesFirstLoad.movierecent;
}否则{
抛出异常(“加载数据失败”);
}
}
如果有人帮助我,我需要帮助获取json的数据我已经阅读了几个主题,但没有一个适合我…loadMovies()
返回Future
,这是一个未来。如果你想要电影的基本列表,你可以这样做
loadMovies().then((List<Movierecent> movieList) {
/* do what you want to do here like invoking setState()....*/
}.catchError((e) {
/* Handle Error scenario here */
};
loadMovies()。然后((列出movieList){
/*执行您想在这里执行的操作,如调用setState()*/
}.catchError((e){
/*在这里处理错误场景*/
};
你可以参考一下我自己回答问题 这是为了从json获取数据
Future<MoviesFirstLoad> loadMovies() async {
final Response response = await http.get(dogApiUrl);
//final List<Movierecent> posterimage = List<Movierecent>();
if (response.statusCode == 200){
//final responsejson = json.decode(response.body);
final moviesFirstLoad = moviesFirstLoadFromJson(response.body);
// moviesFirstLoad.movierecent.forEach((poster) => posterimage.add(poster));
print(moviesFirstLoad);
return moviesFirstLoad;
}else{
throw Exception ('Failed to load Data');
}
}
Future loadMovies()异步{
最终响应=等待http.get(dogApiUrl);
//最终列表posterimage=List();
如果(response.statusCode==200){
//final responsejson=json.decode(response.body);
final moviesFirstLoad=moviesFirstLoadFromJson(response.body);
//moviesFirstLoad.movierecent.forEach((海报)=>posterimage.add(海报));
打印(moviesFirstLoad);
返回moviesFirstLoad;
}否则{
抛出异常(“加载数据失败”);
}
}
在列表中显示数据的步骤
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Movies')),
body: FutureBuilder(
future: loadMovies(),
builder: (BuildContext context, AsyncSnapshot<AppData> snapshot) {
if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(),
);
}
return ListView.builder(
itemCount: snapshot.data.movierecent.length,
itemBuilder: (BuildContext context, int index) {
final Movierecent movie = snapshot.data.movierecent[index];
return ListTile(
title: Text(movie.title),
subtitle: Text(movie.genre),
);
},
);
},
),
);
}
}
@覆盖
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(标题:文本(“电影”)),
正文:未来建设者(
future:loadMovies(),
生成器:(BuildContext上下文,异步快照){
如果(!snapshot.hasData){
返回中心(
子对象:CircularProgressIndicator(),
);
}
返回ListView.builder(
itemCount:snapshot.data.movierecent.length,
itemBuilder:(构建上下文,int索引){
final Movierecent movie=snapshot.data.Movierecent[index];
返回列表块(
标题:文本(电影名称),
字幕:文本(电影类型),
);
},
);
},
),
);
}
}
moviesFirstLoad
类型为moviesFirstLoad
moviesFirstLoad。MovierRecent
应提供电影列表(类型为MovierRecent
)。因此,只需将return moviesFirstLoad.movierecent;
添加到if块。不工作错误表示返回类型“List”不是“Future”,正如“loadMovies”方法所定义的那样。您可能希望添加类似错误的响应。return moviesFirstLoad.movierecent;
此显示此错误返回类型“List”不是“未来”,如“loadMovies”方法所定义,以及如何在列表中获取结果如果您需要获取电影列表,请将返回类型更改为Future
,或者如果您希望完整对象将其更改为Future
并返回moviesFirstLoad
。
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Movies')),
body: FutureBuilder(
future: loadMovies(),
builder: (BuildContext context, AsyncSnapshot<AppData> snapshot) {
if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(),
);
}
return ListView.builder(
itemCount: snapshot.data.movierecent.length,
itemBuilder: (BuildContext context, int index) {
final Movierecent movie = snapshot.data.movierecent[index];
return ListTile(
title: Text(movie.title),
subtitle: Text(movie.genre),
);
},
);
},
),
);
}
}