From a9b48d4b5ec032d2c86f07eaa7c1c5b0cfffa984 Mon Sep 17 00:00:00 2001 From: Daisy <> Date: Tue, 12 Mar 2024 16:35:40 +0800 Subject: [PATCH] =?UTF-8?q?1=EF=BC=8C=E8=8E=B7=E5=8F=96=E7=9B=B8=E6=9C=BA?= =?UTF-8?q?=E3=80=81=E7=9B=B8=E5=86=8C=E3=80=81=E4=BD=8D=E7=BD=AE=E6=9D=83?= =?UTF-8?q?=E9=99=90=E5=89=8D=E5=BC=B9=E7=AA=97=202=EF=BC=8C=E6=96=AF?= =?UTF-8?q?=E5=87=AF=E7=8E=AF=E5=A2=83=E4=B8=8B=E5=B1=8F=E8=94=BD=E5=A2=9E?= =?UTF-8?q?=E5=80=BC=E6=9C=8D=E5=8A=A1=EF=BC=88=E7=94=A8=E4=BA=8E=E4=B8=8A?= =?UTF-8?q?=E6=9E=B6=EF=BC=89=203=EF=BC=8C=E4=BF=AE=E5=A4=8D=EF=BC=9A?= =?UTF-8?q?=E5=AD=98=E5=9C=A8=E4=BF=AE=E6=94=B9=E6=9C=80=E8=BF=91=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E5=88=97=E8=A1=A8=E5=90=8D=E7=A7=B0=E7=9A=84=E8=A1=8C?= =?UTF-8?q?=E4=B8=BA=EF=BC=8C=E4=B8=8D=E7=AC=A6=E5=90=88=E5=8D=8E=E4=B8=BA?= =?UTF-8?q?=E5=BA=94=E7=94=A8=E5=B8=82=E5=9C=BA=E5=AE=A1=E6=A0=B8=E6=A0=87?= =?UTF-8?q?=E5=87=86=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- star_lock/lib/app.dart | 3 +- .../mine/addLock/addLock/addLock_page.dart | 54 ++++++++---- .../selectLockType/selectLockType_page.dart | 46 ++++++++-- .../lib/mine/mine/starLockMine_page.dart | 13 +-- .../minePersonInfo_page.dart | 16 +++- .../starLockApplication.dart | 2 +- star_lock/lib/talk/call/audioPlayerTask.dart | 22 +++++ star_lock/lib/tools/appFirstEnterHandle.dart | 86 +++++++++++++++++-- star_lock/lib/tools/storage.dart | 4 +- 9 files changed, 207 insertions(+), 39 deletions(-) create mode 100644 star_lock/lib/talk/call/audioPlayerTask.dart diff --git a/star_lock/lib/app.dart b/star_lock/lib/app.dart index 203c7924..c484edb7 100644 --- a/star_lock/lib/app.dart +++ b/star_lock/lib/app.dart @@ -4,6 +4,7 @@ import 'package:flutter_localizations/flutter_localizations.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/tools/app_manager.dart'; import 'package:star_lock/tools/bindings/app_binding.dart'; @@ -34,7 +35,7 @@ class _MyAppState extends State with WidgetsBindingObserver, BaseWidget { } GetMaterialApp _initMaterialApp() => GetMaterialApp( - title: 'Star Lock', + title: F.navTitle, navigatorObservers: [AppRouteObserver().routeObserver], translations: TranslationMessage(), supportedLocales: appDept.deptSupportedLocales, diff --git a/star_lock/lib/mine/addLock/addLock/addLock_page.dart b/star_lock/lib/mine/addLock/addLock/addLock_page.dart index 674529b3..657816f2 100644 --- a/star_lock/lib/mine/addLock/addLock/addLock_page.dart +++ b/star_lock/lib/mine/addLock/addLock/addLock_page.dart @@ -5,6 +5,8 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:star_lock/mine/addLock/addLock/addLock_logic.dart'; +import 'package:star_lock/tools/appFirstEnterHandle.dart'; +import 'package:star_lock/tools/storage.dart'; import '../../../appRouters.dart'; import '../../../app_settings/app_colors.dart'; @@ -79,19 +81,7 @@ class _AddLockPageState extends State with BaseWidget { btnName: TranslationLoader.lanKeys!.next!.tr, borderRadius: 20.w, onClick: () { - if (Platform.isIOS) { - Navigator.pushNamed(context, Routers.nearbyLockPage); - } else { - getMicrophonePermission().then((value) { - if (value) { - // 有权限 - Navigator.pushNamed(context, Routers.nearbyLockPage); - } else { - //没有权限 - openAppSettings(); //打开app系统设置 - } - }); - } + getNearByLimits(); }), ), ], @@ -99,6 +89,19 @@ class _AddLockPageState extends State with BaseWidget { ); } + void onShow() {} + + void onHide() {} + + //跳转到附近的锁页面先判断权限 + void getNearByLimits() { + if (Platform.isIOS) { + Navigator.pushNamed(context, Routers.nearbyLockPage); + } else { + positionPermissionAlert(); + } + } + ///请求权限 Future getMicrophonePermission() async { // You can request multiple permissions at once. @@ -117,7 +120,28 @@ class _AddLockPageState extends State with BaseWidget { return false; } - void onShow() {} + Future positionPermissionAlert() async { + //安卓平台下首次进入应用需向用户告知获取权限用途弹窗 + if (Platform.isAndroid) { + AppFirstEnterHandle().getAppFirstEnter(context, isAgreePosition); + var getFlag = await Storage.getString(isAgreePosition); + if (getFlag == isAgreePosition) { + onPermissionPush(); + } + } else { + onPermissionPush(); + } + } - void onHide() {} + void onPermissionPush() { + getMicrophonePermission().then((value) { + if (value) { + // 有权限 + Navigator.pushNamed(context, Routers.nearbyLockPage); + } else { + //没有权限 + openAppSettings(); //打开app系统设置 + } + }); + } } diff --git a/star_lock/lib/mine/addLock/selectLockType/selectLockType_page.dart b/star_lock/lib/mine/addLock/selectLockType/selectLockType_page.dart index bbfdab51..27902be7 100644 --- a/star_lock/lib/mine/addLock/selectLockType/selectLockType_page.dart +++ b/star_lock/lib/mine/addLock/selectLockType/selectLockType_page.dart @@ -4,6 +4,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:permission_handler/permission_handler.dart'; +import 'package:star_lock/tools/appFirstEnterHandle.dart'; +import 'package:star_lock/tools/storage.dart'; import '../../../appRouters.dart'; import '../../../app_settings/app_colors.dart'; @@ -188,15 +190,16 @@ class _SelectLockTypePageState extends State if (Platform.isIOS) { Navigator.pushNamed(context, Routers.nearbyLockPage); } else { - getMicrophonePermission().then((value) { - if (value) { - // 有权限 - Navigator.pushNamed(context, Routers.nearbyLockPage); - } else { - //没有权限 - openAppSettings(); //打开app系统设置 - } - }); + positionPermissionAlert(); + // getMicrophonePermission().then((value) { + // if (value) { + // // 有权限 + // Navigator.pushNamed(context, Routers.nearbyLockPage); + // } else { + // //没有权限 + // openAppSettings(); //打开app系统设置 + // } + // }); } } @@ -218,6 +221,31 @@ class _SelectLockTypePageState extends State return false; } + Future positionPermissionAlert() async { + //安卓平台下首次进入应用需向用户告知获取权限用途弹窗 + if (Platform.isAndroid) { + AppFirstEnterHandle().getAppFirstEnter(context, isAgreePosition); + var getFlag = await Storage.getString(isAgreePosition); + if (getFlag == isAgreePosition) { + onPermissionPush(); + } + } else { + onPermissionPush(); + } + } + + void onPermissionPush() { + getMicrophonePermission().then((value) { + if (value) { + // 有权限 + Navigator.pushNamed(context, Routers.nearbyLockPage); + } else { + //没有权限 + openAppSettings(); //打开app系统设置 + } + }); + } + void onShow() {} void onHide() {} diff --git a/star_lock/lib/mine/mine/starLockMine_page.dart b/star_lock/lib/mine/mine/starLockMine_page.dart index c9611f05..c1830492 100644 --- a/star_lock/lib/mine/mine/starLockMine_page.dart +++ b/star_lock/lib/mine/mine/starLockMine_page.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; +import 'package:star_lock/flavors.dart'; import '../../appRouters.dart'; import '../../app_settings/app_colors.dart'; @@ -144,11 +145,13 @@ class StarLockMinePageState extends State with BaseWidget { Get.back(); Get.toNamed(Routers.mineSetPage); }), - mineItem('images/mine/icon_mine_main_vip.png', - TranslationLoader.lanKeys!.valueAddedServices!.tr, () { - Get.back(); - Get.toNamed(Routers.valueAddedServicesPage); - }), + F.appFlavor == Flavor.sky + ? Container() + : mineItem('images/mine/icon_mine_main_vip.png', + TranslationLoader.lanKeys!.valueAddedServices!.tr, () { + Get.back(); + Get.toNamed(Routers.valueAddedServicesPage); + }), mineItem('images/mine/icon_mine_main_shoppingcart.png', "配件商城".tr, () { Get.back(); diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_page.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_page.dart index 266ff343..61a3557f 100644 --- a/star_lock/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_page.dart +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_page.dart @@ -8,7 +8,9 @@ import 'package:image_picker/image_picker.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:star_lock/app_settings/app_colors.dart'; import 'package:star_lock/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_logic.dart'; +import 'package:star_lock/tools/appFirstEnterHandle.dart'; import 'package:star_lock/tools/custom_bottom_sheet.dart'; +import 'package:star_lock/tools/storage.dart'; import '../../../appRouters.dart'; import '../../../tools/commonItem.dart'; import '../../../tools/titleAppBar.dart'; @@ -69,8 +71,18 @@ class _MinePersonInfoPageState extends State { fit: BoxFit.fill, ), ), - action: () { - requestCameraPermission(); + action: () async { + //安卓平台下首次进入应用需向用户告知获取权限用途弹窗 + if (Platform.isAndroid) { + AppFirstEnterHandle() + .getAppFirstEnter(context, isAgreeCamera); + var getFlag = await Storage.getString(isAgreeCamera); + if (getFlag == isAgreeCamera) { + requestCameraPermission(); + } + } else { + requestCameraPermission(); + } }, )), Obx(() => CommonItem( diff --git a/star_lock/lib/starLockApplication/starLockApplication.dart b/star_lock/lib/starLockApplication/starLockApplication.dart index e05ae1ea..1357607d 100644 --- a/star_lock/lib/starLockApplication/starLockApplication.dart +++ b/star_lock/lib/starLockApplication/starLockApplication.dart @@ -15,7 +15,7 @@ class StarLockApplication extends StatefulWidget { class _StarLockApplicationState extends State { @override Widget build(BuildContext context) { - AppFirstEnterHandle().getAppFirstEnter(context); + AppFirstEnterHandle().getAppFirstEnter(context, isAgreePrivacy); return FutureBuilder( future: getLoginStatus(), diff --git a/star_lock/lib/talk/call/audioPlayerTask.dart b/star_lock/lib/talk/call/audioPlayerTask.dart new file mode 100644 index 00000000..bc7a3a7e --- /dev/null +++ b/star_lock/lib/talk/call/audioPlayerTask.dart @@ -0,0 +1,22 @@ +// Audio player task implementation +import 'package:audio_service/audio_service.dart'; + +class AudioPlayerTask extends BackgroundAudioTask { + @override + Future onStart(Map? params) async { + // Load and play audio here + // Example: + // AudioPlayer audioPlayer = AudioPlayer(); + // await audioPlayer.play('path_to_audio.mp3'); + } + + @override + Future onStop() async { + // Stop audio playback and clean up resources + } + + @override + Future onPause() async { + // Pause audio playback + } +} diff --git a/star_lock/lib/tools/appFirstEnterHandle.dart b/star_lock/lib/tools/appFirstEnterHandle.dart index 067a2b7c..f3d66649 100644 --- a/star_lock/lib/tools/appFirstEnterHandle.dart +++ b/star_lock/lib/tools/appFirstEnterHandle.dart @@ -9,10 +9,30 @@ import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart'; import 'package:star_lock/tools/storage.dart'; class AppFirstEnterHandle { - Future getAppFirstEnter(BuildContext widgetContext) async { - var isFirstTime = await Storage.getString(isFirstEnter); - if (isFirstTime != isFirstEnter) { - showPrivacyAgreementAlert(widgetContext); + Future getAppFirstEnter(BuildContext widgetContext, String flagStr) async { + var getFlag = await Storage.getString(flagStr); + switch (flagStr) { + case isAgreePrivacy: // 隐私协议 + { + if (getFlag != isAgreePrivacy) + showPrivacyAgreementAlert(widgetContext); + } + break; + case isAgreePosition: // 位置权限 + { + if (getFlag != isAgreePosition) showPositionAlert(widgetContext); + } + break; + case isAgreeCamera: // 相机权限 + { + if (getFlag != isAgreeCamera) showCameraAlert(widgetContext); + } + break; + default: + { + print('没有匹配的flagStr'); + } + break; } } @@ -77,7 +97,63 @@ class AppFirstEnterHandle { style: TextStyle(color: Colors.blue), ), onPressed: () { - Storage.setString(isFirstEnter, isFirstEnter); + Storage.setString(isAgreePrivacy, isAgreePrivacy); + Navigator.of(context).pop(); + }, + ), + ], + ); + }, + ); + } + + //位置权限弹窗 + void showPositionAlert(BuildContext widgetContext) { + showCupertinoDialog( + context: widgetContext, + builder: (context) { + return CupertinoAlertDialog( + title: const Text('位置权限'), + content: const Text('请开启位置权限,应用需要位置权限才可以完成智能锁和网关的蓝牙操作'), + actions: [ + CupertinoDialogAction( + child: const Text('取消'), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + CupertinoDialogAction( + child: const Text('确定'), + onPressed: () { + Storage.setString(isAgreePosition, isAgreePosition); + Navigator.of(context).pop(); + }, + ), + ], + ); + }, + ); + } + + //相机权限弹窗 + void showCameraAlert(BuildContext widgetContext) { + showCupertinoDialog( + context: widgetContext, + builder: (context) { + return CupertinoAlertDialog( + title: const Text('相机/相册权限'), + content: const Text('请开启本地存储权限,允许应用读写设备上的照片及文件'), + actions: [ + CupertinoDialogAction( + child: const Text('取消'), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + CupertinoDialogAction( + child: const Text('确定'), + onPressed: () { + Storage.setString(isAgreeCamera, isAgreeCamera); Navigator.of(context).pop(); }, ), diff --git a/star_lock/lib/tools/storage.dart b/star_lock/lib/tools/storage.dart index 4d42487d..d094212c 100644 --- a/star_lock/lib/tools/storage.dart +++ b/star_lock/lib/tools/storage.dart @@ -15,7 +15,9 @@ const saveBlueToken = "BlueGetToken"; const currentConnectionLockId = "CurrentConnectionLockId"; const currentConnectionMacAddress = "CurrentConnectionMacAddress"; const ifIsDemoModeOrNot = "IfIsDemoModeOrNot"; -const isFirstEnter = "isFirstEnter"; //是否首次进入应用 +const isAgreePrivacy = "isAgreePrivacy"; //是否同意隐私协议弹窗 +const isAgreePosition = "isAgreePosition"; //是否同意获取位置弹窗 +const isAgreeCamera = "isAgreeCamera"; //是否同意获取相机/相册弹窗 const saveUserLoginData = "userLoginData";