hyzp_ybqx-Commit172:添加和维护全局变量 tabsState,实现如果是安卓平台允许后台提醒,如果是IOS平台、必须在前台才提醒

问题:山不在高水不在深:
iOS App好像有点问题,就是登陆一次后,如果退出并切换其它程序,再切换回黑烟,虽然没有登陆,也会语音提醒,有新的黑烟车
This commit is contained in:
WinUser01
2022-07-09 13:58:47 +08:00
parent a6aa8a449c
commit 59773d5007
4 changed files with 47 additions and 2 deletions
+34 -2
View File
@@ -28,7 +28,7 @@ class Tabs extends StatefulWidget {
_TabsState createState() => _TabsState();
}
class _TabsState extends State<Tabs> {
class _TabsState extends State<Tabs> with WidgetsBindingObserver {
// 初始化插件
DisableScreenshots _watermarkPlugin = DisableScreenshots();
@@ -86,6 +86,33 @@ class _TabsState extends State<Tabs> {
});
init();
tabsState = 1; //Tabs页面是否在前台:1 前台resumed,0 paused,-1 处理中
print("tabsState = $tabsState");
// 注册应用生命周期监听
WidgetsBinding.instance.addObserver(this);
}
//监听App生命周期回调
@override
void didChangeAppLifecycleState(AppLifecycleState state) async {
print("$state");
tabsState = -1; //Tabs页面是否在前台:1 前台resumed,0 paused,-1 处理中
switch (state) {
// 处于这种状态的应用程序应该假设他们可能在任何时候暂停
case AppLifecycleState.inactive:
break;
case AppLifecycleState.resumed: // 从后台切前台,界面可见
tabsState = 1; //Tabs页面是否在前台:1 前台resumed,0 paused,-1 处理中
break;
case AppLifecycleState.paused: // 界面不可见,后台
case AppLifecycleState.detached: // APP 结束时调用
break;
}
print("tabsState = $tabsState");
// resumed:可见的,并能响应用户的输入。
// inactive:处在不活动状态,无法处理用户响应。
// paused:不可见并不能响应用户的输入,但是在后台继续活动中。
}
init() async {
@@ -97,7 +124,10 @@ class _TabsState extends State<Tabs> {
WidgetsFlutterBinding.ensureInitialized();
FlutterBackgroundService.initialize(onStart);
if (g_bVoiceRemind) {
doRemind();
// 如果是安卓平台允许后台提醒,如果是IOS平台、必须在前台才提醒
if (Platform.isAndroid || (Platform.isIOS && 1 == tabsState)) {
doRemind();
}
} else {
Future.delayed(Duration(seconds: 1), () {
FlutterBackgroundService().sendData({"action": "stopService"});
@@ -108,6 +138,8 @@ class _TabsState extends State<Tabs> {
@override
void dispose() {
// 移除生命周期监听
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}