我刚刚开始制作一个小小的应用程序,它使用async请求从服务器上获取顶级电影的列表。当我点击每个列表项目的顶部时,它会将我导航到另一个屏幕,以显示有关这部电影的一些细节。
但是有一个问题,当我点击任何项目来查看它的细节,在细节页面中,当我按下back,在第一页,它只是再次加载数据,这不是一个好的用户体验。也使用更多的电池和带宽的每一个请求。
我不知道这是否是在导航到另一个屏幕后丢失一个重要小部件的数据的自然行为,或者我的代码有问题。
有人能帮我吗

这是我的密码:
import "package:flutter/material.dart";
import "dart:async";
import "dart:convert";
import "package:http/http.dart" as http;
void main() {
runApp(MovieApp());
}
class MovieApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'test',
home: Scaffold(
appBar: AppBar(
backgroundColor: Colors.white,
title: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
Text("Top Movies List",
textDirection: TextDirection.rtl,
style: TextStyle(color: Colors.black87))
]
)
),
body: MoviesList()
)
);
}
}
class MoviesList extends StatefulWidget {
@override
MoviesListState createState() => new MoviesListState();
}
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!'),
),
)
),
);
}
}发布于 2018-12-04 21:42:48
将getData()方法移动到State类中的initState()中。(将其从构建方法中删除)
@override
void initState() {
getData();
super.initState();
}https://stackoverflow.com/questions/53621571
复制相似问题