flatter如何获取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

好的,我有以下问题,我有一个json,我有一个类来获取要使用的数据,代码如下

// 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),
              );
            },
          );
        },
      ),
    );
  }
}