导航屏幕或滚动时丢失数据

时间:2020-06-03 09:51:20

标签: flutter dart

我是Flutter的新手,刚刚开始制作一个小小的应用程序,该应用程序使用异步请求从服务器上获取热门电影列表。然后,当我点击每个列表项的顶部时,它会将我导航到另一个屏幕,以显示有关电影的一些详细信息。

但是有一个问题,当我点击任何项目以查看其详细信息时,在详细信息页面内,当我按回去时,在第一页中,它只会再次加载数据,这不是很好的用户体验。也为每个请求使用更多的电池和带宽。

我不知道这是Flutter的自然行为,在导航到另一个屏幕后丢失有状态小部件的数据还是我的代码有问题。

有人可以帮我吗

enter image description here

class MoviesListState extends State<MoviesList> {

  List moviesList = [];

  Future<Map> getData() async {
    http.Response response = await http.get(
        'http://api.themoviedb.org/3/discover/movie?api_key={api_key}'
    );
    setState(() {
        moviesList = json.decode(response.body)['results'];
    });
//    return json.decode(response.body);
  }

  @override
  Widget build(BuildContext context) {
    getData();
    if(moviesList == null) {
      return Scaffold(
        body: Text('Getting data from server')
      );
    } else {
      return ListView.builder(
          itemCount: moviesList.length,
          itemBuilder: (context, index){
            return Container(
                child: ListTile(
                    title: Text(moviesList[index]['title']),
                    onTap: () {
                      Navigator.push(
                        context,
                        MaterialPageRoute(builder: (context) => MovieDetails()),
                      );
                    }
                )
            );
          }
      );
    }
  }
}

class MovieDetails extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
          title: Text('Details')
      ),
      body: Container(
          child: Center(
            child: RaisedButton(
              onPressed: () {
                Navigator.pop(context);
              },
              child: Text('Go back!'),
            ),
          )
      ),
    );
  }
}

0 个答案:

没有答案