Commit e0d63b2e35d1cd3c10f0f73b0b661c6c1d24f0bc

Authored by wdn127929
1 parent 17e7bede

2.2.5 bug修复 位置权限删除一个always

@@ -11,14 +11,14 @@ if (flutterRoot == null) { @@ -11,14 +11,14 @@ if (flutterRoot == null) {
11 throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") 11 throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
12 } 12 }
13 13
14 -def flutterVersionCode = "223" 14 +def flutterVersionCode = "225"
15 if (flutterVersionCode == null) { 15 if (flutterVersionCode == null) {
16 - flutterVersionCode = '223' 16 + flutterVersionCode = '225'
17 } 17 }
18 18
19 -def flutterVersionName = "2.2.3" 19 +def flutterVersionName = "2.2.5"
20 if (flutterVersionName == null) { 20 if (flutterVersionName == null) {
21 - flutterVersionName = '2.2.3' 21 + flutterVersionName = '2.2.5'
22 } 22 }
23 23
24 apply plugin: 'com.android.application' 24 apply plugin: 'com.android.application'
@@ -66,7 +66,7 @@ PODS: @@ -66,7 +66,7 @@ PODS:
66 - Flutter 66 - Flutter
67 - path_provider (0.0.1): 67 - path_provider (0.0.1):
68 - Flutter 68 - Flutter
69 - - "permission_handler (4.4.0+hotfix.4)": 69 + - "permission_handler (5.1.0+2)":
70 - Flutter 70 - Flutter
71 - photo_manager (0.0.1): 71 - photo_manager (0.0.1):
72 - Flutter 72 - Flutter
@@ -222,7 +222,7 @@ SPEC CHECKSUMS: @@ -222,7 +222,7 @@ SPEC CHECKSUMS:
222 core_location_fluttify: 24cc9dcd986ac7059916632d2cb3babb1568ff61 222 core_location_fluttify: 24cc9dcd986ac7059916632d2cb3babb1568ff61
223 device_info: d7d233b645a32c40dfdc212de5cf646ca482f175 223 device_info: d7d233b645a32c40dfdc212de5cf646ca482f175
224 easy_contact_picker: 9ab9dc70e8ddde6e76a19ffc482d7bf899868730 224 easy_contact_picker: 9ab9dc70e8ddde6e76a19ffc482d7bf899868730
225 - Flutter: 0e3d915762c693b495b44d77113d4970485de6ec 225 + Flutter: 434fef37c0980e73bb6479ef766c45957d4b510c
226 flutter_app_badger: 65de4d6f0c34a891df49e6cfb8a1c0496426fa68 226 flutter_app_badger: 65de4d6f0c34a891df49e6cfb8a1c0496426fa68
227 flutter_bugly: c9800f4d5bc5bdc27ffdde3417a26ba44266e0c3 227 flutter_bugly: c9800f4d5bc5bdc27ffdde3417a26ba44266e0c3
228 flutter_statusbarcolor: 8afb1071ed8c58be929f1e32b36c629771fd2259 228 flutter_statusbarcolor: 8afb1071ed8c58be929f1e32b36c629771fd2259
@@ -234,7 +234,7 @@ SPEC CHECKSUMS: @@ -234,7 +234,7 @@ SPEC CHECKSUMS:
234 install_plugin: a13e7ddd2bab0c701b48cd359c26d0394125b6fb 234 install_plugin: a13e7ddd2bab0c701b48cd359c26d0394125b6fb
235 package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62 235 package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62
236 path_provider: abfe2b5c733d04e238b0d8691db0cfd63a27a93c 236 path_provider: abfe2b5c733d04e238b0d8691db0cfd63a27a93c
237 - permission_handler: 8278954f2382902f63f00dd8828769c0bd6d511b 237 + permission_handler: ccb20a9fad0ee9b1314a52b70b76b473c5f8dab0
238 photo_manager: f7c619c2cc8c2adb8d85c63363babac477de9c67 238 photo_manager: f7c619c2cc8c2adb8d85c63363babac477de9c67
239 Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96 239 Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96
240 shared_preferences: af6bfa751691cdc24be3045c43ec037377ada40d 240 shared_preferences: af6bfa751691cdc24be3045c43ec037377ada40d
@@ -251,4 +251,4 @@ SPEC CHECKSUMS: @@ -251,4 +251,4 @@ SPEC CHECKSUMS:
251 251
252 PODFILE CHECKSUM: a75497545d4391e2d394c3668e20cfb1c2bbd4aa 252 PODFILE CHECKSUM: a75497545d4391e2d394c3668e20cfb1c2bbd4aa
253 253
254 -COCOAPODS: 1.9.3 254 +COCOAPODS: 1.10.1
@@ -300,7 +300,6 @@ @@ -300,7 +300,6 @@
300 inputPaths = ( 300 inputPaths = (
301 "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh", 301 "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh",
302 "${BUILT_PRODUCTS_DIR}/FMDB/FMDB.framework", 302 "${BUILT_PRODUCTS_DIR}/FMDB/FMDB.framework",
303 - "${PODS_ROOT}/../Flutter/Flutter.framework",  
304 "${BUILT_PRODUCTS_DIR}/Reachability/Reachability.framework", 303 "${BUILT_PRODUCTS_DIR}/Reachability/Reachability.framework",
305 "${BUILT_PRODUCTS_DIR}/audioplayers/audioplayers.framework", 304 "${BUILT_PRODUCTS_DIR}/audioplayers/audioplayers.framework",
306 "${BUILT_PRODUCTS_DIR}/connectivity/connectivity.framework", 305 "${BUILT_PRODUCTS_DIR}/connectivity/connectivity.framework",
@@ -327,7 +326,6 @@ @@ -327,7 +326,6 @@
327 name = "[CP] Embed Pods Frameworks"; 326 name = "[CP] Embed Pods Frameworks";
328 outputPaths = ( 327 outputPaths = (
329 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FMDB.framework", 328 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FMDB.framework",
330 - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Flutter.framework",  
331 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Reachability.framework", 329 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Reachability.framework",
332 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/audioplayers.framework", 330 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/audioplayers.framework",
333 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/connectivity.framework", 331 "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/connectivity.framework",
@@ -474,7 +472,7 @@ @@ -474,7 +472,7 @@
474 CODE_SIGN_IDENTITY = "iPhone Developer"; 472 CODE_SIGN_IDENTITY = "iPhone Developer";
475 "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 473 "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
476 CODE_SIGN_STYLE = Automatic; 474 CODE_SIGN_STYLE = Automatic;
477 - CURRENT_PROJECT_VERSION = 223; 475 + CURRENT_PROJECT_VERSION = 224;
478 DEVELOPMENT_TEAM = 8J59HM8B82; 476 DEVELOPMENT_TEAM = 8J59HM8B82;
479 ENABLE_BITCODE = NO; 477 ENABLE_BITCODE = NO;
480 FRAMEWORK_SEARCH_PATHS = ( 478 FRAMEWORK_SEARCH_PATHS = (
@@ -482,12 +480,14 @@ @@ -482,12 +480,14 @@
482 "$(PROJECT_DIR)/Flutter", 480 "$(PROJECT_DIR)/Flutter",
483 ); 481 );
484 INFOPLIST_FILE = Runner/Info.plist; 482 INFOPLIST_FILE = Runner/Info.plist;
  483 + IPHONEOS_DEPLOYMENT_TARGET = 9.0;
485 LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 484 LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
486 LIBRARY_SEARCH_PATHS = ( 485 LIBRARY_SEARCH_PATHS = (
487 "$(inherited)", 486 "$(inherited)",
488 "$(PROJECT_DIR)/Flutter", 487 "$(PROJECT_DIR)/Flutter",
489 ); 488 );
490 MARKETING_VERSION = 2.2.5; 489 MARKETING_VERSION = 2.2.5;
  490 + NEW_SETTING = release;
491 PRODUCT_BUNDLE_IDENTIFIER = com.naji.reserveLine; 491 PRODUCT_BUNDLE_IDENTIFIER = com.naji.reserveLine;
492 PRODUCT_NAME = Runner; 492 PRODUCT_NAME = Runner;
493 PROVISIONING_PROFILE_SPECIFIER = ""; 493 PROVISIONING_PROFILE_SPECIFIER = "";
@@ -616,7 +616,7 @@ @@ -616,7 +616,7 @@
616 CODE_SIGN_ENTITLEMENTS = "Runner/一键订Debug.entitlements"; 616 CODE_SIGN_ENTITLEMENTS = "Runner/一键订Debug.entitlements";
617 CODE_SIGN_IDENTITY = "iPhone Developer"; 617 CODE_SIGN_IDENTITY = "iPhone Developer";
618 CODE_SIGN_STYLE = Automatic; 618 CODE_SIGN_STYLE = Automatic;
619 - CURRENT_PROJECT_VERSION = 223; 619 + CURRENT_PROJECT_VERSION = 224;
620 DEVELOPMENT_TEAM = 8J59HM8B82; 620 DEVELOPMENT_TEAM = 8J59HM8B82;
621 ENABLE_BITCODE = NO; 621 ENABLE_BITCODE = NO;
622 FRAMEWORK_SEARCH_PATHS = ( 622 FRAMEWORK_SEARCH_PATHS = (
@@ -624,12 +624,14 @@ @@ -624,12 +624,14 @@
624 "$(PROJECT_DIR)/Flutter", 624 "$(PROJECT_DIR)/Flutter",
625 ); 625 );
626 INFOPLIST_FILE = Runner/Info.plist; 626 INFOPLIST_FILE = Runner/Info.plist;
  627 + IPHONEOS_DEPLOYMENT_TARGET = 9.0;
627 LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 628 LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
628 LIBRARY_SEARCH_PATHS = ( 629 LIBRARY_SEARCH_PATHS = (
629 "$(inherited)", 630 "$(inherited)",
630 "$(PROJECT_DIR)/Flutter", 631 "$(PROJECT_DIR)/Flutter",
631 ); 632 );
632 MARKETING_VERSION = 2.2.5; 633 MARKETING_VERSION = 2.2.5;
  634 + NEW_SETTING = release;
633 PRODUCT_BUNDLE_IDENTIFIER = com.naji.reserveLine; 635 PRODUCT_BUNDLE_IDENTIFIER = com.naji.reserveLine;
634 PRODUCT_NAME = Runner; 636 PRODUCT_NAME = Runner;
635 PROVISIONING_PROFILE_SPECIFIER = ""; 637 PROVISIONING_PROFILE_SPECIFIER = "";
@@ -649,7 +651,7 @@ @@ -649,7 +651,7 @@
649 CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; 651 CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
650 CODE_SIGN_IDENTITY = "iPhone Developer"; 652 CODE_SIGN_IDENTITY = "iPhone Developer";
651 CODE_SIGN_STYLE = Automatic; 653 CODE_SIGN_STYLE = Automatic;
652 - CURRENT_PROJECT_VERSION = 223; 654 + CURRENT_PROJECT_VERSION = 224;
653 DEVELOPMENT_TEAM = 8J59HM8B82; 655 DEVELOPMENT_TEAM = 8J59HM8B82;
654 ENABLE_BITCODE = NO; 656 ENABLE_BITCODE = NO;
655 FRAMEWORK_SEARCH_PATHS = ( 657 FRAMEWORK_SEARCH_PATHS = (
@@ -657,12 +659,14 @@ @@ -657,12 +659,14 @@
657 "$(PROJECT_DIR)/Flutter", 659 "$(PROJECT_DIR)/Flutter",
658 ); 660 );
659 INFOPLIST_FILE = Runner/Info.plist; 661 INFOPLIST_FILE = Runner/Info.plist;
  662 + IPHONEOS_DEPLOYMENT_TARGET = 9.0;
660 LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 663 LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
661 LIBRARY_SEARCH_PATHS = ( 664 LIBRARY_SEARCH_PATHS = (
662 "$(inherited)", 665 "$(inherited)",
663 "$(PROJECT_DIR)/Flutter", 666 "$(PROJECT_DIR)/Flutter",
664 ); 667 );
665 MARKETING_VERSION = 2.2.5; 668 MARKETING_VERSION = 2.2.5;
  669 + NEW_SETTING = release;
666 PRODUCT_BUNDLE_IDENTIFIER = com.naji.reserveLine; 670 PRODUCT_BUNDLE_IDENTIFIER = com.naji.reserveLine;
667 PRODUCT_NAME = Runner; 671 PRODUCT_NAME = Runner;
668 PROVISIONING_PROFILE_SPECIFIER = ""; 672 PROVISIONING_PROFILE_SPECIFIER = "";
@@ -2,6 +2,6 @@ @@ -2,6 +2,6 @@
2 <Workspace 2 <Workspace
3 version = "1.0"> 3 version = "1.0">
4 <FileRef 4 <FileRef
5 - location = "group:Runner.xcodeproj"> 5 + location = "self:">
6 </FileRef> 6 </FileRef>
7 </Workspace> 7 </Workspace>
@@ -60,8 +60,6 @@ @@ -60,8 +60,6 @@
60 <string>需要您的同意,APP才能访问您的相机来上传消费清单</string> 60 <string>需要您的同意,APP才能访问您的相机来上传消费清单</string>
61 <key>NSContactsUsageDescription</key> 61 <key>NSContactsUsageDescription</key>
62 <string>允许访问您的通讯录来一键录入联系人</string> 62 <string>允许访问您的通讯录来一键录入联系人</string>
63 - <key>NSLocationAlwaysUsageDescription</key>  
64 - <string>需要您的同意,APP才能始终访问位置</string>  
65 <key>NSLocationWhenInUseUsageDescription</key> 63 <key>NSLocationWhenInUseUsageDescription</key>
66 <string>需要您的同意,APP才能在使用期间访问位置</string> 64 <string>需要您的同意,APP才能在使用期间访问位置</string>
67 <key>NSMotionUsageDescription</key> 65 <key>NSMotionUsageDescription</key>
@@ -40,15 +40,14 @@ import 'package:flutter/services.dart'; @@ -40,15 +40,14 @@ import 'package:flutter/services.dart';
40 import 'package:permission_handler/permission_handler.dart'; 40 import 'package:permission_handler/permission_handler.dart';
41 41
42 Future<bool> _requestPermissions() async { 42 Future<bool> _requestPermissions() async {
43 - Map<PermissionGroup, PermissionStatus> permissions =  
44 - await PermissionHandler().requestPermissions([  
45 - PermissionGroup.photos,  
46 - PermissionGroup.location,  
47 - PermissionGroup.camera,  
48 - PermissionGroup.contacts,  
49 - PermissionGroup.storage,  
50 - PermissionGroup.notification  
51 - ]); 43 + Map<Permission, PermissionStatus> permissions = await [
  44 + Permission.photos,
  45 + Permission.location,
  46 + Permission.camera,
  47 + Permission.contacts,
  48 + Permission.storage,
  49 + Permission.notification
  50 + ].request();
52 51
53 List<bool> results = permissions.values.toList().map((status) { 52 List<bool> results = permissions.values.toList().map((status) {
54 return status == PermissionStatus.granted; 53 return status == PermissionStatus.granted;
@@ -329,7 +329,7 @@ class _CreateStorePageState extends State<CreateStorePage> { @@ -329,7 +329,7 @@ class _CreateStorePageState extends State<CreateStorePage> {
329 // 'lng 329 // 'lng
330 }); 330 });
331 } 331 }
332 - }, PermissionGroup.location); 332 + }, Permission.location);
333 // bool canContacts = 333 // bool canContacts =
334 // await requestPermission(PermissionGroup.locationWhenInUse); 334 // await requestPermission(PermissionGroup.locationWhenInUse);
335 // print(canContacts); 335 // print(canContacts);
@@ -78,7 +78,7 @@ class _EnterStoreAddressPageState extends State<EnterStoreAddressPage> { @@ -78,7 +78,7 @@ class _EnterStoreAddressPageState extends State<EnterStoreAddressPage> {
78 createStoreModel.storeInfo.lng = address['lng']; 78 createStoreModel.storeInfo.lng = address['lng'];
79 }); 79 });
80 } 80 }
81 - }, PermissionGroup.location); 81 + }, Permission.location);
82 }, 82 },
83 child: Container( 83 child: Container(
84 alignment: Alignment.centerLeft, 84 alignment: Alignment.centerLeft,
@@ -274,7 +274,7 @@ class _MapChoicePointPageState extends State<MapChoicePointPage> { @@ -274,7 +274,7 @@ class _MapChoicePointPageState extends State<MapChoicePointPage> {
274 latLng, 274 latLng,
275 ); 275 );
276 276
277 - print(await reGeocodeList.toFutureString()); 277 + // print(await reGeocodeList.toFutureString());
278 address = await reGeocodeList.formatAddress; 278 address = await reGeocodeList.formatAddress;
279 279
280 final poiList = await AmapSearch.instance.searchKeyword( 280 final poiList = await AmapSearch.instance.searchKeyword(
@@ -236,7 +236,7 @@ class _VideoPickerWidgetState extends DisposableState<VideoPickerWidget> { @@ -236,7 +236,7 @@ class _VideoPickerWidgetState extends DisposableState<VideoPickerWidget> {
236 } 236 }
237 237
238 Navigator.pop(context); 238 Navigator.pop(context);
239 - }, PermissionGroup.camera); 239 + }, Permission.camera);
240 }, 240 },
241 child: Container( 241 child: Container(
242 width: double.infinity, 242 width: double.infinity,
@@ -267,7 +267,7 @@ class _VideoPickerWidgetState extends DisposableState<VideoPickerWidget> { @@ -267,7 +267,7 @@ class _VideoPickerWidgetState extends DisposableState<VideoPickerWidget> {
267 // // 267 // //
268 // _getFromPictureOrCamera(ImageSource.gallery); 268 // _getFromPictureOrCamera(ImageSource.gallery);
269 Navigator.pop(context); 269 Navigator.pop(context);
270 - }, PermissionGroup.photos); 270 + }, Permission.photos);
271 }, 271 },
272 child: Container( 272 child: Container(
273 width: double.infinity, 273 width: double.infinity,
@@ -1035,7 +1035,7 @@ class _NoteBookChangePageState extends State<NoteBookChangePage> { @@ -1035,7 +1035,7 @@ class _NoteBookChangePageState extends State<NoteBookChangePage> {
1035 _openAddressBook() async { 1035 _openAddressBook() async {
1036 if (!(await checkContactPermission())) { 1036 if (!(await checkContactPermission())) {
1037 PermissionStatus permissionStatus = await contactPermissionStatus(); 1037 PermissionStatus permissionStatus = await contactPermissionStatus();
1038 - if (permissionStatus == PermissionStatus.neverAskAgain) { 1038 + if (permissionStatus == PermissionStatus.permanentlyDenied) {
1039 //用户选择不在弹出权限提示框 1039 //用户选择不在弹出权限提示框
1040 print('never'); 1040 print('never');
1041 DialogUtil.openAlertDialog( 1041 DialogUtil.openAlertDialog(
@@ -236,7 +236,7 @@ class _BaseInfoPageState extends State<BaseInfoPage> { @@ -236,7 +236,7 @@ class _BaseInfoPageState extends State<BaseInfoPage> {
236 onTap: () { 236 onTap: () {
237 Utils.getPickPermission(context, () { 237 Utils.getPickPermission(context, () {
238 _getFromPictureOrCamera(title, model, ImageSource.gallery); 238 _getFromPictureOrCamera(title, model, ImageSource.gallery);
239 - }, PermissionGroup.photos); 239 + }, Permission.photos);
240 }, 240 },
241 child: Container( 241 child: Container(
242 height: ScreenUtil().setWidth(imgSize * 2), 242 height: ScreenUtil().setWidth(imgSize * 2),
@@ -276,7 +276,7 @@ class _BaseInfoPageState extends State<BaseInfoPage> { @@ -276,7 +276,7 @@ class _BaseInfoPageState extends State<BaseInfoPage> {
276 Utils.getPickPermission(context, () { 276 Utils.getPickPermission(context, () {
277 _getFromPictureOrCamera( 277 _getFromPictureOrCamera(
278 title, model, ImageSource.gallery); 278 title, model, ImageSource.gallery);
279 - }, PermissionGroup.photos); 279 + }, Permission.photos);
280 } 280 }
281 }, 281 },
282 child: ClipRRect( 282 child: ClipRRect(
@@ -293,7 +293,7 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> { @@ -293,7 +293,7 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> {
293 Utils.getPickPermission(context, () { 293 Utils.getPickPermission(context, () {
294 _getFromPictureOrCamera(ImageSource.camera); 294 _getFromPictureOrCamera(ImageSource.camera);
295 Navigator.pop(context); 295 Navigator.pop(context);
296 - }, PermissionGroup.camera); 296 + }, Permission.camera);
297 }, 297 },
298 child: Container( 298 child: Container(
299 width: double.infinity, 299 width: double.infinity,
@@ -319,7 +319,7 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> { @@ -319,7 +319,7 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> {
319 pickAsset(PickType.onlyImage); 319 pickAsset(PickType.onlyImage);
320 // _getFromPictureOrCamera(ImageSource.gallery); 320 // _getFromPictureOrCamera(ImageSource.gallery);
321 Navigator.pop(context); 321 Navigator.pop(context);
322 - }, PermissionGroup.photos); 322 + }, Permission.photos);
323 }, 323 },
324 child: Container( 324 child: Container(
325 width: double.infinity, 325 width: double.infinity,
@@ -10,7 +10,10 @@ import 'package:one_key/net/base_resp.dart'; @@ -10,7 +10,10 @@ import 'package:one_key/net/base_resp.dart';
10 import 'package:one_key/net/dio_util.dart'; 10 import 'package:one_key/net/dio_util.dart';
11 import 'package:one_key/net/http_url.dart'; 11 import 'package:one_key/net/http_url.dart';
12 import 'package:one_key/provider/user_model.dart'; 12 import 'package:one_key/provider/user_model.dart';
  13 +import 'package:one_key/utils/dialog_util.dart';
13 import 'package:one_key/utils/misc.dart'; 14 import 'package:one_key/utils/misc.dart';
  15 +import 'package:one_key/utils/utils.dart';
  16 +import 'package:permission_handler/permission_handler.dart';
14 import 'package:provider/provider.dart'; 17 import 'package:provider/provider.dart';
15 18
16 import '../app.dart'; 19 import '../app.dart';
@@ -30,10 +33,82 @@ class ContactModel { @@ -30,10 +33,82 @@ class ContactModel {
30 return _instance; 33 return _instance;
31 } 34 }
32 35
  36 + _openAddressBook(context) async {
  37 + if (!(await checkContactPermission())) {
  38 + PermissionStatus permissionStatus = await contactPermissionStatus();
  39 + if (permissionStatus == PermissionStatus.permanentlyDenied) {
  40 + //用户选择不在弹出权限提示框
  41 + print('never');
  42 + DialogUtil.openAlertDialog(
  43 + context, '未获得通讯录权限', "请在手机的权限管理里,将通讯录权限开启", '去设置', 340.0,
  44 + onTap: () {
  45 + openSetting();
  46 + Navigator.pop(context, '');
  47 + });
  48 + } else {
  49 + // 申请权限
  50 + bool canContacts = await requestContactPermission();
  51 + if (canContacts) {
  52 + uploadRearly(context);
  53 + } else {
  54 + //拒绝通讯录权限 , 苹果拒绝权限后,不再提示权限框,进入此处
  55 + DialogUtil.openAlertDialog(
  56 + context, '未获得通讯录权限', "请在手机的权限管理里,将通讯录权限开启。", '去设置', 340.0,
  57 + onTap: () {
  58 + openSetting();
  59 + Navigator.pop(context, '');
  60 + });
  61 + }
  62 + }
  63 + } else {
  64 + uploadRearly(context);
  65 + }
  66 + }
  67 +
  68 + uploadRearly(context) async {
  69 + Iterable<Contact> contacts =
  70 + await ContactsService.getContacts(withThumbnails: false);
  71 + List<Map<String, String>> callLogs = [];
  72 +
  73 + contacts.forEach((contact) {
  74 + String phoneNum = "";
  75 + if (contact.phones.isNotEmpty) {
  76 + phoneNum = contact.phones.first.value
  77 + .replaceAll(new RegExp(r"\s+\b|\b\s"), "");
  78 + }
  79 + Map<String, String> callLog = {
  80 + "phoneNum": "${phoneNum.trim()}",
  81 + "sid": Provider.of<UserModel>(context, listen: false).user.sellerid,
  82 + "deviceId": "dhgajkhdgahghsdghdkgahd",
  83 + "phoneDate": "${DateTime.now().millisecondsSinceEpoch}",
  84 + "callType": "2",
  85 + "callUser": "${contact.displayName}",
  86 + "account": Provider.of<UserModel>(context, listen: false).user.account
  87 + };
  88 + callLogs.add(callLog);
  89 + });
  90 + Map<String, String> params = {"data": jsonEncode(callLogs)};
  91 + BaseResp<String> baseResp = await DioUtil()
  92 + .request<String>(context, Method.get, HttpUrl.upload_contact,
  93 + showLoading: false,
  94 + data: params,
  95 + options: Options(
  96 + method: Method.post,
  97 + contentType: "application/x-www-form-urlencoded"))
  98 + .catchError((error) {
  99 + print(error.toString());
  100 + });
  101 + if (baseResp != null && baseResp.code == Constant.status_success) {
  102 + LogUtil.v("联系人上传成功:${contacts.length}条");
  103 + App.sp.setBool("isUpload", true);
  104 + }
  105 + }
  106 +
33 uploadLocalContact(BuildContext context) async { 107 uploadLocalContact(BuildContext context) async {
34 bool isUpload = App.sp.getBool("isUpload") ?? false; 108 bool isUpload = App.sp.getBool("isUpload") ?? false;
35 if (isUpload) return; 109 if (isUpload) return;
36 bool authority = false; 110 bool authority = false;
  111 + // _openAddressBook(context);
37 if (!await checkContactPermission()) { 112 if (!await checkContactPermission()) {
38 authority = await requestContactPermission(); 113 authority = await requestContactPermission();
39 } 114 }
@@ -25,48 +25,48 @@ class UpdateModel { @@ -25,48 +25,48 @@ class UpdateModel {
25 int _progress; //下载进度 25 int _progress; //下载进度
26 Function _setState; 26 Function _setState;
27 //检查更新 27 //检查更新
28 - checkUpdate(BuildContext context,{showToast=true}) async { 28 + checkUpdate(BuildContext context, {showToast = true}) async {
29 String deviceId = await Utils.getUUID(); 29 String deviceId = await Utils.getUUID();
30 UserModel userModel = Provider.of<UserModel>(context, listen: false); 30 UserModel userModel = Provider.of<UserModel>(context, listen: false);
31 int versionCode = await Utils.getCurrBuildNum(); 31 int versionCode = await Utils.getCurrBuildNum();
32 - String make="3";  
33 - if(Platform.isIOS)make="4"; 32 + String make = "3";
  33 + if (Platform.isIOS) make = "4";
34 Map<String, String> params = { 34 Map<String, String> params = {
35 "deviceId": deviceId, 35 "deviceId": deviceId,
36 "sid": userModel.user.sellerid, 36 "sid": userModel.user.sellerid,
37 "versionCode": versionCode.toString(), 37 "versionCode": versionCode.toString(),
38 - "flag":"4",  
39 - "make":make,//3 android 4 ios 38 + "flag": "4",
  39 + "make": make, //3 android 4 ios
40 }; 40 };
41 BaseResp<List> baseResp = await DioUtil() 41 BaseResp<List> baseResp = await DioUtil()
42 - .request<List>(context, Method.get, HttpUrl.check_update, data: params,showLoading: false) 42 + .request<List>(context, Method.get, HttpUrl.check_update,
  43 + data: params, showLoading: false)
43 .catchError((error) { 44 .catchError((error) {
44 print(error.toString()); 45 print(error.toString());
45 - if(showToast){ 46 + if (showToast) {
46 Utils.showToast("当前已是最新版本"); 47 Utils.showToast("当前已是最新版本");
47 } 48 }
48 }); 49 });
49 - if (baseResp!=null&&baseResp.code == Constant.status_success) { 50 + if (baseResp != null && baseResp.code == Constant.status_success) {
50 LogUtil.v(baseResp.data); 51 LogUtil.v(baseResp.data);
51 Map<String, dynamic> dataMap = baseResp.data[0]; 52 Map<String, dynamic> dataMap = baseResp.data[0];
52 if (int.parse(dataMap["version"].toString()) > versionCode) { 53 if (int.parse(dataMap["version"].toString()) > versionCode) {
53 Version version = Version.fromJson({ 54 Version version = Version.fromJson({
54 - "name":dataMap["name"].toString(), 55 + "name": dataMap["name"].toString(),
55 "version": dataMap["version"].toString(), 56 "version": dataMap["version"].toString(),
56 - "file_url":dataMap["file_url"].toString(), 57 + "file_url": dataMap["file_url"].toString(),
57 "content": dataMap["content"].toString() 58 "content": dataMap["content"].toString()
58 }); 59 });
59 showUpdateDialog(context, version); 60 showUpdateDialog(context, version);
60 - }else{  
61 - if(showToast){  
62 - Utils.showToast(baseResp?.msg??"当前已是最新版本"); 61 + } else {
  62 + if (showToast) {
  63 + Utils.showToast(baseResp?.msg ?? "当前已是最新版本");
63 } 64 }
64 } 65 }
65 - }else{  
66 - if(showToast){  
67 - Utils.showToast(baseResp?.msg??"当前已是最新版本"); 66 + } else {
  67 + if (showToast) {
  68 + Utils.showToast(baseResp?.msg ?? "当前已是最新版本");
68 } 69 }
69 -  
70 } 70 }
71 // if(Platform.isAndroid){ 71 // if(Platform.isAndroid){
72 // 72 //
@@ -195,9 +195,10 @@ class UpdateModel { @@ -195,9 +195,10 @@ class UpdateModel {
195 195
196 //下载更新版本 196 //下载更新版本
197 Future<void> downloadApk(BuildContext context, String file_url) async { 197 Future<void> downloadApk(BuildContext context, String file_url) async {
198 - Map<PermissionGroup, PermissionStatus> permissions =  
199 - await PermissionHandler().requestPermissions([PermissionGroup.storage]);  
200 - if (permissions[PermissionGroup.storage] == PermissionStatus.granted) { 198 + Map<Permission, PermissionStatus> permissions = await [
  199 + Permission.storage,
  200 + ].request();
  201 + if (permissions[Permission.storage] == PermissionStatus.granted) {
201 final dir = await getExternalStorageDirectory(); 202 final dir = await getExternalStorageDirectory();
202 String savePath = dir.path + "/one_key"; 203 String savePath = dir.path + "/one_key";
203 Directory directory = new Directory(savePath); 204 Directory directory = new Directory(savePath);
@@ -2,8 +2,7 @@ import 'package:flutter/services.dart'; @@ -2,8 +2,7 @@ import 'package:flutter/services.dart';
2 import 'package:permission_handler/permission_handler.dart'; 2 import 'package:permission_handler/permission_handler.dart';
3 3
4 Future<bool> checkContactPermission() async { 4 Future<bool> checkContactPermission() async {
5 - PermissionStatus permissionStatus =  
6 - await PermissionHandler().checkPermissionStatus(PermissionGroup.contacts); 5 + PermissionStatus permissionStatus = await Permission.contacts.status;
7 if (permissionStatus == PermissionStatus.granted) { 6 if (permissionStatus == PermissionStatus.granted) {
8 return true; 7 return true;
9 } else { 8 } else {
@@ -11,18 +10,17 @@ Future<bool> checkContactPermission() async { @@ -11,18 +10,17 @@ Future<bool> checkContactPermission() async {
11 } 10 }
12 } 11 }
13 12
14 -Future<bool> checkPermission(PermissionGroup permissionGroup) async {  
15 - PermissionStatus permissionStatus =  
16 - await PermissionHandler().checkPermissionStatus(permissionGroup); 13 +Future<bool> checkPermission(Permission permissionGroup) async {
  14 + PermissionStatus permissionStatus = await permissionGroup.status;
17 if (permissionStatus == PermissionStatus.granted) { 15 if (permissionStatus == PermissionStatus.granted) {
18 return true; 16 return true;
19 } else { 17 } else {
20 return false; 18 return false;
21 } 19 }
22 } 20 }
23 -Future<bool> requestPermission(PermissionGroup permissionGroup) async {  
24 - final permissions =  
25 - await PermissionHandler().requestPermissions([permissionGroup]); 21 +
  22 +Future<bool> requestPermission(Permission permissionGroup) async {
  23 + final permissions = await [permissionGroup].request();
26 if (permissions[permissionGroup] == PermissionStatus.granted) { 24 if (permissions[permissionGroup] == PermissionStatus.granted) {
27 return true; 25 return true;
28 } else { 26 } else {
@@ -30,23 +28,19 @@ Future<bool> requestPermission(PermissionGroup permissionGroup) async { @@ -30,23 +28,19 @@ Future<bool> requestPermission(PermissionGroup permissionGroup) async {
30 } 28 }
31 } 29 }
32 30
33 -Future<PermissionStatus> permissionStatus(  
34 - PermissionGroup permissionGroup) async {  
35 - PermissionStatus permissionStatus =  
36 - await PermissionHandler().checkPermissionStatus(permissionGroup); 31 +Future<PermissionStatus> permissionStatus(Permission permissionGroup) async {
  32 + PermissionStatus permissionStatus = await permissionGroup.status;
37 return permissionStatus; 33 return permissionStatus;
38 } 34 }
39 35
40 Future<PermissionStatus> contactPermissionStatus() async { 36 Future<PermissionStatus> contactPermissionStatus() async {
41 - PermissionStatus permissionStatus =  
42 - await PermissionHandler().checkPermissionStatus(PermissionGroup.contacts); 37 + PermissionStatus permissionStatus = await Permission.contacts.status;
43 return permissionStatus; 38 return permissionStatus;
44 } 39 }
45 40
46 Future<bool> requestContactPermission() async { 41 Future<bool> requestContactPermission() async {
47 - final permissions =  
48 - await PermissionHandler().requestPermissions([PermissionGroup.contacts]);  
49 - if (permissions[PermissionGroup.contacts] == PermissionStatus.granted) { 42 + final permissions = await [Permission.contacts].request();
  43 + if (permissions[Permission.contacts] == PermissionStatus.granted) {
50 return true; 44 return true;
51 } else { 45 } else {
52 return false; 46 return false;
@@ -54,5 +48,5 @@ Future<bool> requestContactPermission() async { @@ -54,5 +48,5 @@ Future<bool> requestContactPermission() async {
54 } 48 }
55 49
56 Future<bool> openSetting() { 50 Future<bool> openSetting() {
57 - return PermissionHandler().openAppSettings(); 51 + return openAppSettings();
58 } 52 }
@@ -92,16 +92,16 @@ class Utils { @@ -92,16 +92,16 @@ class Utils {
92 92
93 ///检测是否有相机或者相册权限 93 ///检测是否有相机或者相册权限
94 static getPickPermission(BuildContext context, VoidCallback callback, 94 static getPickPermission(BuildContext context, VoidCallback callback,
95 - PermissionGroup permissionGroup) async { 95 + Permission permissionGroup) async {
96 if (!(await checkPermission(permissionGroup))) { 96 if (!(await checkPermission(permissionGroup))) {
97 String title = '相册'; 97 String title = '相册';
98 - if (permissionGroup == PermissionGroup.camera) { 98 + if (permissionGroup == Permission.camera) {
99 title = '相机'; 99 title = '相机';
100 - } else if (permissionGroup == PermissionGroup.location) { 100 + } else if (permissionGroup == Permission.location) {
101 title = '位置'; 101 title = '位置';
102 } 102 }
103 PermissionStatus status = await permissionStatus(permissionGroup); 103 PermissionStatus status = await permissionStatus(permissionGroup);
104 - if (status == PermissionStatus.neverAskAgain) { 104 + if (status == PermissionStatus.permanentlyDenied) {
105 //用户选择不在弹出权限提示框 105 //用户选择不在弹出权限提示框
106 print('never'); 106 print('never');
107 Navigator.pop(context); 107 Navigator.pop(context);
@@ -568,7 +568,7 @@ packages: @@ -568,7 +568,7 @@ packages:
568 name: latlng 568 name: latlng
569 url: "https://pub.flutter-io.cn" 569 url: "https://pub.flutter-io.cn"
570 source: hosted 570 source: hosted
571 - version: "0.0.2" 571 + version: "0.1.0"
572 logging: 572 logging:
573 dependency: transitive 573 dependency: transitive
574 description: 574 description:
@@ -722,14 +722,14 @@ packages: @@ -722,14 +722,14 @@ packages:
722 name: permission_handler 722 name: permission_handler
723 url: "https://pub.flutter-io.cn" 723 url: "https://pub.flutter-io.cn"
724 source: hosted 724 source: hosted
725 - version: "4.4.0+hotfix.4" 725 + version: "5.1.0+2"
726 permission_handler_platform_interface: 726 permission_handler_platform_interface:
727 dependency: transitive 727 dependency: transitive
728 description: 728 description:
729 name: permission_handler_platform_interface 729 name: permission_handler_platform_interface
730 url: "https://pub.flutter-io.cn" 730 url: "https://pub.flutter-io.cn"
731 source: hosted 731 source: hosted
732 - version: "1.0.0" 732 + version: "2.0.2"
733 photo: 733 photo:
734 dependency: "direct main" 734 dependency: "direct main"
735 description: 735 description:
@@ -1158,5 +1158,5 @@ packages: @@ -1158,5 +1158,5 @@ packages:
1158 source: hosted 1158 source: hosted
1159 version: "2.2.1" 1159 version: "2.2.1"
1160 sdks: 1160 sdks:
1161 - dart: ">=2.12.0-0.0 <3.0.0" 1161 + dart: ">=2.12.0 <3.0.0"
1162 flutter: ">=1.20.0" 1162 flutter: ">=1.20.0"
@@ -39,7 +39,7 @@ dependencies: @@ -39,7 +39,7 @@ dependencies:
39 # Toast提示 39 # Toast提示
40 fluttertoast: ^3.1.3 40 fluttertoast: ^3.1.3
41 # 权限管理 41 # 权限管理
42 - permission_handler: ^4.4.0 42 + permission_handler: ^5.1.0+2
43 # permission_handler: ^5.0.1+1 ^6.1.1 4.4.0 43 # permission_handler: ^5.0.1+1 ^6.1.1 4.4.0
44 # 文件系统访问 44 # 文件系统访问
45 path_provider: ^1.6.5 45 path_provider: ^1.6.5