fix:将一些权限替换成新的权限框,删除一些无用代码

This commit is contained in:
ante 2024-04-18 17:41:14 +08:00
parent 7711525db2
commit ed4ab94246
9 changed files with 253 additions and 634 deletions

View File

@ -724,5 +724,7 @@
"商城":"mall",
"我的":"my",
"微信公众号推送":"Wechat public account",
"开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置":"To open wechat to receive alarm messages, you need to pay attention to Skye Smart Lock wechat public account first, please save the QR code and use wechat to scan the Settings"
"开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置":"To open wechat to receive alarm messages, you need to pay attention to Skye Smart Lock wechat public account first, please save the QR code and use wechat to scan the Settings",
"蓝牙":"Bluetooth",
"需要访问蓝牙权限才能使用添加钥匙功能的位置信息":"Access to Bluetooth permissions is required to use the location information of the add key function"
}

View File

@ -723,5 +723,9 @@
"商城":"mall",
"我的":"my",
"微信公众号推送":"微信公众号推送",
"开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置":"开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置"
"开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置":"开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置",
"蓝牙":"蓝牙",
"需要访问蓝牙权限才能使用添加钥匙功能的位置信息":"需要访问蓝牙权限才能使用添加钥匙功能的位置信息"
}

View File

@ -725,5 +725,8 @@
"商城":"商城",
"我的":"我的",
"微信公众号推送":"微信公众号推送",
"开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置":"开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置"
"开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置":"开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置",
"蓝牙":"蓝牙",
"需要访问蓝牙权限才能使用添加钥匙功能的位置信息":"需要访问蓝牙权限才能使用添加钥匙功能的位置信息"
}

View File

@ -116,23 +116,6 @@ class _MyAppState extends State<MyApp> with WidgetsBindingObserver, BaseWidget {
}
}
void openBlueScan() {
if (Platform.isIOS) {
print("有蓝牙权限开始扫描");
// startScanAction();
} else {
getMicrophonePermission().then((value) {
if (value) {
//
print("有蓝牙权限开始扫描");
// startScanAction();
} else {
//
openAppSettings(); //app系统设置
}
});
}
}
Future<bool> getLoginStatus() async {
final data = await Storage.getString(saveUserLoginData);
@ -141,21 +124,3 @@ Future<bool> getLoginStatus() async {
}
return false;
}
///
Future<bool> getMicrophonePermission() async {
// You can request multiple permissions at once.
Map<Permission, PermissionStatus> statuses = await [
Permission.bluetoothScan,
Permission.bluetoothConnect,
Permission.location,
].request();
//granted denied permanentlyDenied
if (statuses[Permission.bluetoothScan]!.isGranted &&
statuses[Permission.bluetoothConnect]!.isGranted &&
statuses[Permission.location]!.isGranted) {
return true;
}
return false;
}

View File

@ -320,13 +320,6 @@ class LockDetailLogic extends BaseGetXController {
state.lockUserNo = reply.data[47];
_updateLockUserNo();
// if (state.isOpenLockNeedOnline.value == 0) {
// openDoorAction(1);
// } else {
// getLockNetToken();
// }
// eventBus.fire(RefreshLockDetailInfoDataEvent());
// clickPushBtnAction();
break;
case 0x06:
//
@ -438,19 +431,6 @@ class LockDetailLogic extends BaseGetXController {
var token = await Storage.getStringList(saveBlueToken);
List<int> getTokenList = changeStringListToIntList(token!);
// print("调用了开锁事件 openDoorTokenPubToken:$getTokenList getPrivateKeyList:$getPrivateKeyList");
// List<int>listData = await IoSenderManage.senderOpenLock(
// keyID: BlueManage().connectDeviceName,
// userID: await Storage.getUid(),
// openMode: openMode,
// openTime: DateTime.now().millisecondsSinceEpoch ~/ 1000,
// onlineToken: state.lockNetToken,
// token: getTokenList,
// needAuthor: 1,
// signKey: signKeyDataList,
// privateKey: getPrivateKeyList,
// );
Get.log("openMode:${state.openDoorModel}");
BlueManage().bludSendData(state.keyInfos.value.bluetooth!.bluetoothDeviceName!, (BluetoothConnectionState deviceConnectionState) async {
if (deviceConnectionState == BluetoothConnectionState.connected) {
@ -478,91 +458,6 @@ class LockDetailLogic extends BaseGetXController {
});
}
//
// Future<void> editLockUserAction() async {
// BlueManage().bludSendData(BlueManage().connectDeviceMacAddress, BlueManage().connectDeviceName, (DeviceConnectionState state) async {
// if (state == DeviceConnectionState.connected){
// var publicKey = await Storage.getStringList(saveBluePublicKey);
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
//
// var privateKey = await Storage.getStringList(saveBluePrivateKey);
// List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
//
// var token = await Storage.getStringList(saveBlueToken);
// List<int> getTokenList = changeStringListToIntList(token!);
// print("openDoorTokenPubToken:$getTokenList");
//
// print("publicKey:$publicKey publicKeyDataList:$publicKeyDataList privateKey:$privateKey getPrivateKeyList:$getPrivateKeyList token:$token getTokenList:$getTokenList");
// IoSenderManage.senderEditUser(
// lockID:BlueManage().connectDeviceName,
// authUserID:await Storage.getUid(),
// keyID:"1",
// userID:await Storage.getUid(),
// openMode:1,
// keyType:1,
// startDate:0x11223344,
// expireDate:0x11223344,
// role:255,
// password:"123456",
// needAuthor:1,
// publicKey:publicKeyDataList,
// privateKey:getPrivateKeyList,
// token: getTokenList
// );
// }
// });
// }
//
// Future<void> _connectBlue(String bluetoothDeviceName) async {
// //
// BlueManage().connect(bluetoothDeviceName, (DeviceConnectionState state) async {
// if(EasyLoading.isShow){
// EasyLoading.dismiss();
// }
// if (state == DeviceConnectionState.connected){
// // var privateKey = await Storage.getStringList(saveBluePrivateKey);
// // List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
// // // IoSenderManage.senderGetLockStatu(
// // // lockID:BlueManage().connectDeviceName,
// // // userID:await Storage.getUid(),
// // // privateKey:getPrivateKeyList,
// // // );
// // IoSenderManage.senderGetStarLockStatuInfo(
// // lockID:BlueManage().connectDeviceName,
// // userID:await Storage.getUid(),
// // privateKey:getPrivateKeyList,
// // );
// }
// }, isShowLoading: false);
// }
//
// Future<void> getStarLockStatus() async {
// showEasyLoading();
// showBlueConnetctToastTimer(action: () {
// dismissEasyLoading();
// });
// BlueManage().bludSendData(BlueManage().connectDeviceName,
// (DeviceConnectionState deviceConnectionState) async {
// if (deviceConnectionState == DeviceConnectionState.connected) {
// dismissEasyLoading();
// var privateKey = await Storage.getStringList(saveBluePrivateKey);
// List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
// IoSenderManage.senderGetStarLockStatuInfo(
// lockID: BlueManage().connectDeviceName,
// userID: await Storage.getUid(),
// privateKey: getPrivateKeyList,
// );
// } else if (deviceConnectionState == DeviceConnectionState.disconnected) {
// dismissEasyLoading();
// cancelBlueConnetctToastTimer();
// if (state.ifCurrentScreen.value == true) {
// showBlueConnetctToast();
// }
// }
// });
// }
// ()
Future<void> senderReferEventRecordTime(int time) async {
@ -593,45 +488,6 @@ class LockDetailLogic extends BaseGetXController {
});
}
// // 0 1 2 3 4 5 6 7 8 9 10
// clickItemBtnAction(int type){
// state.clickNextType = type;
// if (state.lockUserNo == 0) {
// // lockUserNo为0
// addUserConnectBlue();
// } else {
// clickPushBtnAction();
// }
// }
//
// clickPushBtnAction(){
// // 0 1 2 3 4 5 6 7 8 9 10
// switch(state.clickNextType){
// case 0:
// //
// startOpenLock();
// break;
// case 1:
// //
// startUnLock();
// break;
// case 2:
// //
// Get.toNamed(Routers.passwordKeyListPage, arguments: {"keyInfo": state.keyInfos.value});
// break;
// case 3:
// //
// Get.toNamed(Routers.passwordKeyListPage, arguments: {"keyInfo": state.keyInfos.value});
// break;
// case 10:
// //
// Get.toNamed(Routers.lockSetPage, arguments: {
// "lockId": state.keyInfos.value.lockId,
// "isOnlyOneData": state.isOnlyOneData,
// });
// break;
// }
// }
// token
void getLockNetToken() async {
@ -706,17 +562,6 @@ class LockDetailLogic extends BaseGetXController {
}
}
//
// Future<void> uploadElectricQuantityRequest(String electricQuantity) async {
// KeyOperationRecordEntity entity = await ApiRepository.to
// .uploadElectricQuantity(
// electricQuantity, state.keyInfos.value.lockId.toString());
// if (entity.errorCode!.codeIsSuccessful) {
// showToast("电量更新成功", something: () {
// eventBus.fire(RefreshLockListInfoDataEvent());
// });
// }
// }
///
void initLockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceAction() {
@ -773,81 +618,6 @@ class LockDetailLogic extends BaseGetXController {
return text;
}
// late StreamSubscription<List<DiscoveredDevice>>
// _scanListDiscoveredDeviceSubscription;
// void _scanListDiscoveredDeviceSubscriptionAction() {
// _scanListDiscoveredDeviceSubscription = EventBusManager().eventBus!.on<List<DiscoveredDevice>>().listen((List<DiscoveredDevice> list) {
// final knownDeviceIndex = list.indexWhere((d) => d.name == state.keyInfos.value.bluetooth!.bluetoothDeviceName!);
// if (knownDeviceIndex >= 0) {
// //
// state.currentDeviceUUid.value = (list[knownDeviceIndex].serviceUuids.isNotEmpty ? list[knownDeviceIndex].serviceUuids[0] : "").toString();
// }
// });
// }
//
// void _showFullScreenOverlay(BuildContext context) {
// Future.delayed(const Duration(seconds: 3), () {
// if (state.iSClosedUnlockSuccessfulPopup.value != true) {
// state.iSClosedUnlockSuccessfulPopup.value = true;
// Get.back();
// }
// });
// showModalBottomSheet(
// context: context,
// isScrollControlled: true,
// backgroundColor: Colors.transparent,
// builder: (BuildContext context) {
// return GestureDetector(
// onTap: () {
// if (state.iSClosedUnlockSuccessfulPopup.value != true) {
// state.iSClosedUnlockSuccessfulPopup.value = true;
// Get.back();
// }
// },
// child: Container(
// height: MediaQuery.of(context).size.height,
// width: MediaQuery.of(context).size.width,
// color: Colors.black.withOpacity(0.2),
// child: _unlockSuccessWidget(),
// ),
// );
// },
// );
// }
// Widget _unlockSuccessWidget() {
// return Stack(
// alignment: Alignment.center,
// children: [
// Image.asset(
// 'images/main/unlocked_bg.png',
// width: 358.w,
// height: 348.h,
// ),
// Positioned(
// top: ScreenUtil().screenHeight / 2,
// child: Column(
// children: [
// Text(
// state.keyInfos.value.lockAlias!,
// style: TextStyle(
// color: AppColors.placeholderTextColor, fontSize: 24.sp),
// ),
// SizedBox(
// height: 10.h,
// ),
// Text(
// getCurrentFormattedTime(),
// style: TextStyle(
// color: AppColors.darkGrayTextColor, fontSize: 24.sp),
// )
// ],
// ))
// ],
// );
// }
String getCurrentFormattedTime() {
//
DateTime now = DateTime.now();
@ -856,82 +626,23 @@ class LockDetailLogic extends BaseGetXController {
return formattedTime;
}
Future<void> positionPermissionAlert() async {
//
if (Platform.isAndroid) {
AppFirstEnterHandle().getAppFirstEnter(state.widgetContext, isAgreePosition);
var getFlag = await Storage.getString(isAgreePosition);
if (getFlag == isAgreePosition) {
openBlueSet();
}
} else {
openBlueSet();
}
}
openBlueSet() {
if (!Platform.isIOS) {
getMicrophonePermission().then((value) {
if (!value) {
// app系统设置
openAppSettings();
} else {
//
}
});
}
}
///
Future<bool> getMicrophonePermission() async {
// You can request multiple permissions at once.
Map<Permission, PermissionStatus> statuses = await [
Permission.bluetoothScan,
Permission.bluetoothConnect,
Permission.location,
].request();
//granted denied permanentlyDenied
if (statuses[Permission.bluetoothScan]!.isGranted &&
statuses[Permission.bluetoothConnect]!.isGranted &&
statuses[Permission.location]!.isGranted) {
return true;
}
return false;
}
@override
Future<void> onReady() async {
// TODO: implement onReady
super.onReady();
Get.log("LockDetailPage onReady");
// _initReplySubscription();
// _initLockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceAction();
// openBlueSet();
await PermissionDialog.request(Permission.location);
// positionPermissionAlert();
await PermissionDialog.requestBluetooth();
}
@override
void onInit() {
// TODO: implement onInit
super.onInit();
Get.log("LockDetailPage onInit");
//
// connectBlue();
}
@override
void onClose() {
// TODO: implement onClose
super.onClose();
Get.log("LockDetailPage onClose");
// _scanListDiscoveredDeviceSubscription.cancel();
}
}

View File

@ -1,22 +1,23 @@
import 'dart:io';
import 'package:get/get.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:star_lock/appRouters.dart';
import 'package:star_lock/mine/addLock/addLock/addLock_state.dart';
import 'package:star_lock/permission/permission_dialog.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import '../../../blue/blue_manage.dart';
class AddLockLogic extends BaseGetXController {
final AddLockState state = AddLockState();
@override
void onReady() {
// TODO: implement onReady
super.onReady();
// BlueManage().stopScan();
}
@override
void onInit() {
// TODO: implement onInit
super.onInit();
}
@ -24,4 +25,18 @@ class AddLockLogic extends BaseGetXController {
void onClose() {
// TODO: implement onClose
}
//
Future<void> getNearByLimits() async {
if (!Platform.isIOS) {
bool bluetoothRequest = await PermissionDialog.requestBluetooth();
bool locationRequest = await PermissionDialog.request(Permission.location);
if (!bluetoothRequest || !locationRequest) {
return;
}
}
Get.toNamed(Routers.nearbyLockPage);
}
}

View File

@ -23,125 +23,71 @@ class AddLockPage extends StatefulWidget {
}
class _AddLockPageState extends State<AddLockPage> with BaseWidget {
final logic = Get.put(AddLockLogic());
final state = Get.find<AddLockLogic>().state;
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
appBar: TitleAppBar(
barTitle: TranslationLoader.lanKeys!.addLock!.tr,
haveBack: true,
backgroundColor: AppColors.mainColor),
body: ListView(
// mainAxisAlignment: MainAxisAlignment.center,
// crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(
height: 100.h,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
TranslationLoader.lanKeys!.lightTouchScreen!.tr,
style: TextStyle(
fontSize: 24.sp,
return GetBuilder<AddLockLogic>(
init: AddLockLogic(),
builder: (AddLockLogic logic) {
return Scaffold(
backgroundColor: Colors.white,
appBar: TitleAppBar(
barTitle: TranslationLoader.lanKeys!.addLock!.tr,
haveBack: true,
backgroundColor: AppColors.mainColor),
body: ListView(
// mainAxisAlignment: MainAxisAlignment.center,
// crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(
height: 100.h,
),
),
],
),
SizedBox(
height: 120.h,
),
Obx(() => Image.asset(
state.lockTypeImg.value,
width: 278.w,
height: 278.w,
)),
SizedBox(
height: 120.h,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
TranslationLoader.lanKeys!.lightTouchScreenTip!.tr,
style: TextStyle(fontSize: 20.sp, fontWeight: FontWeight.w500),
),
],
),
SizedBox(
height: 120.h,
),
Container(
margin: EdgeInsets.only(left: 20.w, right: 20.w),
child: SubmitBtn(
btnName: TranslationLoader.lanKeys!.next!.tr,
borderRadius: 20.w,
onClick: () {
getNearByLimits();
}),
),
],
),
);
}
void onShow() {}
void onHide() {}
//
void getNearByLimits() {
if (Platform.isIOS) {
Navigator.pushNamed(context, Routers.nearbyLockPage);
} else {
positionPermissionAlert();
}
}
///
Future<bool> getMicrophonePermission() async {
// You can request multiple permissions at once.
Map<Permission, PermissionStatus> statuses = await [
Permission.bluetoothScan,
Permission.bluetoothConnect,
Permission.location,
].request();
//granted denied permanentlyDenied
if (statuses[Permission.bluetoothScan]!.isGranted &&
statuses[Permission.bluetoothConnect]!.isGranted &&
statuses[Permission.location]!.isGranted) {
return true;
}
return false;
}
Future<void> positionPermissionAlert() async {
//
if (Platform.isAndroid) {
AppFirstEnterHandle().getAppFirstEnter(context, isAgreePosition);
var getFlag = await Storage.getString(isAgreePosition);
if (getFlag == isAgreePosition) {
onPermissionPush();
}
} else {
onPermissionPush();
}
}
void onPermissionPush() {
getMicrophonePermission().then((value) {
if (value) {
//
Navigator.pushNamed(context, Routers.nearbyLockPage);
} else {
//
openAppSettings(); //app系统设置
}
});
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
TranslationLoader.lanKeys!.lightTouchScreen!.tr,
style: TextStyle(
fontSize: 24.sp,
),
),
],
),
SizedBox(
height: 120.h,
),
Obx(() => Image.asset(
logic.state.lockTypeImg.value,
width: 278.w,
height: 278.w,
)),
SizedBox(
height: 120.h,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
TranslationLoader.lanKeys!.lightTouchScreenTip!.tr,
style: TextStyle(
fontSize: 20.sp, fontWeight: FontWeight.w500),
),
],
),
SizedBox(
height: 120.h,
),
Container(
margin: EdgeInsets.only(left: 20.w, right: 20.w),
child: SubmitBtn(
btnName: TranslationLoader.lanKeys!.next!.tr,
borderRadius: 20.w,
onClick: () {
logic.getNearByLimits();
}),
),
],
),
);
});
}
}

View File

@ -1,4 +1,3 @@
import 'dart:async';
import 'dart:io';
@ -11,6 +10,7 @@ import 'package:get/get.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:amap_flutter_map/amap_flutter_map.dart';
import 'package:amap_flutter_base/amap_flutter_base.dart';
import 'package:star_lock/permission/permission_dialog.dart';
import '../../../../appRouters.dart';
import '../../../../app_settings/app_colors.dart';
@ -28,12 +28,14 @@ class LockAddressGaoDePage extends StatefulWidget {
State<LockAddressGaoDePage> createState() => _LockAddressGaoDePageState();
}
class _LockAddressGaoDePageState extends State<LockAddressGaoDePage> with RouteAware{
class _LockAddressGaoDePageState extends State<LockAddressGaoDePage>
with RouteAware {
final logic = Get.put(LockAddressGaoDeLogic());
final state = Get.find<LockAddressGaoDeLogic>().state;
//
static AMapApiKey amapApiKeys = AMapApiKey(iosKey: F.aMapKey.iosKey, androidKey: F.aMapKey.androidKey);
static AMapApiKey amapApiKeys =
AMapApiKey(iosKey: F.aMapKey.iosKey, androidKey: F.aMapKey.androidKey);
AMapController? mapController;
AMapFlutterLocation location = AMapFlutterLocation();
@ -44,72 +46,29 @@ class _LockAddressGaoDePageState extends State<LockAddressGaoDePage> with RouteA
@override
void initState() {
super.initState();
AMapFlutterLocation.updatePrivacyAgree(true);
AMapFlutterLocation.updatePrivacyShow(true, true);
requestPermission();
AMapFlutterLocation.setApiKey(F.aMapKey.androidKey, F.aMapKey.iosKey);
// EasyLoading.show();
// Future.delayed(const Duration(seconds: 10), () { //asynchronous delay
// print("10s之后 菊花没有隐藏的话,强制隐藏菊花");
// if(EasyLoading.isShow){
// EasyLoading.dismiss();
// }
// });
// requestLocation();
}
Future<void> requestPermission() async {
final status = await Permission.location.request();
print("Permission.location.request()=status:$status");
permissionStatus = status;
if(Platform.isIOS){
final status = await PermissionDialog.request(Permission.location);
if (Platform.isIOS || status) {
_setLocationOption();
requestIOSLocation();
}
switch (status) {
case PermissionStatus.denied:
// print("拒绝");
break;
case PermissionStatus.granted:
if(Platform.isIOS){
// _setLocationOption();
// requestIOSLocation();
}else{
requestAndroidLocation();
location.startLocation();
}
break;
case PermissionStatus.limited:
// print("限制");
break;
case PermissionStatus.permanentlyDenied:
// print("永久的否认");
break;
case PermissionStatus.provisional:
// print("临时");
break;
default:
// print("其他状态");
// requestLocation();
break;
}
}
Future<void> requestAndroidLocation() async {
location.onLocationChanged().listen((event) {
// print("listenLocationChanged$event");
// EasyLoading.dismiss();
if (event.isNotEmpty) {
setState(() {
addressInfo = event;
});
location.stopLocation();
}
});
if (event.isNotEmpty) {
setState(() {
addressInfo = event;
});
location.stopLocation();
}
});
}
Future<void> requestIOSLocation() async {
@ -136,25 +95,6 @@ class _LockAddressGaoDePageState extends State<LockAddressGaoDePage> with RouteA
barTitle: TranslationLoader.lanKeys!.lockAddress!.tr,
haveBack: true,
backgroundColor: AppColors.mainColor,
// actionsList: [
// TextButton(
// child: Text(
// TranslationLoader.lanKeys!.next!.tr,
// style: TextStyle(color: Colors.white, fontSize: 24.sp),
// ),
// onPressed: () {
// if(addressInfo!.isEmpty){
// Toast.show(msg:"还未获取到位置信息哦,请耐心等待一下!");
// return;
// }
// Get.toNamed(Routers.saveLockPage, arguments: {
// "addressInfo": addressInfo,
// "pwdTimestamp": state.pwdTimestamp.value,
// });
// // Navigator.pushNamed(context, Routers.saveLockPage);
// },
// ),
// ],
),
body: ListView(
children: [
@ -168,74 +108,89 @@ class _LockAddressGaoDePageState extends State<LockAddressGaoDePage> with RouteA
),
),
SizedBox(
child:
(addressInfo != null && addressInfo!.containsKey("latitude")) ?
Column(
children: [
SizedBox(
height: 1.sw/5*4,
width: 1.sw,
child: AMapWidget(
apiKey: amapApiKeys,
//
initialCameraPosition: (
CameraPosition(
target: LatLng(double.parse(addressInfo!['latitude'].toString()), double.parse(addressInfo!['longitude'].toString())),
zoom: 10.0,
)
),
//
myLocationStyleOptions: MyLocationStyleOptions(
true,
),
// normal,satellite,night, navi,bus,
mapType: MapType.normal,
//
minMaxZoomPreference: const MinMaxZoomPreference(3, 20),
//
privacyStatement: const AMapPrivacyStatement(hasAgree: true, hasContains: true, hasShow: true),
// AMapController
onMapCreated: (AMapController controller) {
mapController = controller;
},
),
),
Container(
// color: Colors.red,
margin: EdgeInsets.only(left: 25.w, top: 20.h, right: 25.w),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
child: (addressInfo != null && addressInfo!.containsKey("latitude"))
? Column(
children: [
Flexible(child: Text("检查以确保以下地址是正确的".tr, style: TextStyle(fontSize: 24.sp))),
],
),
),
// SizedBox(height: 20.h),
Container(
// color: Colors.red,
// height: 45.h,
margin: EdgeInsets.only(left: 25.w, top: 20.h, right: 25.w),
child:Column(
children: [
Row(
SizedBox(
height: 1.sw / 5 * 4,
width: 1.sw,
child: AMapWidget(
apiKey: amapApiKeys,
//
initialCameraPosition: (CameraPosition(
target: LatLng(
double.parse(
addressInfo!['latitude'].toString()),
double.parse(
addressInfo!['longitude'].toString())),
zoom: 10.0,
)),
//
myLocationStyleOptions: MyLocationStyleOptions(
true,
),
// normal,satellite,night, navi,bus,
mapType: MapType.normal,
//
minMaxZoomPreference:
const MinMaxZoomPreference(3, 20),
//
privacyStatement: const AMapPrivacyStatement(
hasAgree: true, hasContains: true, hasShow: true),
// AMapController
onMapCreated: (AMapController controller) {
mapController = controller;
},
),
),
Container(
// color: Colors.red,
margin:
EdgeInsets.only(left: 25.w, top: 20.h, right: 25.w),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Expanded(
child: Text(addressInfo!["address"].toString() ?? "", style: const TextStyle(color: Colors.grey, fontSize: 16, fontWeight: FontWeight.w500, overflow: TextOverflow.clip))
),
Flexible(
child: Text("检查以确保以下地址是正确的".tr,
style: TextStyle(fontSize: 24.sp))),
],
),
SizedBox(height: 5.h),
Container(height: 1.h, color: AppColors.mainColor,),
],
)
),
],
) : SizedBox(
height: 1.sw/5*4 + 65.h*2,
child: Center(child: Text('地图加载中,请稍候。。。'.tr)))
,
),
// SizedBox(height: 20.h),
Container(
// color: Colors.red,
// height: 45.h,
margin: EdgeInsets.only(
left: 25.w, top: 20.h, right: 25.w),
child: Column(
children: [
Row(
children: [
Expanded(
child: Text(
addressInfo!["address"].toString() ??
"",
style: const TextStyle(
color: Colors.grey,
fontSize: 16,
fontWeight: FontWeight.w500,
overflow: TextOverflow.clip))),
],
),
SizedBox(height: 5.h),
Container(
height: 1.h,
color: AppColors.mainColor,
),
],
)),
],
)
: SizedBox(
height: 1.sw / 5 * 4 + 65.h * 2,
child: Center(child: Text('地图加载中,请稍候。。。'.tr))),
),
SizedBox(height:200.h),
SizedBox(height: 200.h),
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
@ -261,7 +216,7 @@ class _LockAddressGaoDePageState extends State<LockAddressGaoDePage> with RouteA
style: TextStyle(color: Colors.black, fontSize: 24.sp),
),
onPressed: () {
if(addressInfo!.isEmpty){
if (addressInfo!.isEmpty) {
logic.showToast("还未获取到位置信息哦,请耐心等待一下!".tr);
return;
}
@ -279,50 +234,9 @@ class _LockAddressGaoDePageState extends State<LockAddressGaoDePage> with RouteA
),
],
)
// Positioned(
// left: 20.w, right: 20.w, bottom: 100.h,
// child: Container(
// // height: h(106),
// decoration: BoxDecoration(
// color: AppColors.mainColor,
// borderRadius: BorderRadius.circular(15.w),
// ),
// child:Column(
// children: [
// Container(
// // height: h(53),
// padding: EdgeInsets.only(top: 15.h, bottom: 15, left:15.w, right: 15.w),
// child: Row(
// children: [
// Image.asset('images/main/icon_addUserShowAddress.png', width: 30.w, height: 30.w),
// SizedBox(width: 10.w),
// Expanded(
// child: Text(addressInfo!["address"].toString() ?? "", style: const TextStyle(color: Colors.white, fontSize: 16, fontWeight: FontWeight.w500, overflow: TextOverflow.clip))
// ),
// ],
// ),
// ),
// // Container(height: 1.h, color: const Color(0xFF021732),),
// // Container(
// // // height: h(52),
// // padding: EdgeInsets.only(top: 15.h, bottom: 15, left:15.w, right: 15.w),
// // child: Row(
// // children: [
// // Image.asset('images/main/icon_addUserAddressShowTime.png', width: 30.w, height: 30.w),
// // SizedBox(width: 10.w,),
// // Expanded(
// // child: Text(DateTool().getNowDateYMDHM(), style: const TextStyle(color: Colors.white, fontSize: 16, fontWeight: FontWeight.w500),)
// // ),
// // ],
// // ),
// // ),
// ],
// )
// ),),
],
),
);
}
///
@ -338,7 +252,8 @@ class _LockAddressGaoDePageState extends State<LockAddressGaoDePage> with RouteA
///
locationOption.geoLanguage = GeoLanguage.DEFAULT;
locationOption.desiredLocationAccuracyAuthorizationMode = AMapLocationAccuracyAuthorizationMode.ReduceAccuracy;
locationOption.desiredLocationAccuracyAuthorizationMode =
AMapLocationAccuracyAuthorizationMode.ReduceAccuracy;
locationOption.fullAccuracyPurposeKey = "AMapLocationScene";
@ -396,21 +311,18 @@ class _LockAddressGaoDePageState extends State<LockAddressGaoDePage> with RouteA
@override
void didPush() {
super.didPush();
}
///
@override
void didPop() {
super.didPop();
}
///
@override
void didPopNext() {
super.didPopNext();
}
///
@ -421,5 +333,4 @@ class _LockAddressGaoDePageState extends State<LockAddressGaoDePage> with RouteA
location.stopLocation();
location.destroy();
}
}

View File

@ -12,6 +12,9 @@ class PermissionDialog {
Permission.photos: '相册'.tr,
Permission.storage: '读写'.tr,
Permission.location: '定位'.tr,
Permission.bluetooth: '蓝牙'.tr,
Permission.bluetoothScan: '蓝牙'.tr,
Permission.bluetoothConnect: '蓝牙'.tr,
};
static Map<Permission, String> contents = {
@ -19,8 +22,67 @@ class PermissionDialog {
Permission.photos: '需要访问相机权限才能使用相册图片上传文件上传头像'.tr,
Permission.storage: '需要访问读写权限才能使用本地图片上传头像'.tr,
Permission.location: '需要访问定位权限才能使用添加钥匙功能的位置信息'.tr,
Permission.bluetooth: '需要访问蓝牙权限才能使用添加钥匙功能的位置信息'.tr,
Permission.bluetoothScan: '需要访问蓝牙权限才能使用添加钥匙功能的位置信息'.tr,
Permission.bluetoothConnect: '需要访问蓝牙权限才能使用添加钥匙功能的位置信息'.tr,
};
static Future<bool> requestBluetooth() async {
if (Get.context == null) {
return false;
}
bool application = true;
Map<Permission, PermissionStatus> statuses = await [
Permission.bluetoothScan,
Permission.bluetoothConnect,
].request();
Permission permission = Permission.bluetoothScan;
dynamic cache = await Storage.getString(titles[permission]);
bool isGranted = statuses.values.every((element) => element.isGranted);
if (AppPlatform.isAndroid && !isGranted && cache is! String) {
application = await showCupertinoDialog(
context: Get.context!,
builder: (context) {
return PopScope(
canPop: false,
child: CupertinoAlertDialog(
title: Text('${'申请'.tr}${titles[permission] ?? ''}${'权限'.tr}'),
content: Text(contents[permission] ?? ''),
actions: [
CupertinoDialogAction(
child: Text('不允许'.tr),
onPressed: () {
Get.back(result: false);
},
),
CupertinoDialogAction(
child: Text('允许'.tr),
onPressed: () {
Get.back(result: true);
},
),
],
));
},
);
if (application) {
await Storage.setString(titles[permission], titles[permission]);
}
} else if (cache is String) {
bool isDenied = statuses.values.every((element) => element.isDenied);
if (isDenied) {
showSet(permission);
return false;
}
}
if (application) {
PermissionStatus status = await permission.request();
return status.isGranted;
}
return false;
}
//
static Future<bool> request(Permission permission) async {
if (Get.context == null) {