From aa421496a52aa240a4ada8e5955f9ffefd400fdf Mon Sep 17 00:00:00 2001 From: Daisy <> Date: Thu, 14 Mar 2024 10:04:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=8A=E6=9E=B6=E9=97=AE?= =?UTF-8?q?=E9=A2=98=EF=BC=9A=E5=BA=94=E7=94=A8=E5=86=85=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E6=8E=A8=E9=80=81=E6=8C=89=E9=92=AE=E6=97=A0=E6=B3=95=E6=AD=A3?= =?UTF-8?q?=E5=B8=B8=E4=BD=BF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mine/mineSet/mineSet/mineSet_page.dart | 59 ++++++++++++++++++- .../mine/mineSet/mineSet/mineSet_state.dart | 3 + star_lock/pubspec.yaml | 1 + 3 files changed, 61 insertions(+), 2 deletions(-) diff --git a/star_lock/lib/mine/mineSet/mineSet/mineSet_page.dart b/star_lock/lib/mine/mineSet/mineSet/mineSet_page.dart index 2c429680..09d702d0 100644 --- a/star_lock/lib/mine/mineSet/mineSet/mineSet_page.dart +++ b/star_lock/lib/mine/mineSet/mineSet/mineSet_page.dart @@ -1,7 +1,11 @@ +import 'dart:io'; + import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; +import 'package:permission_handler/permission_handler.dart'; import 'package:star_lock/flavors.dart'; import 'package:star_lock/mine/mineSet/mineSet/mineSet_logic.dart'; import '../../../appRouters.dart'; @@ -18,7 +22,7 @@ class MineSetPage extends StatefulWidget { State createState() => _MineSetPageState(); } -class _MineSetPageState extends State { +class _MineSetPageState extends State with WidgetsBindingObserver { final logic = Get.put(MineSetLogic()); final state = Get.find().state; @@ -26,11 +30,25 @@ class _MineSetPageState extends State { void initState() { super.initState(); + WidgetsBinding.instance.addObserver(this); + logic.userSettingsInfoRequest(); } + @override + void didChangeAppLifecycleState(AppLifecycleState state) { + super.didChangeAppLifecycleState(state); + if (state == AppLifecycleState.resumed) { + // 应用从后台返回前台 + // 在这里执行相应的操作 + _checkNotificationPermission(); + } + } + @override Widget build(BuildContext context) { + _checkNotificationPermission(); + return Scaffold( backgroundColor: AppColors.mainBackgroundColor, appBar: TitleAppBar( @@ -371,8 +389,45 @@ class _MineSetPageState extends State { thumbColor: CupertinoColors.white, value: state.isPushNotification.value, onChanged: (value) { - state.isPushNotification.value = !state.isPushNotification.value; + // state.isPushNotification.value = !state.isPushNotification.value; + openAppSettings(); }, ); } + + Future _checkNotificationPermission() async { + bool notificationEnabled = false; + + if (Platform.isAndroid) { + notificationEnabled = await state.flutterLocalNotificationsPlugin + .resolvePlatformSpecificImplementation< + AndroidFlutterLocalNotificationsPlugin>() + ?.areNotificationsEnabled() ?? + false; + } else if (Platform.isIOS) { + notificationEnabled = await state.flutterLocalNotificationsPlugin + .resolvePlatformSpecificImplementation< + IOSFlutterLocalNotificationsPlugin>() + ?.requestPermissions( + alert: true, + badge: true, + sound: true, + ) ?? + false; + } + + if (notificationEnabled) { + print('Notifications are enabled'); + state.isPushNotification.value = true; + } else { + print('Notifications are disabled'); + state.isPushNotification.value = false; + } + } + + @override + void dispose() { + WidgetsBinding.instance.removeObserver(this); + super.dispose(); + } } diff --git a/star_lock/lib/mine/mineSet/mineSet/mineSet_state.dart b/star_lock/lib/mine/mineSet/mineSet/mineSet_state.dart index 7c738b38..1caccd3d 100644 --- a/star_lock/lib/mine/mineSet/mineSet/mineSet_state.dart +++ b/star_lock/lib/mine/mineSet/mineSet/mineSet_state.dart @@ -1,3 +1,4 @@ +import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:get/get.dart'; import 'package:star_lock/mine/mineSet/mineSet/userSettingInfoEntity.dart'; @@ -13,4 +14,6 @@ class MineSetState { var hideExpiredAccessFlag = 2.obs; //隐藏无效开锁 var currentLanguage = "".obs; //隐藏无效开锁 + late FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = + FlutterLocalNotificationsPlugin(); } diff --git a/star_lock/pubspec.yaml b/star_lock/pubspec.yaml index 52156863..ded6a578 100644 --- a/star_lock/pubspec.yaml +++ b/star_lock/pubspec.yaml @@ -141,6 +141,7 @@ dependencies: flutter_slidable: ^3.0.1 audio_service: ^0.18.12 app_settings: ^5.1.1 + flutter_local_notifications: ^17.0.0 system_settings: ^2.0.0 dev_dependencies: