首页 > 解决方案 > 如何防止在颤振中重建有状态的小部件

问题描述

我正在从 api(屏幕 1)加载数据,并在单击项目时打开一个带有新状态小部件的新屏幕(屏幕 2)。但是现在当我从屏幕 2 按返回箭头时,我可以看到屏幕 1,但它再次调用 api。当我们从屏幕 2 回到屏幕 1 时,我不想那样做。

屏幕 1 代码:

  class Screen1 extends StatefulWidget {
      @override
      _Screen1State createState() => _Screen1State();
    }

    class _Screen1 State
        extends State<Screen1> with AutomaticKeepAliveClientMixin<Screen1>
    {


      @override
      Widget build(BuildContext context) {
        return FutureBuilder(
            future: getdata(), //api calling
            builder: (BuildContext context, AsyncSnapshot snapshot) {
              switch (snapshot.connectionState) {
                case ConnectionState.none:
                // TODO: Handle this case.
                case ConnectionState.waiting:
                  //my code
                case ConnectionState.active:
                // TODO: Handle this case.
                case ConnectionState.done:
                  if (snapshot.connectionState == ConnectionState.done) {
                    return showdata(snapshot.data);
                  }
              }
            });
      }

  Widget showdata(Response data) {
    return ListView.builder(
        itemCount: 1,
        itemBuilder: (BuildContext context, int index) {
          return Container(
              decoration: BoxDecoration(color: Colors.white),
              child: ListTile(
                onTap: () {
                  Navigator.push(context,
                      MaterialPageRoute(builder: (_) => Screen2()));
                },
              )
          );
        });

      @override
      // TODO: implement wantKeepAlive
      bool get wantKeepAlive => true;
    }

屏幕 2:

class Screen2 extends StatefulWidget {
  @override
  _Screen2State createState() => _Screen2State();
}

class _Screen2State extends State<Screen2> {
  @override
  Widget build(BuildContext context) {
    return Container();
  }
}

当我从屏幕 2 返回时,如何防止再次重建屏幕 1?

标签: flutterdartflutter-navigation

解决方案


推荐阅读