diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 882a27b..8966d8b 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -31,9 +31,11 @@ android:name="flutterEmbedding" android:value="2" /> + - + + diff --git a/android/app/src/main/res/ic_launcher.png b/android/app/src/main/res/ic_launcher.png new file mode 100644 index 0000000..7325a57 Binary files /dev/null and b/android/app/src/main/res/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index db77bb4..ab4708f 100644 Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-ldpi/ic_launcher.png b/android/app/src/main/res/mipmap-ldpi/ic_launcher.png new file mode 100644 index 0000000..36a6abb Binary files /dev/null and b/android/app/src/main/res/mipmap-ldpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index 17987b7..c36cfc6 100644 Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png index 09d4391..eb524ff 100644 Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index d5f1c8d..4ee0905 100644 Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index 4d6372e..b13fdb6 100644 Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/android/gradle.properties b/android/gradle.properties index 94adc3a..a777f0e 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,3 +1,4 @@ org.gradle.jvmargs=-Xmx1536M android.useAndroidX=true android.enableJetifier=true +android.jetifier.blacklist=bcprov-jdk15on diff --git a/assets/icons/sms.png b/assets/icons/sms.png new file mode 100644 index 0000000..617b2c6 Binary files /dev/null and b/assets/icons/sms.png differ diff --git a/lib/main.dart b/lib/main.dart index f528395..d76307e 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,5 +1,6 @@ import 'dart:async'; + import 'package:bot_toast/bot_toast.dart'; import 'package:call_log/call_log.dart'; import 'package:flutter/material.dart'; @@ -7,7 +8,10 @@ import 'package:flutter/services.dart'; import 'package:flutter_background_service/flutter_background_service.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_sms/flutter_sms.dart'; +import 'package:fluwx/fluwx.dart'; import 'package:get/get_navigation/src/root/get_material_app.dart'; +import 'package:permission_handler/permission_handler.dart'; +import 'package:permission_handler_platform_interface/permission_handler_platform_interface.dart'; import 'package:power_logger/power_logger.dart'; import 'package:project_telephony/providers/user_provider.dart'; @@ -16,13 +20,15 @@ import 'package:provider/provider.dart'; import 'package:telephony/telephony.dart'; import 'package:project_telephony/utils/hive_store.dart'; -void _sendSMS(String message, List recipents) async { - String _result = await sendSMS(message: message, recipients: recipents) - .catchError((onError) { - print(onError); - }); - print(_result); -} +// void _sendSMS(String message, List recipients) async { +// try{ +// String result = +// await sendSMS(message: message, recipients: recipients, sendDirect: true); +// print(result); +// } on PlatformException catch(e){ +// print(e.toString()); +// } +// } void main() async { WidgetsFlutterBinding.ensureInitialized(); @@ -30,81 +36,89 @@ void main() async { LoggerData.addData(details); FlutterError.presentError(details); }; - await initializeService(); + // await initializeService(); WidgetsFlutterBinding.ensureInitialized(); runApp(const MyApp()); } -Future initializeService() async { - final service = FlutterBackgroundService(); - service.setNotificationInfo(title: '短信助手', content: '正在后台运行'); - await service.configure( - androidConfiguration: AndroidConfiguration( - onStart: onStart, - autoStart: true, - isForegroundMode: true, - ), - iosConfiguration: IosConfiguration( - autoStart: true, - onForeground: onStart, - onBackground: onIosBackground, - ), - ); -} - -void onIosBackground() { - WidgetsFlutterBinding.ensureInitialized(); - // print('FLUTTER BACKGROUND FETCH'); -} - -void onStart() { - int flag = 0; - String? phoneNum, callState; - WidgetsFlutterBinding.ensureInitialized(); - - Timer.periodic(const Duration(seconds: 1), (timer) async { - CallState state = await Telephony.instance.callState; - callState = state.name; - print(callState!+" $flag"); - if (callState == "IDLE") { - if (flag != 0) { - flag = 0; - // print("object"); - final Iterable result = await CallLog.query(); - phoneNum = result.first.number; - // print(phoneNum); - // String message = "This is a test message!"; - // List recipents = ["10000", "10086"]; - // String _result = await sendSMS(message: message, recipients: recipents, sendDirect: true) - // .catchError((onError) { - // print(onError); - // }); - // print(_result); - phoneNum = result.first.number; - print(phoneNum); - final SmsSendStatusListener listener = (SendStatus status) { - print(status); - }; - Phone.telephony.sendSms( - to: phoneNum!, - message: "hello", - statusListener: listener, - isMultipart: true, - - ); - } - } else if (callState == "RINGING") { - flag++; - } else if (callState == "OFFHOOK") { - flag++; - } - }); -} - -class Phone { - static Telephony telephony = Telephony.instance; -} +// Future initializeService() async { +// final service = FlutterBackgroundService(); +// service.setNotificationInfo(title: '短信助手', content: '正在后台运行'); +// await service.configure( +// androidConfiguration: AndroidConfiguration( +// onStart: onStart, +// autoStart: true, +// isForegroundMode: true, +// ), +// iosConfiguration: IosConfiguration( +// autoStart: true, +// onForeground: onStart, +// onBackground: onIosBackground, +// ), +// ); +// } + +// void onIosBackground() { +// WidgetsFlutterBinding.ensureInitialized(); +// // print('FLUTTER BACKGROUND FETCH'); +// } +// +// void onStart() { +// int flag = 0; +// String phoneNum; +// String callState; +// WidgetsFlutterBinding.ensureInitialized(); +// Timer.periodic(const Duration(seconds: 1), (timer) async { +// CallState state = await Telephony.instance.callState; +// callState = state.name; +// // print(callState!+" $flag"); +// if (callState == "IDLE") { +// if (flag != 0) { +// flag = 0; +// // print("object"); +// final Iterable result = await CallLog.query(); +// // print(phoneNum); +// // String message = "This is a test message!"; +// // List recipents = ["10000", "10086"]; +// // String _result = await sendSMS(message: message, recipients: recipents, sendDirect: true) +// // .catchError((onError) { +// // print(onError); +// // }); +// // print(_result); +// phoneNum = result.first.number!; +// // List recipents=[ +// // phoneNum +// // ]; +// if(phoneNum.isEmpty){ +// print("At Least 1 Person or Message Required"); +// }else{ +// print("你好"+phoneNum); +// _sendSMS("你好", [phoneNum]); +// print("你好"+phoneNum); +// } +// // final SmsSendStatusListener listener = (SendStatus status) { +// // print(status); +// // }; +// // Phone.telephony.sendSms( +// // to: phoneNum!, +// // message: "hello", +// // statusListener: listener, +// // isMultipart: true, +// // +// // ); +// } +// } else if (callState == "RINGING") { +// flag++; +// } else if (callState == "OFFHOOK") { +// flag++; +// } +// }); +// } +// +// class Phone { +// static Telephony telephony = Telephony.instance; +// } class MyApp extends StatefulWidget { const MyApp({Key? key}) : super(key: key); @@ -119,12 +133,20 @@ class _MyAppState extends State { // the one in background. final telephony = Telephony.instance; @override + Future _Getpermission() async{ + await [Permission.sms,Permission.phone,].request(); +} void initState() { super.initState(); + final service = FlutterBackgroundService(); Future.delayed(const Duration(milliseconds: 0), () async { //Hive.initFlutter; + _Getpermission(); await HiveStore.init(); + registerWxApi( + appId: "wxd930ea5d5a228f5f",universalLink:"https://your.univerallink.com/link/ " + ); }); final inbox = Telephony.instance.getInboxSms(); // JPush jPush=JPush(); diff --git a/lib/model/hive/ContentHive.dart b/lib/model/hive/ContentHive.dart new file mode 100644 index 0000000..0e3c3b4 --- /dev/null +++ b/lib/model/hive/ContentHive.dart @@ -0,0 +1,27 @@ +import 'package:hive/hive.dart'; +import 'package:json_annotation/json_annotation.dart'; +import 'package:equatable/equatable.dart'; + +import 'content_list_model.dart'; +part 'ContentHive.g.dart'; + + +@JsonSerializable() +@HiveType(typeId:2) +class ContentHive extends Equatable{ + @HiveField(0) + final int id; + @HiveField(1) + final String content; + @HiveField(2) + final List list; + factory ContentHive.fromJson(Map json) =>_$ContentHiveFromJson(json); + + const ContentHive({ + required this.id, + required this.content, + required this.list, + }); + @override + List get props => [id,content,list]; +} \ No newline at end of file diff --git a/lib/model/hive/ContentHive.g.dart b/lib/model/hive/ContentHive.g.dart new file mode 100644 index 0000000..6bca3b7 --- /dev/null +++ b/lib/model/hive/ContentHive.g.dart @@ -0,0 +1,59 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'ContentHive.dart'; + +// ************************************************************************** +// TypeAdapterGenerator +// ************************************************************************** + +class ContentHiveAdapter extends TypeAdapter { + @override + final int typeId = 0; + + @override + ContentHive read(BinaryReader reader) { + final numOfFields = reader.readByte(); + final fields = { + for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(), + }; + return ContentHive( + id: fields[0] as int, + content: fields[1] as String, + list: (fields[3] as List).cast(), + ); + } + + @override + void write(BinaryWriter writer, ContentHive obj) { + writer + ..writeByte(3) + ..writeByte(0) + ..write(obj.id) + ..writeByte(1) + ..write(obj.content) + ..writeByte(3) + ..write(obj.list); + } + + @override + int get hashCode => typeId.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is ContentHiveAdapter && + runtimeType == other.runtimeType && + typeId == other.typeId; +} + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +ContentHive _$ContentHiveFromJson(Map json) => ContentHive( + id: json['id'] as int, + content: json['content'] as String, + list: (json['list'] as List) + .map((e) => ContentListModel.fromJson(e as Map)) + .toList(), + ); diff --git a/lib/model/hive/content_list_model.dart b/lib/model/hive/content_list_model.dart new file mode 100644 index 0000000..c8ae6f2 --- /dev/null +++ b/lib/model/hive/content_list_model.dart @@ -0,0 +1,19 @@ +import 'package:json_annotation/json_annotation.dart'; +import 'package:equatable/equatable.dart'; +part 'content_list_model.g.dart'; + + +@JsonSerializable() +class ContentListModel extends Equatable{ + final int index; + final String content; + factory ContentListModel.fromJson(Map json) =>_$ContentListModelFromJson(json); + + + const ContentListModel({ + required this.index, + required this.content, + }); + @override + List get props => [index,content]; +} \ No newline at end of file diff --git a/lib/model/hive/content_list_model.g.dart b/lib/model/hive/content_list_model.g.dart new file mode 100644 index 0000000..f512f2b --- /dev/null +++ b/lib/model/hive/content_list_model.g.dart @@ -0,0 +1,13 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'content_list_model.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +ContentListModel _$ContentListModelFromJson(Map json) => + ContentListModel( + index: json['index'] as int, + content: json['content'] as String, + ); diff --git a/lib/providers/content_provider.dart b/lib/providers/content_provider.dart new file mode 100644 index 0000000..1170def --- /dev/null +++ b/lib/providers/content_provider.dart @@ -0,0 +1,14 @@ +import 'package:flutter/material.dart'; +import 'package:hive/hive.dart'; + +import '../model/hive/ContentHive.dart'; + +class ContentListModel extends ChangeNotifier{ + late Box _regionBox; + List _regions=[]; + List get regions=>_regions; + Future init() async{} + // _regionBox = await Hive.openBox("ContentListBox"); + // var + +} \ No newline at end of file diff --git a/lib/ui/home/content_page.dart b/lib/ui/home/content_page.dart index 9676032..4e58334 100644 --- a/lib/ui/home/content_page.dart +++ b/lib/ui/home/content_page.dart @@ -1,9 +1,12 @@ - +import 'dart:async'; +import 'dart:io'; import 'package:call_log/call_log.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_background_service/flutter_background_service.dart'; import 'package:flutter_sms/flutter_sms.dart'; import 'package:get_phone_number/get_phone_number.dart'; +import 'package:hive/hive.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:project_telephony/base/base_style.dart'; import 'package:project_telephony/ui/home/content_details_page.dart'; @@ -23,10 +26,14 @@ class ContentPage extends StatefulWidget { _ContentPageState createState() => _ContentPageState(); } + + class _ContentPageState extends State { int _select = 0; List textList = ['欢迎你的来电', '祝您生活愉快', '感谢您的来电我们会尽快处理的', '自定义短信内容']; List textList1 = ['自定义短信内容']; + late String phoneNum; + late String callState; @override Widget build(BuildContext context) { return Scaffold( @@ -70,7 +77,7 @@ class _ContentPageState extends State { }, )); } else { - bool? permissionsGranted = await telephony.requestPhonePermissions; + // bool? permissionsGranted = await telephony.requestPhonePermissions; // print(permissionsGranted); // if(permissionsGranted!){ // print(content); @@ -89,20 +96,12 @@ class _ContentPageState extends State { // message: content, // isMultipart: true // ); - List recipents=["13395740386"]; - _sendSMS(content,recipents); - // CallState state = await telephony.callState; - // print(state); - // DataState state1 = await telephony.cellularDataState; - // print(state1); - // String? operatorName = await telephony.networkOperatorName; - // print(operatorName); - // NetworkType type = await telephony.dataNetworkType; - // print(type); - // PhoneType type1 = await telephony.phoneType; - // print(type1); - String phoneNumber = await GetPhoneNumber().get(); - print('getPhoneNumber result: $phoneNumber'); + // List recipents=[ + // phoneNum + // ]; + // _sendSMS(content,recipents); + // String phoneNumber = await GetPhoneNumber().get(); + // print('getPhoneNumber result: $phoneNumber'); } setState(() {}); // print("这是数据" + textList[_s lect]); diff --git a/lib/ui/home/home_page.dart b/lib/ui/home/home_page.dart index 6e8945d..6999823 100644 --- a/lib/ui/home/home_page.dart +++ b/lib/ui/home/home_page.dart @@ -1,6 +1,13 @@ +import 'dart:async'; + +import 'package:call_log/call_log.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_background_service/flutter_background_service.dart'; +import 'package:flutter_sms/flutter_sms.dart'; import 'package:project_telephony/ui/home/content_page.dart'; import 'package:project_telephony/utils/headers.dart'; +import 'package:telephony/telephony.dart'; class HomePage extends StatefulWidget { const HomePage({Key? key}) : super(key: key); @@ -8,8 +15,104 @@ class HomePage extends StatefulWidget { @override _HomePageState createState() => _HomePageState(); } +void _sendSMS(String message, List recipients) async { + try{ + String result = + await sendSMS(message: message, recipients: recipients, sendDirect: true); + print(result); + } on PlatformException catch(e){ + print(e.toString()); + } +} +Future initializeService() async { + final service = FlutterBackgroundService(); + service.setNotificationInfo(title: '短信助手', content: '正在后台运行'); + await service.configure( + androidConfiguration: AndroidConfiguration( + onStart: onStart, + autoStart: true, + isForegroundMode: true, + ), + iosConfiguration: IosConfiguration( + autoStart: true, + onForeground: onStart, + onBackground: onIosBackground, + ), + ); +} + +void onIosBackground() { + WidgetsFlutterBinding.ensureInitialized(); + // print('FLUTTER BACKGROUND FETCH'); +} + +void onStart() { + int flag = 0; + String phoneNum; + String callState; + WidgetsFlutterBinding.ensureInitialized(); + Timer.periodic(const Duration(seconds: 1), (timer) async { + CallState state = await Telephony.instance.callState; + callState = state.name; + // print(callState!+" $flag"); + if (callState == "IDLE") { + if (flag != 0) { + flag = 0; + // print("object"); + final Iterable result = await CallLog.query(); + // print(phoneNum); + // String message = "This is a test message!"; + // List recipents = ["10000", "10086"]; + // String _result = await sendSMS(message: message, recipients: recipents, sendDirect: true) + // .catchError((onError) { + // print(onError); + // }); + // print(_result); + phoneNum = result.first.number!; + // List recipents=[ + // phoneNum + // ]; + if(phoneNum.isEmpty){ + print("At Least 1 Person or Message Required"); + }else{ + print("你好"+phoneNum); + _sendSMS("你好", [phoneNum]); + print("你好"+phoneNum); + } + // final SmsSendStatusListener listener = (SendStatus status) { + // print(status); + // }; + // Phone.telephony.sendSms( + // to: phoneNum!, + // message: "hello", + // statusListener: listener, + // isMultipart: true, + // + // ); + } + } else if (callState == "RINGING") { + flag++; + } else if (callState == "OFFHOOK") { + flag++; + } + }); +} + +class Phone { + static Telephony telephony = Telephony.instance; +} class _HomePageState extends State { + @override + void initState() { + // TODO: implement initState + super.initState(); + Future.delayed(const Duration(milliseconds: 0), () async { + //Hive.initFlutter; + await initializeService(); + + }); + } @override Widget build(BuildContext context) { return Scaffold( diff --git a/lib/ui/user/members_page.dart b/lib/ui/user/members_page.dart index 6edc9c1..17cbeb0 100644 --- a/lib/ui/user/members_page.dart +++ b/lib/ui/user/members_page.dart @@ -1,11 +1,16 @@ import 'package:bot_toast/bot_toast.dart'; import 'package:flutter/material.dart'; import 'package:project_telephony/base/base_style.dart'; +import 'package:project_telephony/ui/user/members_page.dart'; import 'package:project_telephony/ui/widget/check_radio.dart'; import 'package:project_telephony/ui/widget/plone_back_button.dart'; import 'package:project_telephony/ui/widget/plone_bottom.dart'; import 'package:project_telephony/ui/widget/putup_widget.dart'; import 'package:project_telephony/utils/headers.dart'; +import 'package:tobias/tobias.dart'; +import 'package:fluwx/fluwx.dart' as fluwx; +import '../../model/pay/wx_pay_model.dart'; +import '../../utils/pay_util.dart'; class MembersPage extends StatefulWidget { const MembersPage({Key? key}) : super(key: key); @@ -34,10 +39,11 @@ List payWay = [ }, {'payName': '支付宝支付', 'payUrl': Assets.icons.zhifubao.path} ]; -Map a = {}; class _MembersPageState extends State { @override + + Widget build(BuildContext context) { return Scaffold( body: Stack( @@ -69,7 +75,28 @@ class _MembersPageState extends State { PloneBottom( border: true, onTap: () async { - if (_selectIndex == 0) {} + if(_chooseItem == null){ + Get.snackbar('提示', "请先选择充值月份"); + }else{ + if (_selectIndex == 0) { + _wxPayFunc(); + }else{ + var result = await isAliPayInstalled(); // 这里判断是否安装支付宝 + if(!result){ + Get.snackbar('提示', "请先安装支付宝"); + }else{ + aliPay("paySign").then((payResult) { + // map["paySign"]是请求接口返回的字符串直接放进去就好了 + print("支付宝:" + payResult.toString()); + if (payResult['resultStatus'] == '9000') { + Get.snackbar('提示', "充值成功"); + } else { + Get.snackbar('提示', payResult['memo']); + } + }); + } + } + } }, textColor: const Color(0xFF333333), text: "立即开通", @@ -172,21 +199,61 @@ class _MembersPageState extends State { ); } - // Future _wxPayFunc() async { - // var base = await apiClient.request(API.user.wallet.assessRecharge, data: { - // 'count': widget.count, - // 'payType': 2, - // }); - // if (base.code == 0) { - // var wxPayModel = WxPayModel.fromJson(base.data['content']); - // await PayUtil().callWxPay( - // payModel: wxPayModel, - // ); + + Future _wxPayFunc() async{ + bool isInstalled=await fluwx.isWeChatInstalled; + if(!isInstalled){ + BotToast.showText(text: "请先安装微信"); + return ; + } + //调起支付 + fluwx.payWithWeChat( + appId: "wxd930ea5d5a228f5f", + partnerId: "partnerId", + prepayId: "prepayId", + packageValue: "packageValue", + nonceStr: "nonceStr", + timeStamp: 1597927308, + sign: "sign"); + fluwx.weChatResponseEventHandler.listen((event) { if(event.isSuccessful){ + BotToast.showText(text: "微信支付成功"); + }else{ + BotToast.showText(text: "微信支付失败"); + } + }); + // var wxPayModel = WxPayModel.fromJson({ + // "prepayId": "wx121434071826969924754d7d3309520000", + // "partnerId": "1622850618", + // "timeStamp": "1660286047", + // "nonceStr": "W14Z6RbKcHcI6QTETFyrxteD3m2P7ZaF", + // "package": "Sign=WXPay", + // "sign": "i4LDk+FlAfXukLPet6oFdtVkAXHv8aKkajO4i2tiXETBqudWJPzYAaziPH3eBo1yCvkMOyoVddWDKqHXhwrN2uvubz8YpSICt9yZBcndVaXOK+X9hY765sYoFV6sGHz5iuPljTRUWWrmc8GYMEs8TlLDB5Q50NenzJSChdfDtZRV4kXtVK6xY9b0y++eUo/snzpmq/X6GwS9n0auKkT0TKW1C30/Hzpw3SMziXPP02TvBvbqj57f6rHuGJS/LUX2ZwCR8iFZsfuiXo+7lyHHsimr4jVczdS6VtobeekrPq4vTe72d/HU/ECEZRSYxsL5DbyS2TvSNzFA6Z7wGDzkpQ==" + // }); + // await PayUtil().callWxPay( + // payModel: wxPayModel, + // ); + } + // base ={ + // "content": { + // "prepayId": "wx121434071826969924754d7d3309520000", + // "partnerId": "1622850618", + // "timeStamp": "1660286047", + // "nonceStr": "W14Z6RbKcHcI6QTETFyrxteD3m2P7ZaF", + // "package": "Sign=WXPay", + // "sign": "i4LDk+FlAfXukLPet6oFdtVkAXHv8aKkajO4i2tiXETBqudWJPzYAaziPH3eBo1yCvkMOyoVddWDKqHXhwrN2uvubz8YpSICt9yZBcndVaXOK+X9hY765sYoFV6sGHz5iuPljTRUWWrmc8GYMEs8TlLDB5Q50NenzJSChdfDtZRV4kXtVK6xY9b0y++eUo/snzpmq/X6GwS9n0auKkT0TKW1C30/Hzpw3SMziXPP02TvBvbqj57f6rHuGJS/LUX2ZwCR8iFZsfuiXo+7lyHHsimr4jVczdS6VtobeekrPq4vTe72d/HU/ECEZRSYxsL5DbyS2TvSNzFA6Z7wGDzkpQ==" + // } + // }; + // await apiClient.request(API.user.wallet.assessRecharge, data: { + // 'count': widget.count, + // 'payType': 2, + // }); + // if (base.code ==null) { + // // } else { // BotToast.showText(text: "${base.msg}"); // } // } - + // // Future _aliPayFunc() async { // var base = await apiClient.request(API.user.wallet.assessRecharge, data: { // 'count': widget.count, diff --git a/lib/ui/user/privacy_rights_page.dart b/lib/ui/user/privacy_rights_page.dart index cceb690..99f9dd8 100644 --- a/lib/ui/user/privacy_rights_page.dart +++ b/lib/ui/user/privacy_rights_page.dart @@ -1,4 +1,5 @@ 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/ui/widget/plone_back_button.dart'; @@ -22,27 +23,29 @@ final Telephony telephony = Telephony.instance; // initPlatformState(); // } 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; - }); - } - + // final Permission _permission = ; + // final PermissionHandlerPlatform _permissionHandler = + // PermissionHandlerPlatform.instance; + // PermissionStatus _permissionStatus = Permission.phone.request() as PermissionStatus; + // PermissionStatus _permissionStatus2 = Permission.sms.request() as PermissionStatus; + + // Future requestPermission(Permission permission) async { + // final status = await _permissionHandler.requestPermissions([permission]); + // setState(() { + // _permissionStatus = status[permission] ?? PermissionStatus.denied; + // }); + // } +bool sms=false; +bool plone=false; @override void initState() { super.initState(); _listenForPermissionStatus(); } - void _listenForPermissionStatus() async { - final status = await _permissionHandler.checkPermissionStatus(_permission); - setState(() => _permissionStatus = status); + Future _listenForPermissionStatus() async { + sms=await Permission.sms.request().isGranted; + plone =await Permission.phone.request().isGranted; } @override @@ -61,144 +64,55 @@ class _PrivacyRightsPageState extends State { leading: const CloudBackButton(isSpecial: true), backgroundColor: kForeGroundColor), backgroundColor: Colors.white, - body: widget.name == "隐私政策" ? null : _getRights(true), + body: widget.name == "隐私政策" ? null : _getRights(), ); } - - // onMessage(SmsMessage message) async { - // setState(() { - // body = message.body ?? "error reading message body."; - // print(body); - // }); - // } - // - // onSendStatus(SendStatus status) { - // setState(() { - // body = status == SendStatus.SENT ? "sent" : "delivered"; - // }); - // } - // - // Future initPlatformState() async { - // final bool? result = await telephony.requestPhoneAndSmsPermissions; - // if (result != null && result) { - // telephony.listenIncomingSms( - // onNewMessage: onMessage, - // onBackgroundMessage: onBackgroundMessage, - // listenInBackground: true); + // Color getPermissionColor() { + // if(true){ + // return Colors.red; + // }else{ + // return Colors.green; // } - // if (!mounted) return; // } - _getRights(bool pd) { - 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.red; - } - } - String getPermissionStu() { - switch (_permissionStatus) { - case PermissionStatus.denied: - return "未允许"; - case PermissionStatus.granted: - return "已允许"; - default: - return "未允许"; - } - } - - @override - Widget build(BuildContext context) { - return ListTile( + // String getPermissionStu() { + // if (false) { + // return "未允许"; + // } else { + // return "已允许"; + // } + // } + _getRights(){ + return ListTile( + onTap: ()async{ + // await Permission.phone.request(); + // await Permission.sms.request(); + // Map statuses = await [ + // Permission.sms, + // Permission.phone, + // ].request(); + // + // openAppSettings(); + print(await Permission.phone.request().isGranted); + print(await Permission.sms.request().isGranted); + }, title: Text( - _permission.value==8?title[0]:title[1], + '获取设备来电', style: Theme.of(context).textTheme.titleMedium, ), - subtitle: Text( - _permission.value==8?sub[0]:sub[1], + subtitle: const Text( + "获取设备", ), trailing: Wrap( children: [ - Text(getPermissionStu(), - style: TextStyle(color: getPermissionColor())), + Text(sms & plone ?"已允许":"未允许", + style: TextStyle(color: sms & plone ?Colors.green:Colors.red)), 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); - }); - } -} \ No newline at end of file +} diff --git a/lib/ui/user/user_page.dart b/lib/ui/user/user_page.dart index 68617c1..f2c2378 100644 --- a/lib/ui/user/user_page.dart +++ b/lib/ui/user/user_page.dart @@ -22,6 +22,7 @@ import '../../permission.dart'; import '../../providers/user_provider.dart'; import '../../utils/toast/cloud_toast.dart'; import '../../utils/user_tool.dart'; +import '../home/content_details_page.dart'; import '../home/home_page.dart'; class UserPage extends StatefulWidget { @@ -34,7 +35,7 @@ class UserPage extends StatefulWidget { final Telephony telephony = Telephony.instance; class _UserPageState extends State { - bool vle = false; + bool vle =PermissionStatus.denied.isGranted; final userProvider = Provider.of(Get.context!, listen: false); @override @@ -129,6 +130,7 @@ class _UserPageState extends State { ), ) ], + ), ); } @@ -164,6 +166,7 @@ class _UserPageState extends State { _getBotton() { return GestureDetector( onTap: () { + // print(vle); Get.to(() => const MembersPage()); }, child: Container( @@ -235,7 +238,14 @@ class _UserPageState extends State { onTap: () async { pd ? "" - : Get.to(() => PrivacyRightsPage( + : name=="短信标签"?Get.to(()=> ContentDetailsPage( + content: "", + ploneBack: (String textContent) { + // print("这是数据" + textContent); + // textList.setAll(index, {textContent}); + }, + )): + Get.to(() => PrivacyRightsPage( name: name, )); }, @@ -259,22 +269,23 @@ class _UserPageState extends State { trailing: pd ? Switch( value: vle, - onChanged: (value) { - List permissions = [ - Permission.sms, - Permission.phone, - ]; - PermissionHelper.check(permissions, onSuccess: () { - print('onSuccess'); - }, onFailed: () { - print('onFailed'); - }, onOpenSetting: () { - print('onOpenSetting'); - openAppSettings(); - }); - setState(() { - vle = value; - }); + onChanged: (value) async{ + await Permission.phone.request(); + // List permissions = [ + // Permission.sms, + // Permission.phone, + // ]; + // PermissionHelper.check(permissions, onSuccess: () { + // print('onSuccess'); + // }, onFailed: () { + // print('onFailed'); + // }, onOpenSetting: () { + // print('onOpenSetting'); + // openAppSettings(); + // }); + // setState(() { + // vle = value; + // }); }) : const Icon(Icons.keyboard_arrow_right)), ), diff --git a/pubspec.lock b/pubspec.lock index 72fa926..d566820 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -7,14 +7,14 @@ packages: name: _fe_analyzer_shared url: "https://pub.dartlang.org" source: hosted - version: "44.0.0" + version: "46.0.0" analyzer: dependency: transitive description: name: analyzer url: "https://pub.dartlang.org" source: hosted - version: "4.4.0" + version: "4.6.0" archive: dependency: transitive description: @@ -259,7 +259,7 @@ packages: name: device_info_plus_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.3.0+1" + version: "2.6.1" device_info_plus_web: dependency: transitive description: @@ -743,7 +743,7 @@ packages: name: path_provider_android url: "https://pub.dartlang.org" source: hosted - version: "2.0.17" + version: "2.0.19" path_provider_ios: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index aa6d7c1..d1b35a6 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -97,6 +97,7 @@ dev_dependencies: #导入包整理 import_sorter: ^4.5.1 hive_generator: ^1.1.0 + #model自动生成 json_serializable: ^6.1.3 build_runner: ^2.0.2