AppLifeCycleState.detached 在应用程序关闭时不会被调用

问题描述 投票:0回答:1

  Future<void> onAppClose({required String userId}) async {
    await FirebaseFirestore.instance
        .collection(FirebaseConstants.usersCollection)
        .doc(userId)
        .update({'isOnline': false});
  }

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

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

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    final userId = ref.read(currentDeliveryUserProvider)?.reference.id;
    print("state--------------------$state");
    if (userId != null) {
      if (state == AppLifecycleState.detached) {
        // The app is completely closing
        onAppClose(userId: userId);
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    h = MediaQuery.of(context).size.height;
    w = MediaQuery.of(context).size.width;
    return GestureDetector(
      onTap: () {
        FocusManager.instance.primaryFocus?.unfocus();
      },
      child: MaterialApp(
        title: 'ONtrend Partners',
        home: const SplashScreen(),
        // home:   TestFile(),
        theme: ThemeData(
          textTheme: GoogleFonts.dmSansTextTheme(),
        ),
        debugShowCheckedModeBanner: false,
      ),
    );
  }
}

我正在 Flutter 中构建一个交付应用程序,并且当应用程序关闭时,我尝试在 Firebase 中将用户的 isOnline 状态设置为 false。我一直在使用 WidgetsBindingObserver 来侦听 AppLifecycleState 更改,并且 AppLifeCycleState.paused 和 AppLifeCycleState.inactive 一切正常。但是,我注意到当应用程序完全关闭(终止)时,AppLifeCycleState.detached 不会被触发。

flutter flutter-dependencies activity-lifecycle
1个回答
0
投票

如果用户在应用程序切换器中将应用程序滑开(我认为这就是您所说的“完全关闭(终止)”的意思),那么操作系统会杀死该应用程序,而不会向应用程序本身发出任何警告,因此没有办法检测到这一点。如果操作系统在其正常资源管理流程中挂起或停止应用程序(例如,当应用程序有一段时间没有在前台运行时),那么您应该会收到生命周期状态更新。

© www.soinside.com 2019 - 2024. All rights reserved.