Showing
19 changed files
with
153 additions
and
82 deletions
| @@ -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 = ""; |
| @@ -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 |
-
Please register or login to post a comment