Merge branch 'master' of gitee.com:starlock-cn/app-starlock
This commit is contained in:
commit
2df8f7ff72
@ -399,15 +399,14 @@ class BlueManage {
|
||||
}
|
||||
|
||||
// await bluetoothConnectDevice!.connect();
|
||||
Get.log("5555555:回调状态:$bluetoothConnectionState");
|
||||
if (bluetoothConnectionState == BluetoothConnectionState.connected) {
|
||||
try {
|
||||
bluetoothConnectDevice!.discoverServices().then((services) {
|
||||
for (BluetoothService service in services) {
|
||||
// Get.log("11111service.remoteId:${service.remoteId}"
|
||||
// " service.uuid:${service.uuid}"
|
||||
// " service.characteristics:${service.characteristics}"
|
||||
// " service.includedServices:${service.includedServices}");
|
||||
Get.log("11111service.remoteId:${service.remoteId}"
|
||||
" service.uuid:${service.uuid}"
|
||||
" service.characteristics:${service.characteristics}"
|
||||
" service.includedServices:${service.includedServices}");
|
||||
if (service.uuid == _serviceIdConnect) {
|
||||
for (BluetoothCharacteristic characteristic in service.characteristics) {
|
||||
// Get.log("22222characteristic.remoteId:${characteristic.remoteId}"
|
||||
|
||||
@ -35,7 +35,7 @@ class StarLockMineLogic extends BaseGetXController {
|
||||
state.userEmail.value = (await Storage.getEmail())!;
|
||||
state.userHeadUrl.value = (await Storage.getHeadUrl())!;
|
||||
|
||||
Get.log("userNickName:${state.userNickName.value} userMobile:${state.userMobile.value} userEmail:${state.userEmail.value}");
|
||||
Get.log("userNickName:${state.userNickName.value} userMobile:${state.userMobile.value} userEmail:${state.userEmail.value} userHeadUrl:${state.userHeadUrl.value}");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -69,24 +69,24 @@ class StarLockMinePageState extends State<StarLockMinePage> with BaseWidget {
|
||||
Get.back();
|
||||
Get.toNamed(Routers.minePersonInfoPage);
|
||||
},
|
||||
child: Container(
|
||||
width: 105.w,
|
||||
height: 105.w,
|
||||
// decoration: BoxDecoration(
|
||||
// borderRadius:
|
||||
// BorderRadius.all(Radius.circular(52.5.w)),
|
||||
// ),
|
||||
child: ClipRRect(
|
||||
borderRadius: BorderRadius.circular(52.5.w),
|
||||
child: CustomNetworkImage(url:state.userHeadUrl.value??"", width:105.w, height:105.h),
|
||||
),
|
||||
// state.headUrl().isNotEmpty ?
|
||||
// Image(image: NetworkImage(state.loginData.value.data!.headUrl!)) :
|
||||
// Image.asset(
|
||||
// 'images/mine/icon_mine_main_defaultAvatar.png',
|
||||
// width: 60.w,
|
||||
// height: 60.w)
|
||||
),
|
||||
child: Obx(() => Container(
|
||||
width: 105.w,
|
||||
height: 105.w,
|
||||
// decoration: BoxDecoration(
|
||||
// borderRadius:
|
||||
// BorderRadius.all(Radius.circular(52.5.w)),
|
||||
// ),
|
||||
child: ClipRRect(
|
||||
borderRadius: BorderRadius.circular(52.5.w),
|
||||
child: CustomNetworkImage(url:state.userHeadUrl.value??"", defaultUrl: 'images/controls_user.png', width:105.w, height:105.h),
|
||||
),
|
||||
// state.headUrl().isNotEmpty ?
|
||||
// Image(image: NetworkImage(state.loginData.value.data!.headUrl!)) :
|
||||
// Image.asset(
|
||||
// 'images/mine/icon_mine_main_defaultAvatar.png',
|
||||
// width: 60.w,
|
||||
// height: 60.w)
|
||||
)),
|
||||
),
|
||||
SizedBox(
|
||||
height: 20.h,
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
|
||||
import 'dart:async';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:get/get.dart';
|
||||
@ -8,12 +9,12 @@ import '../../../../tools/baseGetXController.dart';
|
||||
import '../../../tools/storage.dart';
|
||||
|
||||
class MinePersonInfoEditNameLogic extends BaseGetXController {
|
||||
final MinePersonInfoEditNamePageState state =
|
||||
MinePersonInfoEditNamePageState();
|
||||
final MinePersonInfoEditNamePageState state = MinePersonInfoEditNamePageState();
|
||||
//更新个人信息-昵称
|
||||
Future<void> updateUserInfoRequest() async {
|
||||
var entity =
|
||||
await ApiRepository.to.updateUserInfo(state.inputNickName.value);
|
||||
var entity = await ApiRepository.to.updateUserNameInfo(
|
||||
nickname: state.inputNickName.value,
|
||||
);
|
||||
if (entity.errorCode!.codeIsSuccessful) {
|
||||
showToast("操作成功");
|
||||
final loginData = await Storage.getLoginData();
|
||||
|
||||
@ -1,7 +1,11 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import '../minePersonInfoPage/minePersonInfo_entity.dart';
|
||||
|
||||
class MinePersonInfoEditNamePageState {
|
||||
final mineInfoData = MinePersonInfoData().obs;
|
||||
|
||||
final TextEditingController nickNameController = TextEditingController();
|
||||
|
||||
final inputNickName = ''.obs;
|
||||
@ -10,6 +14,8 @@ class MinePersonInfoEditNamePageState {
|
||||
|
||||
MinePersonInfoEditNamePageState() {
|
||||
Map map = Get.arguments;
|
||||
inputNickName.value = map["nickName"];
|
||||
mineInfoData.value = map["mineInfoData"];
|
||||
nickNameController.text = mineInfoData.value.nickname!;
|
||||
inputNickName.value = mineInfoData.value.nickname!;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,28 +1,31 @@
|
||||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_entity.dart';
|
||||
import 'package:star_lock/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_state.dart';
|
||||
import '../../../../network/api_repository.dart';
|
||||
import '../../../../tools/baseGetXController.dart';
|
||||
import '../../../tools/eventBusEventManage.dart';
|
||||
import '../../../tools/storage.dart';
|
||||
import 'minePersonGetUploadFileInfo_entity.dart';
|
||||
|
||||
class MinePersonInfoLogic extends GetConnect {
|
||||
final MinePersonInfoState state = MinePersonInfoState();
|
||||
MinePersonInfoState state = MinePersonInfoState();
|
||||
|
||||
//用户信息
|
||||
Future<void> getUserInfoRequest() async {
|
||||
MinePersonInfoEntity entity = await ApiRepository.to.getUserInfo("");
|
||||
MinePersonInfoEntity entity = await ApiRepository.to.getUserInfo();
|
||||
if (entity.errorCode!.codeIsSuccessful) {
|
||||
state.mineInfoData.value = entity.data!;
|
||||
state.headUrl.value = state.mineInfoData.value.headUrl!;
|
||||
}
|
||||
}
|
||||
|
||||
//上传头像 先获取upToken 再调用updateUserInfo
|
||||
Future<void> getUpTokenRequest(String filename, int size) async {
|
||||
var entity = await ApiRepository.to.getUpToken(
|
||||
module: 'avatar',
|
||||
typeKey: 'userId',
|
||||
type: state.mineInfoData.value.uid!.toString(),
|
||||
userId: state.mineInfoData.value.uid!.toString(),
|
||||
filename: filename,
|
||||
size: size);
|
||||
if (entity.errorCode!.codeIsSuccessful) {
|
||||
@ -33,44 +36,32 @@ class MinePersonInfoLogic extends GetConnect {
|
||||
|
||||
// 上传头像
|
||||
void uploadFile(MinePersonGetUploadFileInfoEntity minePersonGetUploadFileInfoEntity) async {
|
||||
// String json = JsonDecoder(minePersonGetUploadFileInfoEntity.data!.formData!);
|
||||
|
||||
// var formData = FormData();
|
||||
//
|
||||
// formData.files.add(MapEntry(
|
||||
// "files", //后台接收的名字
|
||||
// MultipartFile(state.image!.path, filename: 'b'),
|
||||
// ));
|
||||
|
||||
Map<String, dynamic> user = minePersonGetUploadFileInfoEntity.data!.formData!;
|
||||
user[minePersonGetUploadFileInfoEntity.data!.fileField!] = state.image!.path;
|
||||
final form = FormData(user);
|
||||
var entity = await ApiRepository.to.uploadFile(
|
||||
url: minePersonGetUploadFileInfoEntity.data!.uploadUrl!, body: form);
|
||||
if (entity.errorCode!.codeIsSuccessful) {}
|
||||
|
||||
// final formData = FormData.fromMap({
|
||||
// 'file': await MultipartFile.fromFile(imageFile.path, contentType: MediaType.parse(mimeType))
|
||||
// });
|
||||
|
||||
// final form = FormData(user);
|
||||
// Response response= await post(minePersonGetUploadFileInfoEntity.data!.uploadUrl, form);
|
||||
// print("statusText:${response.statusText} statusCode:${response.statusCode} response:$response");
|
||||
}
|
||||
|
||||
void postCases(List<int> image) async {
|
||||
var bytes = File(state.image!.path);
|
||||
var enc = await bytes.readAsBytes();
|
||||
user[minePersonGetUploadFileInfoEntity.data!.fileField!] = enc;
|
||||
final form = FormData({
|
||||
'file': MultipartFile(image, filename: 'avatar.png'),
|
||||
'otherFile': MultipartFile(image, filename: 'cover.png'),
|
||||
'file': MultipartFile(enc, filename: minePersonGetUploadFileInfoEntity.data!.formData!["key"]),
|
||||
});
|
||||
Response response = await post('http://youapi/users/upload', form);
|
||||
var entity = await ApiRepository.to.uploadFile(url: minePersonGetUploadFileInfoEntity.data!.uploadUrl!, body: form);
|
||||
if (entity.errorCode! == -1) {
|
||||
// 没有返回 返回null成功
|
||||
updateUserInfoRequest(minePersonGetUploadFileInfoEntity.data!.fileUrl!);
|
||||
}
|
||||
}
|
||||
|
||||
//更新个人信息-头像
|
||||
Future<void> updateUserInfoRequest() async {
|
||||
var entity = await ApiRepository.to
|
||||
.updateUserInfo(state.mineInfoData.value.headUrl!);
|
||||
Future<void> updateUserInfoRequest(String headUrl) async {
|
||||
var entity = await ApiRepository.to.updateUserHeadUrlInfo(
|
||||
headUrl: headUrl
|
||||
);
|
||||
if (entity.errorCode!.codeIsSuccessful) {
|
||||
state.headUrl.value = headUrl;
|
||||
state.mineInfoData.value.headUrl = state.headUrl.value!;
|
||||
final loginData = await Storage.getLoginData();
|
||||
loginData!.headUrl = headUrl;
|
||||
await Storage.saveLoginData(loginData);
|
||||
eventBus.fire(MineInfoChangeRefreshUI());
|
||||
EasyLoading.showToast("操作成功", duration: 2000.milliseconds);
|
||||
}
|
||||
}
|
||||
@ -80,7 +71,6 @@ class MinePersonInfoLogic extends GetConnect {
|
||||
// TODO: implement onReady
|
||||
super.onReady();
|
||||
|
||||
getUserInfoRequest();
|
||||
}
|
||||
|
||||
@override
|
||||
@ -88,6 +78,7 @@ class MinePersonInfoLogic extends GetConnect {
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
|
||||
getUserInfoRequest();
|
||||
}
|
||||
|
||||
@override
|
||||
|
||||
@ -60,20 +60,16 @@ class _MinePersonInfoPageState extends State<MinePersonInfoPage>
|
||||
backgroundColor: AppColors.mainColor),
|
||||
body: Column(
|
||||
children: [
|
||||
CommonItem(
|
||||
Obx(() => CommonItem(
|
||||
leftTitel: TranslationLoader.lanKeys!.avatar!.tr,
|
||||
rightTitle: "",
|
||||
allHeight: 100.h,
|
||||
isHaveLine: true,
|
||||
isHaveDirection: true,
|
||||
isHaveRightWidget: true,
|
||||
rightWidget:
|
||||
Container(
|
||||
// color: Colors.orange,
|
||||
child: ClipRRect(
|
||||
borderRadius: BorderRadius.circular(36.w),
|
||||
child: CustomNetworkImage(url:"https://ui-avatars.com/api/?name=%E6%98%B5&color=7F9CF5&background=EBF4FF", width:72.w, height:72.w),
|
||||
),
|
||||
rightWidget: ClipRRect(
|
||||
borderRadius: BorderRadius.circular(36.w),
|
||||
child: CustomNetworkImage(url:state.headUrl.value, defaultUrl: 'images/controls_user.png', width:72.w, height:72.w),
|
||||
),
|
||||
// ClipOval(
|
||||
// child: state.image != null
|
||||
@ -102,7 +98,7 @@ class _MinePersonInfoPageState extends State<MinePersonInfoPage>
|
||||
_openModalBottomSheet();
|
||||
}
|
||||
},
|
||||
),
|
||||
)),
|
||||
Obx(() => CommonItem(
|
||||
leftTitel: TranslationLoader.lanKeys!.nickName!.tr,
|
||||
rightTitle: state.mineInfoData.value.nickname != null ? state.mineInfoData.value.nickname! : "",
|
||||
@ -110,7 +106,7 @@ class _MinePersonInfoPageState extends State<MinePersonInfoPage>
|
||||
isHaveDirection: true,
|
||||
action: () {
|
||||
Navigator.pushNamed(context, Routers.minePersonInfoEditNamePage,
|
||||
arguments: {'nickName': state.mineInfoData.value.nickname})
|
||||
arguments: {'mineInfoData': state.mineInfoData.value})
|
||||
.then((value) => logic.getUserInfoRequest());
|
||||
})),
|
||||
Obx(() => CommonItem(
|
||||
@ -280,9 +276,11 @@ class _MinePersonInfoPageState extends State<MinePersonInfoPage>
|
||||
int getSelectIndex = value;
|
||||
if (getSelectIndex == 0) {
|
||||
//拍照选项
|
||||
state.hasCameraPermission.value == true ? selectCamera() : _requestCameraPermission();
|
||||
// state.hasCameraPermission.value == true ? selectCamera() : _requestCameraPermission();
|
||||
_checkCameraPermission();
|
||||
} else if (getSelectIndex == 1) {
|
||||
state.hasPhotoPermission.value == true ? selectImage() : _requestPhotoPermission();
|
||||
// state.hasPhotoPermission.value == true ? selectImage() : _requestPhotoPermission();
|
||||
_checkPhotoPermission();
|
||||
}
|
||||
},
|
||||
);
|
||||
@ -294,8 +292,9 @@ class _MinePersonInfoPageState extends State<MinePersonInfoPage>
|
||||
XFile? photo = await state.imagePicker.pickImage(source: ImageSource.camera, preferredCameraDevice: CameraDevice.rear);
|
||||
if (photo != null) {
|
||||
state.image = photo;
|
||||
// logic.getUpTokenRequest();
|
||||
setState(() {});
|
||||
var bytes = File(state.image!.path);
|
||||
var enc = await bytes.readAsBytes();
|
||||
logic.getUpTokenRequest(state.image!.name, enc.length);
|
||||
}
|
||||
}
|
||||
|
||||
@ -310,37 +309,28 @@ class _MinePersonInfoPageState extends State<MinePersonInfoPage>
|
||||
state.image = image;
|
||||
var bytes = File(state.image!.path);
|
||||
var enc = await bytes.readAsBytes();
|
||||
print(enc.length);
|
||||
print(
|
||||
"state.image!.path:${state.image!.path} state.image!.name:${state.image!.name} state.image!.length():${state.image!.length()}");
|
||||
logic.getUpTokenRequest(state.image!.name, enc.length);
|
||||
setState(() {});
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _checkCameraPermission() async {
|
||||
var status = await Permission.camera.status;
|
||||
if (status.isGranted) {
|
||||
setState(() {
|
||||
state.hasCameraPermission.value = true; // 如果权限已经被授予,更新状态变量
|
||||
});
|
||||
selectCamera();
|
||||
} else {
|
||||
setState(() {
|
||||
state.hasCameraPermission.value = false; // 如果权限未被授予,更新状态变量
|
||||
});
|
||||
_requestCameraPermission();
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _checkPhotoPermission() async {
|
||||
var status = await Permission.photos.status;
|
||||
if (status.isGranted) {
|
||||
setState(() {
|
||||
state.hasPhotoPermission.value = true; // 如果权限已经被授予,更新状态变量
|
||||
});
|
||||
selectImage();
|
||||
} else {
|
||||
setState(() {
|
||||
state.hasPhotoPermission.value = false; // 如果权限未被授予,更新状态变量
|
||||
});
|
||||
// setState(() {
|
||||
// state.hasPhotoPermission.value = false; // 如果权限未被授予,更新状态变量
|
||||
// });
|
||||
_requestPhotoPermission();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -4,6 +4,7 @@ import 'package:star_lock/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_
|
||||
|
||||
class MinePersonInfoState {
|
||||
final mineInfoData = MinePersonInfoData().obs;
|
||||
final headUrl = ''.obs;
|
||||
|
||||
var typeStr = '2'.obs; //2:上传头像
|
||||
|
||||
@ -15,4 +16,6 @@ class MinePersonInfoState {
|
||||
|
||||
var hasPhotoPermission = false.obs; //是否有相册权限
|
||||
var hasCameraPermission = false.obs; //是否有相机权限
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -175,8 +175,7 @@ abstract class Api {
|
||||
'/safeAnswer/getOwnQuestionList'; //获取已设置的安全信息
|
||||
final String updateSafeAnswerURL = '/safeAnswer/update'; //修改安全信息
|
||||
final String setSafeAnswerURL = '/safeAnswer/set'; //设置安全信息
|
||||
final String getUpTokenURL =
|
||||
'/file/getUploadParams'; //上传头像 先获取upToken 再调用updateUserInfo
|
||||
final String getUpTokenURL = '/file/getUploadParams'; //上传头像 先获取upToken 再调用updateUserInfo
|
||||
final String unbindPhoneTokenURL = '/user/unbindPhoneToken'; //获取解绑手机号Token
|
||||
final String unbindEmailTokenURL = '/user/unbindEmailToken'; //获取解绑邮箱Token
|
||||
final String pushBindAppIdURL = '/user/bindAppId'; //推送绑定APP设备
|
||||
|
||||
@ -1555,9 +1555,17 @@ class ApiProvider extends BaseProvider {
|
||||
'xWidth': xWidth,
|
||||
}));
|
||||
|
||||
//更新个人信息-头像/昵称
|
||||
Future<Response> updateUserInfo(String nickname) =>
|
||||
post(updateUserInfoURL.toUrl, jsonEncode({'nickname': nickname}));
|
||||
//更新个人信息-昵称
|
||||
Future<Response> updateUserNameInfo(String nickname) =>
|
||||
post(updateUserInfoURL.toUrl, jsonEncode({
|
||||
'nickname': nickname,
|
||||
}));
|
||||
|
||||
//更新个人信息-头像
|
||||
Future<Response> updateUserHeadUrlInfo(String headUrl) =>
|
||||
post(updateUserInfoURL.toUrl, jsonEncode({
|
||||
'headUrl': headUrl,
|
||||
}));
|
||||
|
||||
//修改绑定手机号
|
||||
Future<Response> bindPhone(String countryCode, String account,
|
||||
@ -1617,20 +1625,23 @@ class ApiProvider extends BaseProvider {
|
||||
jsonEncode({"questionAndAnswerList": questionAndAnswerList}));
|
||||
|
||||
// 获取上传文件的upToken 再调用updateUserInfo
|
||||
Future<Response> getUpToken(String module, String typeKey, String type,
|
||||
String filename, int size) =>
|
||||
Future<Response> getUpHeadToken(
|
||||
String userId,
|
||||
String filename,
|
||||
int size,
|
||||
) =>
|
||||
post(
|
||||
getUpTokenURL.toUrl,
|
||||
jsonEncode({
|
||||
"module": module,
|
||||
typeKey: type,
|
||||
"module": "avatar",
|
||||
"userId": userId,
|
||||
"filename": filename,
|
||||
"size": size,
|
||||
}));
|
||||
|
||||
// 文件上传
|
||||
Future<Response> uploadFile(String url, dynamic boay) => post(url, boay,
|
||||
isUnUploadFile: false, contentType: 'multipart/form-data');
|
||||
isUnUploadFile: false, contentType: 'multipart/form-data', isUserBaseUrl: false);
|
||||
|
||||
//获取解绑手机号Token
|
||||
Future<Response> unbindPhoneToken(String verificationCode) => post(
|
||||
|
||||
@ -29,10 +29,17 @@ class BaseProvider extends GetConnect with Api {
|
||||
Decoder<T>? decoder,
|
||||
bool? isUnUploadFile = true,
|
||||
Progress? uploadProgress,
|
||||
bool? isUnShowLoading = false}) async {
|
||||
bool? isUnShowLoading = false,// 是否显示loading
|
||||
bool? isUserBaseUrl = true,// 文件上传不使用baseUrl
|
||||
}) async {
|
||||
// print("post: url:${url} body:${body} contentType:${contentType} headers:${headers} query:${query}");
|
||||
if (isUnShowLoading == false) EasyLoading.show();
|
||||
// print('请求url======>$url');
|
||||
if (isUserBaseUrl == false){
|
||||
httpClient.baseUrl = '';
|
||||
}else{
|
||||
httpClient.baseUrl = '${F.apiPrefix}/api';
|
||||
}
|
||||
print('请求body体======>$body');
|
||||
var res = await super.post(url, body,
|
||||
contentType: contentType,
|
||||
@ -59,7 +66,7 @@ class BaseProvider extends GetConnect with Api {
|
||||
statusText: res.statusText,
|
||||
);
|
||||
} else {}
|
||||
// print('得到的数据======>${res.bodyString}');
|
||||
print('得到的数据======>${res.bodyString}');
|
||||
getDataResult(res.body);
|
||||
return res;
|
||||
}
|
||||
|
||||
@ -1573,8 +1573,8 @@ class ApiRepository {
|
||||
}
|
||||
|
||||
//获取个人信息
|
||||
Future<MinePersonInfoEntity> getUserInfo(String operatorUid) async {
|
||||
final res = await apiProvider.getUserInfo(operatorUid);
|
||||
Future<MinePersonInfoEntity> getUserInfo() async {
|
||||
final res = await apiProvider.getUserInfo("");
|
||||
return MinePersonInfoEntity.fromJson(res.body);
|
||||
}
|
||||
|
||||
@ -1596,9 +1596,21 @@ class ApiRepository {
|
||||
return SendValidationCodeEntity.fromJson(res.body);
|
||||
}
|
||||
|
||||
//更新个人信息-头像/昵称
|
||||
Future<PasswordKeyListEntity> updateUserInfo(String nickname) async {
|
||||
final res = await apiProvider.updateUserInfo(nickname);
|
||||
//更新个人信息-昵称
|
||||
Future<PasswordKeyListEntity> updateUserNameInfo(
|
||||
{
|
||||
required String nickname,
|
||||
}) async {
|
||||
final res = await apiProvider.updateUserNameInfo(nickname);
|
||||
return PasswordKeyListEntity.fromJson(res.body);
|
||||
}
|
||||
|
||||
//更新个人信息-头像
|
||||
Future<PasswordKeyListEntity> updateUserHeadUrlInfo(
|
||||
{
|
||||
required String headUrl
|
||||
}) async {
|
||||
final res = await apiProvider.updateUserHeadUrlInfo(headUrl);
|
||||
return PasswordKeyListEntity.fromJson(res.body);
|
||||
}
|
||||
|
||||
@ -1652,14 +1664,13 @@ class ApiRepository {
|
||||
}
|
||||
|
||||
//上传头像 先获取upToken 再调用updateUserInfo
|
||||
Future<MinePersonGetUploadFileInfoEntity> getUpToken(
|
||||
{required String module,
|
||||
required String typeKey,
|
||||
required String type,
|
||||
required String filename,
|
||||
required int size}) async {
|
||||
Future<MinePersonGetUploadFileInfoEntity> getUpToken({
|
||||
required String userId,
|
||||
required String filename,
|
||||
required int size,
|
||||
}) async {
|
||||
final res =
|
||||
await apiProvider.getUpToken(module, typeKey, type, filename, size);
|
||||
await apiProvider.getUpHeadToken(userId, filename, size);
|
||||
return MinePersonGetUploadFileInfoEntity.fromJson(res.body);
|
||||
}
|
||||
|
||||
|
||||
@ -4,8 +4,7 @@ import 'package:get/get.dart';
|
||||
import 'package:get/get_connect/http/src/request/request.dart';
|
||||
|
||||
FutureOr<dynamic> responseLogInterceptor(Request request, Response response) {
|
||||
Get.log(
|
||||
'HTTP request:${request.url}\n RESPONSE => stataCode:${response.statusCode} ${response.bodyString} ${response.headers}');
|
||||
// Get.log('HTTP request:${request.url}\n RESPONSE => stataCode:${response.statusCode} ${response.bodyString} ${response.headers}');
|
||||
EasyLoading.dismiss(animation: true);
|
||||
return response;
|
||||
}
|
||||
|
||||
84
star_lock/lib/permission/permission_dialog.dart
Normal file
84
star_lock/lib/permission/permission_dialog.dart
Normal file
@ -0,0 +1,84 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:permission_handler/permission_handler.dart';
|
||||
import 'package:star_lock/app_settings/app_settings.dart';
|
||||
|
||||
class PermissionDialog {
|
||||
static Map<Permission, String> titles = {
|
||||
Permission.camera: '相机',
|
||||
Permission.photos: '相册',
|
||||
Permission.storage: '读写',
|
||||
Permission.location: '定位',
|
||||
};
|
||||
|
||||
static Map<Permission, String> contents = {
|
||||
Permission.camera: '需要访问相机权限才能拍照上传文件例如头像上传',
|
||||
Permission.photos: '需要访问相机权限才能使用相册图片上传文件上传头像',
|
||||
Permission.storage: '需要访问读写权限才能使用本地图片上传头像',
|
||||
Permission.location: '需要访问定位权限才能使用添加钥匙功能的位置信息',
|
||||
};
|
||||
|
||||
//显示权限判断申请框
|
||||
static Future<bool> request(Permission permission) async {
|
||||
if (Get.context == null) {
|
||||
return false;
|
||||
}
|
||||
bool application = true;
|
||||
if (AppPlatform.isAndroid) {
|
||||
application = await showDialog(
|
||||
context: Get.context!,
|
||||
builder: (BuildContext context) {
|
||||
return AlertDialog(
|
||||
title: Text('申请${titles[permission] ?? ''}权限'),
|
||||
content: Text(contents[permission] ?? ''),
|
||||
actions: <Widget>[
|
||||
TextButton(
|
||||
child: const Text('不允许'),
|
||||
onPressed: () {
|
||||
Get.back(result: false);
|
||||
},
|
||||
),
|
||||
TextButton(
|
||||
child: const Text('允许'),
|
||||
onPressed: () {
|
||||
Get.back(result: true);
|
||||
},
|
||||
),
|
||||
],
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
if (!application) {
|
||||
showSet(permission);
|
||||
return false;
|
||||
} else {
|
||||
return await permission.request().isGranted;
|
||||
}
|
||||
}
|
||||
|
||||
//显示设置页面
|
||||
static Future<void> showSet(Permission permission) async {
|
||||
if (Get.context == null) {
|
||||
return;
|
||||
}
|
||||
showDialog(
|
||||
context: Get.context!,
|
||||
builder: (BuildContext context) {
|
||||
return AlertDialog(
|
||||
title: Text('${titles[permission] ?? ''}权限被拒绝'),
|
||||
content: Text('${contents[permission] ?? ''},请手动在系统设置中开启${titles[permission]}权限以继续使用应用。'),
|
||||
actions: <Widget>[
|
||||
TextButton(
|
||||
child: Text('去设置'),
|
||||
onPressed: () {
|
||||
Get.back(); // 关闭对话框
|
||||
openAppSettings(); // 打开系统设置页面
|
||||
},
|
||||
),
|
||||
],
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -8,14 +8,15 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
|
||||
class CustomNetworkImage extends StatelessWidget {
|
||||
final String url;
|
||||
final String defaultUrl;
|
||||
final double width;
|
||||
final double height;
|
||||
final BoxFit boxFit;
|
||||
const CustomNetworkImage({Key? key, required this.url, required this.width, required this.height, this.boxFit=BoxFit.cover}) : super(key: key);
|
||||
const CustomNetworkImage({Key? key, required this.url, required this.defaultUrl, required this.width, required this.height, this.boxFit=BoxFit.cover}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return CachedNetworkImage(
|
||||
return url.isNotEmpty ? CachedNetworkImage(
|
||||
width: width,
|
||||
height: height,
|
||||
fit: boxFit,
|
||||
@ -28,7 +29,17 @@ class CustomNetworkImage extends StatelessWidget {
|
||||
colorFilter: const ColorFilter.mode(Colors.transparent, BlendMode.colorBurn)),
|
||||
),
|
||||
),
|
||||
errorWidget: (context, url, error) => Icon(Icons.error,size: 40.sp)
|
||||
errorWidget: (context, url, error) => Image.asset(
|
||||
defaultUrl,
|
||||
width: width,
|
||||
height: height,
|
||||
fit: BoxFit.fill,
|
||||
),
|
||||
) :Image.asset(
|
||||
defaultUrl,
|
||||
width: width,
|
||||
height: height,
|
||||
fit: BoxFit.fill,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -187,7 +187,7 @@ class Storage {
|
||||
if (data != null && data.isNotEmpty) {
|
||||
loginData = LoginData.fromJson(jsonDecode(data));
|
||||
}
|
||||
print("loginData:$loginData");
|
||||
// print("loginData:$loginData");
|
||||
return loginData;
|
||||
}
|
||||
|
||||
|
||||
@ -78,6 +78,7 @@ class VersionUndateTool {
|
||||
builder: (context) {
|
||||
return CupertinoAlertDialog(
|
||||
content: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Container(
|
||||
// color: AppColors.mainColor,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user