0

我正在尝试访问moviesList内部build()和结果,如下所示。如果有人能指出真正的问题,将不胜感激。提前致谢。

flutter: ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
flutter: The following NoSuchMethodError was thrown building MyListScreen(dirty, state:
flutter: _MyListScreenState#21007):                                     
flutter: The getter 'results' was called on null.                       
flutter: Receiver: null                                                 
flutter: Tried calling: results 

代码片段如下:

class _MyListScreenState extends State<MyListScreen> {

  MoviesList moviesList;

  _getLatestMovies() {
    APIService.getMoviesNowPlaying().then((response) {
      setState(() {
        final jsonData = json.decode(response.body);
        moviesList = new MoviesList.fromJson(jsonData);
        // moviesList(new MoviesList.fromJson(jsonData));

        for (var i = 0; i < moviesList.results.length; i++) {
        print(moviesList.results[i].title);
        }
      });
    });
  }

  @override
  initState() {
    super.initState();
    _getLatestMovies();
  }

  @override
  Widget build(context) {
    return Scaffold(
        appBar: AppBar(
          title: Text("View Title"),
        ),
        body: ListView.separated(
          padding: EdgeInsets.zero,
          itemCount: moviesList.results.length,
          itemBuilder: (context, index) {
            // return ListTile(title: Text(moviesList.results[index].title));
          },
          separatorBuilder: (context, index) {
            return Divider();
          },
        ));
  }
}
4

2 回答 2

0

解决方案(可能是一个):

问题背后的真正原因不是变量范围,而是异步的方式完全错误,重新设计解决了这个问题。移动_getLatestMovies();到 FutureBuilder 内部。

改进了下面粘贴的一个:

  @override
  Widget build(context) {
    var futureBuilder = FutureBuilder(
        future: _getLatestMovies(),
        builder: (context, snapshot) {
          if (snapshot.data != null) {
            return ListView.separated(
                padding: EdgeInsets.zero,

通过这一举措,FutureBuilder等待方法的结果并作为快照传递给 ListView。

于 2019-07-01T12:02:03.193 回答
0

利用

itemCount: moviesList != null ? moviesList.results.length : 0,

你在被初始化build()之前被调用moviesList,所以在这里我们首先检查null, if nulluse 0as itemCountelse 使用它的长度。

于 2019-06-27T16:41:39.097 回答