每当用户关闭应用程序时,我是否要对应用程序抖动执行功能?

时间:2019-09-19 12:46:03

标签: android ios flutter dart onesignal

我开发了一个带有flutter的应用程序,该应用程序具有与OneSignal聊天和通知系统,在该应用程序中,playerId在该应用程序首次打开时被注册,并在用户登录系统时链接到该用户。

用户还可以选择保持登录状态!

用例:

当用户选择保持登录状态时,这很好,因为他通常会收到您的聊天通知。 但是当他选择不登录时,我面临一个问题。

虽然他正在使用该应用程序,但应该将其链接至playerId,但是当他关闭该应用程序时(无论他如何操作,因为在手机上这可以通过多种方式完成),您应该调用该函数取消用户与playerId的链接,使其不再接收聊天通知!

我的问题是,关闭应用程序后如何执行此功能?

我想这样做是因为用户可以在不同的智能手机上访问系统。

我想到了WillPopScope,但这只能在返回指挥棒被触发时进行检测。

有人可以帮助我吗?谢谢!

1 个答案:

答案 0 :(得分:0)

您可以尝试监听应用程序的生命周期事件

https://medium.com/pharos-production/flutter-app-lifecycle-4b0ab4a4211a

import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';

class LifecycleEventHandler extends WidgetsBindingObserver {
  LifecycleEventHandler({this.resumeCallBack, this.suspendingCallBack});

  final AsyncCallback resumeCallBack;
  final AsyncCallback suspendingCallBack;

  @override
  Future<Null> didChangeAppLifecycleState(AppLifecycleState state) async {
    switch (state) {
      case AppLifecycleState.inactive:
      case AppLifecycleState.paused:
      case AppLifecycleState.suspending:
        await suspendingCallBack();
        break;
      case AppLifecycleState.resumed:
        await resumeCallBack();
        break;
    }
  }
}


class AppWidgetState extends State<AppWidget> {
  void initState() {
    super.initState();

    WidgetsBinding.instance.addObserver(
    new LifecycleEventHandler(resumeCallback(() => setState((){}))
    );
  }
  ...
}