如何阻止 Stateful Widget 重新初始化
How to stop Stateful Widget from Re-initialising
我有 2 个脚手架。第一个是 Menu,第二个是 Places.
Menu -> Places
Menu/1st 脚手架在 initState()
上获取 api/future 数据。我想要实现的是能够进入 2nd/ Places 页面 然后当我 return 进入菜单页面, 就是一定不能再重新加载 Future/ initState。
第一页(菜单)脚手架有这样的东西,效果很好:
//First Scaffold
Future myFuture;
bool _loading;
@override
void initState() {
super.initState();
myFuture = _getService();
_loading = true;
}
第二个 page/scaffold 有类似这样的东西 return 到上一页(按下时重新加载上一页的 initState):
//Second Scaffold
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.grey[900],
appBar: AppBar(
leading: IconButton(
icon: Icon(Icons.arrow_back, color: Colors.black),
onPressed: () {
Navigator.pop(context);
},
),
那么我怎样才能阻止它在回到那个屏幕时初始化状态呢?
这是因为您正在添加 Menu
页面的新实例。
你最终得到以下堆栈
Menu page | Place page | Menu page
所以此时您有 2 个 Menu 页面,一个在 Places 页面之前,一个在它之后。
正确的做法是弹出Places
页面,这样你就会return到Menu
页面。
你需要这样做
icon: Icon(Icons.arrow_back, color: Colors.black),
onPressed: () {
Navigator.pop(context);
},
您应该使用以下代码从“菜单”页面导航到“地点”
Navigator.of(context).push(
MaterialPageRoute(builder: (context) => Places()));
我有 2 个脚手架。第一个是 Menu,第二个是 Places.
Menu -> Places
Menu/1st 脚手架在 initState()
上获取 api/future 数据。我想要实现的是能够进入 2nd/ Places 页面 然后当我 return 进入菜单页面, 就是一定不能再重新加载 Future/ initState。
第一页(菜单)脚手架有这样的东西,效果很好:
//First Scaffold
Future myFuture;
bool _loading;
@override
void initState() {
super.initState();
myFuture = _getService();
_loading = true;
}
第二个 page/scaffold 有类似这样的东西 return 到上一页(按下时重新加载上一页的 initState):
//Second Scaffold
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.grey[900],
appBar: AppBar(
leading: IconButton(
icon: Icon(Icons.arrow_back, color: Colors.black),
onPressed: () {
Navigator.pop(context);
},
),
那么我怎样才能阻止它在回到那个屏幕时初始化状态呢?
这是因为您正在添加 Menu
页面的新实例。
你最终得到以下堆栈
Menu page | Place page | Menu page
所以此时您有 2 个 Menu 页面,一个在 Places 页面之前,一个在它之后。
正确的做法是弹出Places
页面,这样你就会return到Menu
页面。
你需要这样做
icon: Icon(Icons.arrow_back, color: Colors.black),
onPressed: () {
Navigator.pop(context);
},
您应该使用以下代码从“菜单”页面导航到“地点”
Navigator.of(context).push(
MaterialPageRoute(builder: (context) => Places()));