Commit e0d63b2e35d1cd3c10f0f73b0b661c6c1d24f0bc

Authored by wdn127929
1 parent 17e7bede

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

... ... @@ -11,14 +11,14 @@ if (flutterRoot == null) {
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}
def flutterVersionCode = "223"
def flutterVersionCode = "225"
if (flutterVersionCode == null) {
flutterVersionCode = '223'
flutterVersionCode = '225'
}
def flutterVersionName = "2.2.3"
def flutterVersionName = "2.2.5"
if (flutterVersionName == null) {
flutterVersionName = '2.2.3'
flutterVersionName = '2.2.5'
}
apply plugin: 'com.android.application'
... ...
... ... @@ -66,7 +66,7 @@ PODS:
- Flutter
- path_provider (0.0.1):
- Flutter
- "permission_handler (4.4.0+hotfix.4)":
- "permission_handler (5.1.0+2)":
- Flutter
- photo_manager (0.0.1):
- Flutter
... ... @@ -222,7 +222,7 @@ SPEC CHECKSUMS:
core_location_fluttify: 24cc9dcd986ac7059916632d2cb3babb1568ff61
device_info: d7d233b645a32c40dfdc212de5cf646ca482f175
easy_contact_picker: 9ab9dc70e8ddde6e76a19ffc482d7bf899868730
Flutter: 0e3d915762c693b495b44d77113d4970485de6ec
Flutter: 434fef37c0980e73bb6479ef766c45957d4b510c
flutter_app_badger: 65de4d6f0c34a891df49e6cfb8a1c0496426fa68
flutter_bugly: c9800f4d5bc5bdc27ffdde3417a26ba44266e0c3
flutter_statusbarcolor: 8afb1071ed8c58be929f1e32b36c629771fd2259
... ... @@ -234,7 +234,7 @@ SPEC CHECKSUMS:
install_plugin: a13e7ddd2bab0c701b48cd359c26d0394125b6fb
package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62
path_provider: abfe2b5c733d04e238b0d8691db0cfd63a27a93c
permission_handler: 8278954f2382902f63f00dd8828769c0bd6d511b
permission_handler: ccb20a9fad0ee9b1314a52b70b76b473c5f8dab0
photo_manager: f7c619c2cc8c2adb8d85c63363babac477de9c67
Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96
shared_preferences: af6bfa751691cdc24be3045c43ec037377ada40d
... ... @@ -251,4 +251,4 @@ SPEC CHECKSUMS:
PODFILE CHECKSUM: a75497545d4391e2d394c3668e20cfb1c2bbd4aa
COCOAPODS: 1.9.3
COCOAPODS: 1.10.1
... ...
... ... @@ -300,7 +300,6 @@
inputPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh",
"${BUILT_PRODUCTS_DIR}/FMDB/FMDB.framework",
"${PODS_ROOT}/../Flutter/Flutter.framework",
"${BUILT_PRODUCTS_DIR}/Reachability/Reachability.framework",
"${BUILT_PRODUCTS_DIR}/audioplayers/audioplayers.framework",
"${BUILT_PRODUCTS_DIR}/connectivity/connectivity.framework",
... ... @@ -327,7 +326,6 @@
name = "[CP] Embed Pods Frameworks";
outputPaths = (
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FMDB.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Flutter.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Reachability.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/audioplayers.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/connectivity.framework",
... ... @@ -474,7 +472,7 @@
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 223;
CURRENT_PROJECT_VERSION = 224;
DEVELOPMENT_TEAM = 8J59HM8B82;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
... ... @@ -482,12 +480,14 @@
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
MARKETING_VERSION = 2.2.5;
NEW_SETTING = release;
PRODUCT_BUNDLE_IDENTIFIER = com.naji.reserveLine;
PRODUCT_NAME = Runner;
PROVISIONING_PROFILE_SPECIFIER = "";
... ... @@ -616,7 +616,7 @@
CODE_SIGN_ENTITLEMENTS = "Runner/一键订Debug.entitlements";
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 223;
CURRENT_PROJECT_VERSION = 224;
DEVELOPMENT_TEAM = 8J59HM8B82;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
... ... @@ -624,12 +624,14 @@
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
MARKETING_VERSION = 2.2.5;
NEW_SETTING = release;
PRODUCT_BUNDLE_IDENTIFIER = com.naji.reserveLine;
PRODUCT_NAME = Runner;
PROVISIONING_PROFILE_SPECIFIER = "";
... ... @@ -649,7 +651,7 @@
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 223;
CURRENT_PROJECT_VERSION = 224;
DEVELOPMENT_TEAM = 8J59HM8B82;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
... ... @@ -657,12 +659,14 @@
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
MARKETING_VERSION = 2.2.5;
NEW_SETTING = release;
PRODUCT_BUNDLE_IDENTIFIER = com.naji.reserveLine;
PRODUCT_NAME = Runner;
PROVISIONING_PROFILE_SPECIFIER = "";
... ...
... ... @@ -2,6 +2,6 @@
<Workspace
version = "1.0">
<FileRef
location = "group:Runner.xcodeproj">
location = "self:">
</FileRef>
</Workspace>
... ...
... ... @@ -60,8 +60,6 @@
<string>需要您的同意,APP才能访问您的相机来上传消费清单</string>
<key>NSContactsUsageDescription</key>
<string>允许访问您的通讯录来一键录入联系人</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>需要您的同意,APP才能始终访问位置</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>需要您的同意,APP才能在使用期间访问位置</string>
<key>NSMotionUsageDescription</key>
... ...
... ... @@ -40,15 +40,14 @@ import 'package:flutter/services.dart';
import 'package:permission_handler/permission_handler.dart';
Future<bool> _requestPermissions() async {
Map<PermissionGroup, PermissionStatus> permissions =
await PermissionHandler().requestPermissions([
PermissionGroup.photos,
PermissionGroup.location,
PermissionGroup.camera,
PermissionGroup.contacts,
PermissionGroup.storage,
PermissionGroup.notification
]);
Map<Permission, PermissionStatus> permissions = await [
Permission.photos,
Permission.location,
Permission.camera,
Permission.contacts,
Permission.storage,
Permission.notification
].request();
List<bool> results = permissions.values.toList().map((status) {
return status == PermissionStatus.granted;
... ...
... ... @@ -329,7 +329,7 @@ class _CreateStorePageState extends State<CreateStorePage> {
// 'lng
});
}
}, PermissionGroup.location);
}, Permission.location);
// bool canContacts =
// await requestPermission(PermissionGroup.locationWhenInUse);
// print(canContacts);
... ...
... ... @@ -78,7 +78,7 @@ class _EnterStoreAddressPageState extends State<EnterStoreAddressPage> {
createStoreModel.storeInfo.lng = address['lng'];
});
}
}, PermissionGroup.location);
}, Permission.location);
},
child: Container(
alignment: Alignment.centerLeft,
... ...
... ... @@ -274,7 +274,7 @@ class _MapChoicePointPageState extends State<MapChoicePointPage> {
latLng,
);
print(await reGeocodeList.toFutureString());
// print(await reGeocodeList.toFutureString());
address = await reGeocodeList.formatAddress;
final poiList = await AmapSearch.instance.searchKeyword(
... ...
... ... @@ -236,7 +236,7 @@ class _VideoPickerWidgetState extends DisposableState<VideoPickerWidget> {
}
Navigator.pop(context);
}, PermissionGroup.camera);
}, Permission.camera);
},
child: Container(
width: double.infinity,
... ... @@ -267,7 +267,7 @@ class _VideoPickerWidgetState extends DisposableState<VideoPickerWidget> {
// //
// _getFromPictureOrCamera(ImageSource.gallery);
Navigator.pop(context);
}, PermissionGroup.photos);
}, Permission.photos);
},
child: Container(
width: double.infinity,
... ...
... ... @@ -1035,7 +1035,7 @@ class _NoteBookChangePageState extends State<NoteBookChangePage> {
_openAddressBook() async {
if (!(await checkContactPermission())) {
PermissionStatus permissionStatus = await contactPermissionStatus();
if (permissionStatus == PermissionStatus.neverAskAgain) {
if (permissionStatus == PermissionStatus.permanentlyDenied) {
//用户选择不在弹出权限提示框
print('never');
DialogUtil.openAlertDialog(
... ...
... ... @@ -236,7 +236,7 @@ class _BaseInfoPageState extends State<BaseInfoPage> {
onTap: () {
Utils.getPickPermission(context, () {
_getFromPictureOrCamera(title, model, ImageSource.gallery);
}, PermissionGroup.photos);
}, Permission.photos);
},
child: Container(
height: ScreenUtil().setWidth(imgSize * 2),
... ... @@ -276,7 +276,7 @@ class _BaseInfoPageState extends State<BaseInfoPage> {
Utils.getPickPermission(context, () {
_getFromPictureOrCamera(
title, model, ImageSource.gallery);
}, PermissionGroup.photos);
}, Permission.photos);
}
},
child: ClipRRect(
... ...
... ... @@ -293,7 +293,7 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> {
Utils.getPickPermission(context, () {
_getFromPictureOrCamera(ImageSource.camera);
Navigator.pop(context);
}, PermissionGroup.camera);
}, Permission.camera);
},
child: Container(
width: double.infinity,
... ... @@ -319,7 +319,7 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> {
pickAsset(PickType.onlyImage);
// _getFromPictureOrCamera(ImageSource.gallery);
Navigator.pop(context);
}, PermissionGroup.photos);
}, Permission.photos);
},
child: Container(
width: double.infinity,
... ...
... ... @@ -10,7 +10,10 @@ import 'package:one_key/net/base_resp.dart';
import 'package:one_key/net/dio_util.dart';
import 'package:one_key/net/http_url.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/utils/dialog_util.dart';
import 'package:one_key/utils/misc.dart';
import 'package:one_key/utils/utils.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:provider/provider.dart';
import '../app.dart';
... ... @@ -30,10 +33,82 @@ class ContactModel {
return _instance;
}
_openAddressBook(context) async {
if (!(await checkContactPermission())) {
PermissionStatus permissionStatus = await contactPermissionStatus();
if (permissionStatus == PermissionStatus.permanentlyDenied) {
//用户选择不在弹出权限提示框
print('never');
DialogUtil.openAlertDialog(
context, '未获得通讯录权限', "请在手机的权限管理里,将通讯录权限开启", '去设置', 340.0,
onTap: () {
openSetting();
Navigator.pop(context, '');
});
} else {
// 申请权限
bool canContacts = await requestContactPermission();
if (canContacts) {
uploadRearly(context);
} else {
//拒绝通讯录权限 , 苹果拒绝权限后,不再提示权限框,进入此处
DialogUtil.openAlertDialog(
context, '未获得通讯录权限', "请在手机的权限管理里,将通讯录权限开启。", '去设置', 340.0,
onTap: () {
openSetting();
Navigator.pop(context, '');
});
}
}
} else {
uploadRearly(context);
}
}
uploadRearly(context) async {
Iterable<Contact> contacts =
await ContactsService.getContacts(withThumbnails: false);
List<Map<String, String>> callLogs = [];
contacts.forEach((contact) {
String phoneNum = "";
if (contact.phones.isNotEmpty) {
phoneNum = contact.phones.first.value
.replaceAll(new RegExp(r"\s+\b|\b\s"), "");
}
Map<String, String> callLog = {
"phoneNum": "${phoneNum.trim()}",
"sid": Provider.of<UserModel>(context, listen: false).user.sellerid,
"deviceId": "dhgajkhdgahghsdghdkgahd",
"phoneDate": "${DateTime.now().millisecondsSinceEpoch}",
"callType": "2",
"callUser": "${contact.displayName}",
"account": Provider.of<UserModel>(context, listen: false).user.account
};
callLogs.add(callLog);
});
Map<String, String> params = {"data": jsonEncode(callLogs)};
BaseResp<String> baseResp = await DioUtil()
.request<String>(context, Method.get, HttpUrl.upload_contact,
showLoading: false,
data: params,
options: Options(
method: Method.post,
contentType: "application/x-www-form-urlencoded"))
.catchError((error) {
print(error.toString());
});
if (baseResp != null && baseResp.code == Constant.status_success) {
LogUtil.v("联系人上传成功:${contacts.length}条");
App.sp.setBool("isUpload", true);
}
}
uploadLocalContact(BuildContext context) async {
bool isUpload = App.sp.getBool("isUpload") ?? false;
if (isUpload) return;
bool authority = false;
// _openAddressBook(context);
if (!await checkContactPermission()) {
authority = await requestContactPermission();
}
... ...
... ... @@ -25,48 +25,48 @@ class UpdateModel {
int _progress; //下载进度
Function _setState;
//检查更新
checkUpdate(BuildContext context,{showToast=true}) async {
checkUpdate(BuildContext context, {showToast = true}) async {
String deviceId = await Utils.getUUID();
UserModel userModel = Provider.of<UserModel>(context, listen: false);
int versionCode = await Utils.getCurrBuildNum();
String make="3";
if(Platform.isIOS)make="4";
String make = "3";
if (Platform.isIOS) make = "4";
Map<String, String> params = {
"deviceId": deviceId,
"sid": userModel.user.sellerid,
"versionCode": versionCode.toString(),
"flag":"4",
"make":make,//3 android 4 ios
"flag": "4",
"make": make, //3 android 4 ios
};
BaseResp<List> baseResp = await DioUtil()
.request<List>(context, Method.get, HttpUrl.check_update, data: params,showLoading: false)
.request<List>(context, Method.get, HttpUrl.check_update,
data: params, showLoading: false)
.catchError((error) {
print(error.toString());
if(showToast){
if (showToast) {
Utils.showToast("当前已是最新版本");
}
});
if (baseResp!=null&&baseResp.code == Constant.status_success) {
if (baseResp != null && baseResp.code == Constant.status_success) {
LogUtil.v(baseResp.data);
Map<String, dynamic> dataMap = baseResp.data[0];
if (int.parse(dataMap["version"].toString()) > versionCode) {
Version version = Version.fromJson({
"name":dataMap["name"].toString(),
"name": dataMap["name"].toString(),
"version": dataMap["version"].toString(),
"file_url":dataMap["file_url"].toString(),
"file_url": dataMap["file_url"].toString(),
"content": dataMap["content"].toString()
});
showUpdateDialog(context, version);
}else{
if(showToast){
Utils.showToast(baseResp?.msg??"当前已是最新版本");
} else {
if (showToast) {
Utils.showToast(baseResp?.msg ?? "当前已是最新版本");
}
}
}else{
if(showToast){
Utils.showToast(baseResp?.msg??"当前已是最新版本");
} else {
if (showToast) {
Utils.showToast(baseResp?.msg ?? "当前已是最新版本");
}
}
// if(Platform.isAndroid){
//
... ... @@ -195,9 +195,10 @@ class UpdateModel {
//下载更新版本
Future<void> downloadApk(BuildContext context, String file_url) async {
Map<PermissionGroup, PermissionStatus> permissions =
await PermissionHandler().requestPermissions([PermissionGroup.storage]);
if (permissions[PermissionGroup.storage] == PermissionStatus.granted) {
Map<Permission, PermissionStatus> permissions = await [
Permission.storage,
].request();
if (permissions[Permission.storage] == PermissionStatus.granted) {
final dir = await getExternalStorageDirectory();
String savePath = dir.path + "/one_key";
Directory directory = new Directory(savePath);
... ...
... ... @@ -2,8 +2,7 @@ import 'package:flutter/services.dart';
import 'package:permission_handler/permission_handler.dart';
Future<bool> checkContactPermission() async {
PermissionStatus permissionStatus =
await PermissionHandler().checkPermissionStatus(PermissionGroup.contacts);
PermissionStatus permissionStatus = await Permission.contacts.status;
if (permissionStatus == PermissionStatus.granted) {
return true;
} else {
... ... @@ -11,18 +10,17 @@ Future<bool> checkContactPermission() async {
}
}
Future<bool> checkPermission(PermissionGroup permissionGroup) async {
PermissionStatus permissionStatus =
await PermissionHandler().checkPermissionStatus(permissionGroup);
Future<bool> checkPermission(Permission permissionGroup) async {
PermissionStatus permissionStatus = await permissionGroup.status;
if (permissionStatus == PermissionStatus.granted) {
return true;
} else {
return false;
}
}
Future<bool> requestPermission(PermissionGroup permissionGroup) async {
final permissions =
await PermissionHandler().requestPermissions([permissionGroup]);
Future<bool> requestPermission(Permission permissionGroup) async {
final permissions = await [permissionGroup].request();
if (permissions[permissionGroup] == PermissionStatus.granted) {
return true;
} else {
... ... @@ -30,23 +28,19 @@ Future<bool> requestPermission(PermissionGroup permissionGroup) async {
}
}
Future<PermissionStatus> permissionStatus(
PermissionGroup permissionGroup) async {
PermissionStatus permissionStatus =
await PermissionHandler().checkPermissionStatus(permissionGroup);
Future<PermissionStatus> permissionStatus(Permission permissionGroup) async {
PermissionStatus permissionStatus = await permissionGroup.status;
return permissionStatus;
}
Future<PermissionStatus> contactPermissionStatus() async {
PermissionStatus permissionStatus =
await PermissionHandler().checkPermissionStatus(PermissionGroup.contacts);
PermissionStatus permissionStatus = await Permission.contacts.status;
return permissionStatus;
}
Future<bool> requestContactPermission() async {
final permissions =
await PermissionHandler().requestPermissions([PermissionGroup.contacts]);
if (permissions[PermissionGroup.contacts] == PermissionStatus.granted) {
final permissions = await [Permission.contacts].request();
if (permissions[Permission.contacts] == PermissionStatus.granted) {
return true;
} else {
return false;
... ... @@ -54,5 +48,5 @@ Future<bool> requestContactPermission() async {
}
Future<bool> openSetting() {
return PermissionHandler().openAppSettings();
return openAppSettings();
}
... ...
... ... @@ -92,16 +92,16 @@ class Utils {
///检测是否有相机或者相册权限
static getPickPermission(BuildContext context, VoidCallback callback,
PermissionGroup permissionGroup) async {
Permission permissionGroup) async {
if (!(await checkPermission(permissionGroup))) {
String title = '相册';
if (permissionGroup == PermissionGroup.camera) {
if (permissionGroup == Permission.camera) {
title = '相机';
} else if (permissionGroup == PermissionGroup.location) {
} else if (permissionGroup == Permission.location) {
title = '位置';
}
PermissionStatus status = await permissionStatus(permissionGroup);
if (status == PermissionStatus.neverAskAgain) {
if (status == PermissionStatus.permanentlyDenied) {
//用户选择不在弹出权限提示框
print('never');
Navigator.pop(context);
... ...
... ... @@ -568,7 +568,7 @@ packages:
name: latlng
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.0.2"
version: "0.1.0"
logging:
dependency: transitive
description:
... ... @@ -722,14 +722,14 @@ packages:
name: permission_handler
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.4.0+hotfix.4"
version: "5.1.0+2"
permission_handler_platform_interface:
dependency: transitive
description:
name: permission_handler_platform_interface
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.0"
version: "2.0.2"
photo:
dependency: "direct main"
description:
... ... @@ -1158,5 +1158,5 @@ packages:
source: hosted
version: "2.2.1"
sdks:
dart: ">=2.12.0-0.0 <3.0.0"
dart: ">=2.12.0 <3.0.0"
flutter: ">=1.20.0"
... ...
... ... @@ -39,7 +39,7 @@ dependencies:
# Toast提示
fluttertoast: ^3.1.3
# 权限管理
permission_handler: ^4.4.0
permission_handler: ^5.1.0+2
# permission_handler: ^5.0.1+1 ^6.1.1 4.4.0
# 文件系统访问
path_provider: ^1.6.5
... ...