如何阻止有状态小部件重新初始化

时间:2021-02-20 13:05:21

标签: flutter dart future

我有 2 个脚手架。第一个是菜单,第二个是地点

Menu -> Places

Menu/1st scaffold 在 initState() 上获取 api/future 数据。我想要实现的是能够进入第二/地点页面,然后当我返回到菜单页面时,不得重新加载 strong> 再次调用 Future/ initState。

第一页(菜单)脚手架有这样的东西,效果很好:

//First Scaffold

Future myFuture;
  bool _loading;

@override
  void initState() {
    super.initState();
    myFuture = _getService();
    _loading = true;
  } 

第二页/脚手架有类似这样的东西返回上一页(按下时重新加载上一页的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);
          },
        ),

那么我怎样才能在返回到那个屏幕时阻止它初始化状态?

1 个答案:

答案 0 :(得分:1)

这是因为您要添加 Menu 页面的新实例。

你最终得到以下堆栈

Menu page | Place page | Menu page

所以此时您有 2 个菜单页面,一个在位置页面之前,一个在它之后。 正确的做法是弹出Places页面,以便您返回到Menu页面。

你需要这样做

icon: Icon(Icons.arrow_back, color: Colors.black),
          onPressed: () {
            Navigator.pop(context);
          },

从“菜单”页面,您应该使用以下代码导航到“地点”

     Navigator.of(context).push(
                MaterialPageRoute(builder: (context) => Places()));
相关问题