【问题标题】:Flutter: How to always fire a function when a page appears which was already visitedFlutter:如何在已经访问过的页面出现时始终触发功能
【发布时间】:2021-02-04 10:42:06
【问题描述】:

有没有办法在访问已经访问过的页面时始终触发函数?

我有一个如下所示的页面:

// Loads of imports

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> 
  List<Shift> shifts = [];

  Future<void> getUpcomingShifts() async {
    var shiftList = await ShiftService.upcomingShifts();
    setState(() {
      shifts = shiftList;
    });
  }

  @override
  void initState() {
    super.initState();
    this.getUpcomingShifts();
  }

  @override
  Widget build(BuildContext context) {
    var size = MediaQuery.of(context).size;
    return Scaffold(
        extendBody: true,
        drawer: SideDrawer(),
        body: Column(children: <Widget>[
          Header(title: I18n.of(context).pagesHomeTitle),
          Container(
            child: // The rest of the page
          )
        ]));
  }
}

所以我希望 getUpcomingShifts 在访问此(主页)页面时始终触发。第一次访问该页面时效果很好,但在初始化后该函数不再触发。我在这个问题上找不到任何好的例子或文档。

【问题讨论】:

  • 也许你可以使用Navigator.pushNamed(.....).then((value) =&gt; getUpcomingShifts()) ,或者你能详细说明你如何往返HomePage
  • @jjchiw 感谢您在这里思考 :) 只有一次我浏览了pushReplacementNamed。其他时间都是pop。当使用pop 时不会有任何承诺。另外,我如何访问我正在导航到的Widget 中的函数?
  • 我认为promise/then应该在从HomePage推送的页面的pop之后触发...... HomPage -push> ListData -pop or back> @ 987654333@ 触发promise/then,如果您使用pushReplacementNamed 转到HomePageinitState 应该触发getUpcomingShift
  • 我不清楚你的意思。您能否为我写一个更清楚的方式?

标签: flutter dart async-await


【解决方案1】:

您可以在状态下使用RouteAware mixin,然后在didPopNext 中调用您的函数,当下一个路由从堆栈中弹出并且此页面再次可见时会调用该函数

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    • 2017-07-08
    • 1970-01-01
    • 2021-10-15
    相关资源
    最近更新 更多