首页 > 解决方案 > Flutter如何处理手机屏幕被关闭的问题?

问题描述

当屏幕关闭时,只有一些 Dart 代码运行。Flutter 在手机屏幕关闭时会做什么?它会停止渲染但仍运行特定的 Dart 代码吗?


在我的例子中,即使屏幕关闭,也会调用 Dart 回调函数(传递给 Flutter 插件)。我想自定义/控制这种行为,因为我正在运行计算成本高的代码,当用户看不到输出时不应该运行这些代码。我已经可以在屏幕关闭时运行代码(例如通过使用 screen_state 颤振插件或使用ScreenStateObserverMiguel Ruivo 提供的,但它有局限性。我无法使用 弹出路由Navigator.pop()。我也想大致了解 Flutter屏幕关闭时会受到影响。

标签: flutterdart

解决方案


您想看看WidgetsBindingObserver mixin,因为它会为您提供与小部件状态不同的应用程序生命周期。

然后你会想要订阅initState()

  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
  }

并删除监听器dispose()

  @override
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }

并访问不同的状态didChangeAppLifecycleState()

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
     switch (state) {
      case AppLifecycleState.resumed:
        print('app resumed');
        break;
      
      case AppLifecycleState.inactive:
        print('app inactive');
        break;
      
      case AppLifecycleState.paused:
        print('app paused');
        break;
    
      case AppLifecycleState.detached:
        print('app deatched');
        break;
    }
  }

推荐阅读