【问题标题】:Call a function when user leaves current screen in Flutter [duplicate]当用户在 Flutter 中离开当前屏幕时调用函数 [重复]
【发布时间】:2021-04-17 17:15:01
【问题描述】:

我想在用户离开当前屏幕时调用函数或收到通知,无论他/她是否向后导航,即弹出屏幕或在应用程序中向前导航。

【问题讨论】:

    标签: flutter dart navigation


    【解决方案1】:

    你需要实现一个路由观察器。

    首先你需要定义一个观察者:

    final RouteObserver<PageRoute> routeObserver = RouteObserver<PageRoute>();
    

    那么您需要将观察者添加到您的材料应用程序中:

    MaterialApp(
      navigatorObservers: [routeObserver], ...
    

    好的。现在,当您创建屏幕时,您可以将 RouteAware 添加到您的状态。您将需要订阅观察者,并同时处置它。因此,您需要一个有状态的小部件。假设您有一个名为 MyScreen 的屏幕,它看起来像这样:

    class MyScreen extends StatefulWidget {
      @override
      _MyScreenState createState() => _MyScreenState();
    }
    
    class _MyScreenState extends State<MyScreen> with RouteAware{
      @override
    
    
     void didChangeDependencies() {
        routeObserver.subscribe(this, ModalRoute.of(context));
        super.didChangeDependencies();
      }
    
    
    
     @override
      void dispose() {
        routeObserver.unsubscribe(this);
        super.dispose();
      } ...
    

    太棒了!现在您可以访问这些额外的事件,例如:

    @override
      void didPopNext() {
        super.didPopNext();
      }
    
      @override
      void didPush() {
        super.didPush();
      }
    
      @override
      void didPushNext() {
        super.didPushNext();
      }
    
      @override
      void didPop() {
        super.didPop();
      }
    

    如果有什么不清楚的地方请告诉我。

    【讨论】:

      【解决方案2】:

      你可以使用dispose()生命周期函数

      引用API

      处理方法 当此对象从树中永久移除时调用。

      例如,当用户离开屏幕时,我使用它来取消订阅 计时器

      示例:

        @override
        void dispose() {
          super.dispose();
          timer.cancel();
        }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-21
        • 2021-07-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多