From b3fc551780d9788cb9ec28a234cb871209f9f7ce Mon Sep 17 00:00:00 2001 From: datang Date: Mon, 8 Aug 2022 10:38:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9D=83=E9=99=90=E6=8E=88=E4=BA=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/src/main/AndroidManifest.xml | 2 + lib/main.dart | 26 ++-- lib/ui/user/privacy_rights_page.dart | 178 +++++++++++++++++------ lib/ui/user/user_page.dart | 7 +- pubspec.lock | 55 +++---- pubspec.yaml | 4 +- 6 files changed, 176 insertions(+), 96 deletions(-) diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index d1a8d3b..882a27b 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -31,6 +31,8 @@ android:name="flutterEmbedding" android:value="2" /> + + diff --git a/lib/main.dart b/lib/main.dart index 10fdf4b..303263d 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -109,19 +109,19 @@ class _MyAppState extends State { // production: false, // debug: true // ); - service.start(); - List permissions = [ - Permission.sms, - Permission.phone, - ]; - PermissionHelper.check(permissions, onSuccess: () { - print('onSuccess'); - }, onFailed: () { - print('onFailed'); - }, onOpenSetting: () { - print('onOpenSetting'); - openAppSettings(); - }); + // service.start(); + // List permissions = [ + // Permission.sms, + // Permission.phone, + // ]; + // PermissionHelper.check(permissions, onSuccess: () { + // print('onSuccess'); + // }, onFailed: () { + // print('onFailed'); + // }, onOpenSetting: () { + // print('onOpenSetting'); + // openAppSettings(); + // }); } onMessage(SmsMessage message) async { diff --git a/lib/ui/user/privacy_rights_page.dart b/lib/ui/user/privacy_rights_page.dart index 74a3a61..7a53e0e 100644 --- a/lib/ui/user/privacy_rights_page.dart +++ b/lib/ui/user/privacy_rights_page.dart @@ -1,12 +1,14 @@ import 'package:flutter/material.dart'; +import 'package:permission_handler/permission_handler.dart'; +import 'package:permission_handler_platform_interface/permission_handler_platform_interface.dart'; import 'package:project_telephony/base/base_style.dart'; -import 'package:project_telephony/main.dart'; import 'package:project_telephony/ui/widget/plone_back_button.dart'; import 'package:project_telephony/utils/headers.dart'; import 'package:telephony/telephony.dart'; class PrivacyRightsPage extends StatefulWidget { final String name; + const PrivacyRightsPage({Key? key, required this.name}) : super(key: key); @override @@ -22,6 +24,29 @@ final Telephony telephony = Telephony.instance; // } class _PrivacyRightsPageState extends State { + final Permission _permission = Permission.phone; + final PermissionHandlerPlatform _permissionHandler = + PermissionHandlerPlatform.instance; + PermissionStatus _permissionStatus = PermissionStatus.denied; + + Future requestPermission(Permission permission) async { + final status = await _permissionHandler.requestPermissions([permission]); + setState(() { + _permissionStatus = status[permission] ?? PermissionStatus.denied; + }); + } + + @override + void initState() { + super.initState(); + _listenForPermissionStatus(); + } + + void _listenForPermissionStatus() async { + final status = await _permissionHandler.checkPermissionStatus(_permission); + setState(() => _permissionStatus = status); + } + @override Widget build(BuildContext context) { return Scaffold( @@ -67,47 +92,116 @@ class _PrivacyRightsPageState extends State { // } _getRights(bool pd) { - return GestureDetector( - onTap: () {}, - child: Container( - height: 144.w, - width: 750.w, - padding: EdgeInsets.symmetric(horizontal: 64.w, vertical: 17.w), - child: Row( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - '获取设备来电', - style: TextStyle( - fontSize: 32.sp, - color: BaseStyle.color333333, - fontWeight: FontWeight.bold), - ), - 16.hb, - Text('用于获取设备1', - style: TextStyle( - fontSize: 28.sp, color: BaseStyle.color999999)), - ], - ), - 269.wb, - Text(pd ? "未允许" : "已允许", - style: TextStyle( - fontSize: 24.sp, - color: pd - ? const Color(0xFFFF4D4D) - : BaseStyle.color999999)), - SizedBox( - width: 48.w, - height: 48.w, - child: const Icon( - Icons.keyboard_arrow_right, - ), - ), - ], - )), + return ListView( + children: Permission.values + .where((permission) { + return permission == Permission.phone || + permission == Permission.sms; + }) + .map((permission) => PermissionWidget(permission)) + .toList()); + } +} + +class PermissionWidget extends StatefulWidget { + const PermissionWidget(this._permission); + + final Permission _permission; + + @override + _PermissionState createState() => _PermissionState(_permission); +} + +class _PermissionState extends State { + _PermissionState(this._permission); + + final Permission _permission; + final PermissionHandlerPlatform _permissionHandler = + PermissionHandlerPlatform.instance; + PermissionStatus _permissionStatus = PermissionStatus.denied; + List title = [ + "获取来电权限", + "获取短信权限", + ]; + List sub = [ + "用于监听来电状态", + "用于发送短信", + ]; + + @override + void initState() { + super.initState(); + + _listenForPermissionStatus(); + } + + void _listenForPermissionStatus() async { + final status = await _permissionHandler.checkPermissionStatus(_permission); + setState(() => _permissionStatus = status); + } + + Color getPermissionColor() { + switch (_permissionStatus) { + case PermissionStatus.denied: + return Colors.red; + case PermissionStatus.granted: + return Colors.green; + case PermissionStatus.limited: + return Colors.orange; + default: + return Colors.grey; + } + } + + String getPermissionStu() { + switch (_permissionStatus) { + case PermissionStatus.denied: + return "未允许"; + case PermissionStatus.granted: + return "已允许"; + default: + return "未允许"; + } + } + + @override + Widget build(BuildContext context) { + return ListTile( + title: Text( + _permission.value==8?title[0]:title[1], + style: Theme.of(context).textTheme.titleMedium, + ), + subtitle: Text( + _permission.value==8?sub[0]:sub[1], + ), + trailing: Wrap( + children: [ + Text(getPermissionStu(), + style: TextStyle(color: getPermissionColor())), + const Icon(Icons.arrow_forward_ios), + ], + ), + onTap: () { + requestPermission(_permission); + }, ); } + + void checkServiceStatus( + BuildContext context, PermissionWithService permission) async { + ScaffoldMessenger.of(context).showSnackBar(SnackBar( + content: Text( + (await _permissionHandler.checkServiceStatus(permission)).toString()), + )); + } + + Future requestPermission(Permission permission) async { + final status = await _permissionHandler.requestPermissions([permission]); + + setState(() { + print(status); + _permissionStatus = status[permission] ?? PermissionStatus.denied; + print(_permissionStatus); + }); + } } diff --git a/lib/ui/user/user_page.dart b/lib/ui/user/user_page.dart index 0fc8e52..4e23477 100644 --- a/lib/ui/user/user_page.dart +++ b/lib/ui/user/user_page.dart @@ -2,8 +2,8 @@ import 'package:bot_toast/bot_toast.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:permission_handler/permission_handler.dart'; +import 'package:permission_handler_platform_interface/permission_handler_platform_interface.dart'; import 'package:project_telephony/base/base_style.dart'; -import 'package:project_telephony/ui/home/home_page.dart'; import 'package:project_telephony/ui/login/login_page.dart'; import 'package:project_telephony/ui/user/members_page.dart'; import 'package:project_telephony/ui/user/privacy_rights_page.dart'; @@ -31,6 +31,8 @@ void initState() {} class _UserPageState extends State { bool vle = false; bool tooken = true; + + @override Widget build(BuildContext context) { return CloudScaffold( @@ -54,7 +56,8 @@ class _UserPageState extends State { PloneBottom( border: false, onTap: () { - PermissionUtils.requestAllPermission() + PermissionUtils.requestAllPermission(); + // Get.to(() => const HomePage()); }, textColor: const Color(0xFF1890FF), diff --git a/pubspec.lock b/pubspec.lock index 1493881..d1422ca 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -168,7 +168,7 @@ packages: name: collection url: "https://pub.dartlang.org" source: hosted - version: "1.15.0" + version: "1.16.0" color: dependency: transitive description: @@ -280,7 +280,7 @@ packages: name: fake_async url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" + version: "1.3.0" ffi: dependency: transitive description: @@ -320,28 +320,7 @@ packages: name: flutter_background_service url: "https://pub.dartlang.org" source: hosted - version: "0.2.8+5" - flutter_background_service_android: - dependency: transitive - description: - name: flutter_background_service_android - url: "https://pub.dartlang.org" - source: hosted - version: "0.0.2" - flutter_background_service_ios: - dependency: transitive - description: - name: flutter_background_service_ios - url: "https://pub.dartlang.org" - source: hosted - version: "0.0.2" - flutter_background_service_platform_interface: - dependency: transitive - description: - name: flutter_background_service_platform_interface - url: "https://pub.dartlang.org" - source: hosted - version: "0.0.1+3" + version: "0.2.6" flutter_gen_core: dependency: transitive description: @@ -369,7 +348,7 @@ packages: name: flutter_native_splash url: "https://pub.dartlang.org" source: hosted - version: "1.3.3" + version: "1.3.2" flutter_plugin_android_lifecycle: dependency: transitive description: @@ -435,7 +414,7 @@ packages: name: grinder url: "https://pub.dartlang.org" source: hosted - version: "0.9.2" + version: "0.9.1" hive: dependency: "direct main" description: @@ -533,7 +512,7 @@ packages: name: js url: "https://pub.dartlang.org" source: hosted - version: "0.6.3" + version: "0.6.4" json_annotation: dependency: "direct main" description: @@ -582,7 +561,7 @@ packages: name: material_color_utilities url: "https://pub.dartlang.org" source: hosted - version: "0.1.3" + version: "0.1.4" meta: dependency: transitive description: @@ -617,7 +596,7 @@ packages: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.8.0" + version: "1.8.1" path_provider: dependency: transitive description: @@ -631,7 +610,7 @@ packages: name: path_provider_android url: "https://pub.dartlang.org" source: hosted - version: "2.0.17" + version: "2.0.12" path_provider_ios: dependency: transitive description: @@ -689,7 +668,7 @@ packages: source: hosted version: "9.0.4" permission_handler_platform_interface: - dependency: transitive + dependency: "direct main" description: name: permission_handler_platform_interface url: "https://pub.dartlang.org" @@ -820,7 +799,7 @@ packages: name: shelf url: "https://pub.dartlang.org" source: hosted - version: "1.3.2" + version: "1.2.0" shelf_web_socket: dependency: transitive description: @@ -853,7 +832,7 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.8.1" + version: "1.8.2" sp_util: dependency: transitive description: @@ -902,7 +881,7 @@ packages: name: telephony url: "https://pub.dartlang.org" source: hosted - version: "0.1.4" + version: "0.2.0" term_glyph: dependency: transitive description: @@ -916,7 +895,7 @@ packages: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.4.8" + version: "0.4.9" time: dependency: transitive description: @@ -958,7 +937,7 @@ packages: name: vector_math url: "https://pub.dartlang.org" source: hosted - version: "2.1.1" + version: "2.1.2" velocity_x: dependency: "direct main" description: @@ -1016,5 +995,5 @@ packages: source: hosted version: "3.1.1" sdks: - dart: ">=2.16.1 <3.0.0" - flutter: ">=2.8.1" + dart: ">=2.17.0-0 <3.0.0" + flutter: ">=2.8.0" diff --git a/pubspec.yaml b/pubspec.yaml index eec5d0a..a06a253 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -34,7 +34,7 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.2 - telephony: ^0.1.4 + telephony: ^0.2.0 ## 获取来电状态 # provider: ^6.0.3 # 获取通话记录 @@ -68,6 +68,8 @@ dependencies: flustars: ^2.0.1 # model生成 json_annotation: ^4.6.0 + permission_handler_platform_interface: ^3.7.0 + # # jdk # jverify: ^2.2.5 ## pub 集成