2024-03-22 13:51:30 +08:00
|
|
|
|
import 'dart:ffi';
|
2023-10-11 18:24:52 +08:00
|
|
|
|
import 'dart:io';
|
|
|
|
|
|
|
2023-07-18 18:10:57 +08:00
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
|
|
|
|
|
import 'package:get/get.dart';
|
2023-10-11 18:24:52 +08:00
|
|
|
|
import 'package:image_picker/image_picker.dart';
|
2024-03-07 17:59:22 +08:00
|
|
|
|
import 'package:permission_handler/permission_handler.dart';
|
2023-07-18 18:10:57 +08:00
|
|
|
|
import 'package:star_lock/app_settings/app_colors.dart';
|
2024-04-09 10:52:30 +08:00
|
|
|
|
import 'package:star_lock/app_settings/app_settings.dart';
|
2023-10-11 18:24:52 +08:00
|
|
|
|
import 'package:star_lock/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_logic.dart';
|
2024-03-12 16:35:40 +08:00
|
|
|
|
import 'package:star_lock/tools/appFirstEnterHandle.dart';
|
2023-10-11 18:24:52 +08:00
|
|
|
|
import 'package:star_lock/tools/custom_bottom_sheet.dart';
|
2024-03-12 16:35:40 +08:00
|
|
|
|
import 'package:star_lock/tools/storage.dart';
|
2023-07-18 18:10:57 +08:00
|
|
|
|
import '../../../appRouters.dart';
|
|
|
|
|
|
import '../../../tools/commonItem.dart';
|
2024-04-09 15:21:10 +08:00
|
|
|
|
import '../../../tools/customNetworkImage.dart';
|
2023-07-18 18:10:57 +08:00
|
|
|
|
import '../../../tools/titleAppBar.dart';
|
|
|
|
|
|
import '../../../translations/trans_lib.dart';
|
|
|
|
|
|
|
|
|
|
|
|
class MinePersonInfoPage extends StatefulWidget {
|
|
|
|
|
|
const MinePersonInfoPage({Key? key}) : super(key: key);
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
State<MinePersonInfoPage> createState() => _MinePersonInfoPageState();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-04-09 16:30:41 +08:00
|
|
|
|
class _MinePersonInfoPageState extends State<MinePersonInfoPage>
|
|
|
|
|
|
// with WidgetsBindingObserver
|
|
|
|
|
|
{
|
2023-10-09 18:45:10 +08:00
|
|
|
|
final logic = Get.put(MinePersonInfoLogic());
|
|
|
|
|
|
final state = Get.find<MinePersonInfoLogic>().state;
|
|
|
|
|
|
|
2024-03-05 09:29:49 +08:00
|
|
|
|
@override
|
|
|
|
|
|
initState() {
|
|
|
|
|
|
super.initState();
|
2024-04-09 16:30:41 +08:00
|
|
|
|
// WidgetsBinding.instance.addObserver(this); // 添加观察者
|
|
|
|
|
|
// logic.getUserInfoRequest();
|
|
|
|
|
|
// _checkCameraPermission();
|
|
|
|
|
|
// _checkPhotoPermission();
|
2024-03-21 11:36:48 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-03-22 13:51:30 +08:00
|
|
|
|
// // 当应用生命周期状态变化时调用
|
|
|
|
|
|
// @override
|
|
|
|
|
|
// void didChangeAppLifecycleState(AppLifecycleState state) {
|
|
|
|
|
|
// super.didChangeAppLifecycleState(state);
|
|
|
|
|
|
// if (state == AppLifecycleState.resumed) {
|
|
|
|
|
|
// // 当应用从后台返回前台时检查相机权限
|
|
|
|
|
|
// checkCameraPermission();
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
2024-03-21 11:36:48 +08:00
|
|
|
|
|
2023-07-18 18:10:57 +08:00
|
|
|
|
@override
|
|
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
|
|
return Scaffold(
|
|
|
|
|
|
backgroundColor: AppColors.mainBackgroundColor,
|
2023-07-27 15:26:30 +08:00
|
|
|
|
appBar: TitleAppBar(
|
|
|
|
|
|
barTitle: TranslationLoader.lanKeys!.personalInformation!.tr,
|
|
|
|
|
|
haveBack: true,
|
|
|
|
|
|
backgroundColor: AppColors.mainColor),
|
|
|
|
|
|
body: Column(
|
2023-07-18 18:10:57 +08:00
|
|
|
|
children: [
|
2024-03-13 15:51:54 +08:00
|
|
|
|
CommonItem(
|
|
|
|
|
|
leftTitel: TranslationLoader.lanKeys!.avatar!.tr,
|
|
|
|
|
|
rightTitle: "",
|
|
|
|
|
|
allHeight: 100.h,
|
|
|
|
|
|
isHaveLine: true,
|
|
|
|
|
|
isHaveDirection: true,
|
|
|
|
|
|
isHaveRightWidget: true,
|
2024-04-09 15:21:10 +08:00
|
|
|
|
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),
|
|
|
|
|
|
),
|
2024-03-13 15:51:54 +08:00
|
|
|
|
),
|
2024-04-09 15:21:10 +08:00
|
|
|
|
// ClipOval(
|
|
|
|
|
|
// child: state.image != null
|
|
|
|
|
|
// ? Image.file(
|
|
|
|
|
|
// File(state.image!.path),
|
|
|
|
|
|
// width: 72.w,
|
|
|
|
|
|
// height: 72.w,
|
|
|
|
|
|
// fit: BoxFit.fill,
|
|
|
|
|
|
// )
|
|
|
|
|
|
// : Image.asset(
|
|
|
|
|
|
// 'images/controls_user.png',
|
|
|
|
|
|
// width: 72.w,
|
|
|
|
|
|
// height: 72.w,
|
|
|
|
|
|
// fit: BoxFit.fill,
|
|
|
|
|
|
// ),
|
|
|
|
|
|
// ),
|
2024-03-13 15:51:54 +08:00
|
|
|
|
action: () async {
|
|
|
|
|
|
//安卓平台下首次进入应用需向用户告知获取权限用途弹窗
|
|
|
|
|
|
if (Platform.isAndroid) {
|
2024-04-09 15:21:10 +08:00
|
|
|
|
AppFirstEnterHandle().getAppFirstEnter(context, isAgreeCamera);
|
2024-03-13 15:51:54 +08:00
|
|
|
|
var getFlag = await Storage.getString(isAgreeCamera);
|
|
|
|
|
|
if (getFlag == isAgreeCamera) {
|
|
|
|
|
|
_openModalBottomSheet();
|
|
|
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
|
|
|
_openModalBottomSheet();
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
),
|
2023-10-09 18:45:10 +08:00
|
|
|
|
Obx(() => CommonItem(
|
2023-07-27 15:26:30 +08:00
|
|
|
|
leftTitel: TranslationLoader.lanKeys!.nickName!.tr,
|
2024-04-09 10:52:30 +08:00
|
|
|
|
rightTitle: state.mineInfoData.value.nickname != null ? state.mineInfoData.value.nickname! : "",
|
2023-07-27 15:26:30 +08:00
|
|
|
|
isHaveLine: true,
|
|
|
|
|
|
isHaveDirection: true,
|
|
|
|
|
|
action: () {
|
2024-04-09 10:52:30 +08:00
|
|
|
|
Navigator.pushNamed(context, Routers.minePersonInfoEditNamePage,
|
|
|
|
|
|
arguments: {'nickName': state.mineInfoData.value.nickname})
|
|
|
|
|
|
.then((value) => logic.getUserInfoRequest());
|
2023-10-09 18:45:10 +08:00
|
|
|
|
})),
|
|
|
|
|
|
Obx(() => CommonItem(
|
|
|
|
|
|
leftTitel: TranslationLoader.lanKeys!.mobileNumber!.tr,
|
2024-03-05 09:29:49 +08:00
|
|
|
|
rightTitle: state.mineInfoData.value.mobile != null
|
|
|
|
|
|
? state.mineInfoData.value.mobile!
|
2023-10-09 18:52:42 +08:00
|
|
|
|
: TranslationLoader.lanKeys!.goBind!.tr,
|
2023-07-27 15:26:30 +08:00
|
|
|
|
isHaveLine: true,
|
|
|
|
|
|
isHaveDirection: true,
|
|
|
|
|
|
action: () {
|
2023-10-09 18:45:10 +08:00
|
|
|
|
//有手机号 则去修改手机号 否则去绑定新的手机号 isFrom:1 短信,2 邮箱
|
2024-03-05 09:29:49 +08:00
|
|
|
|
if (state.mineInfoData.value.mobile!.isNotEmpty) {
|
2024-04-09 10:52:30 +08:00
|
|
|
|
Navigator.pushNamed(context, Routers.mineUnbindPhoneOrEmailPage,
|
|
|
|
|
|
arguments: {'mobile': state.mineInfoData.value.mobile!, 'isFrom': '1'})
|
|
|
|
|
|
.then((value) => logic.getUserInfoRequest());
|
2023-10-09 18:45:10 +08:00
|
|
|
|
} else {
|
2024-04-09 10:52:30 +08:00
|
|
|
|
Navigator.pushNamed(context, Routers.mineBindPhoneOrEmailPage,
|
|
|
|
|
|
arguments: {'mobile': state.mineInfoData.value.mobile!, 'isFrom': '1'})
|
|
|
|
|
|
.then((value) => logic.getUserInfoRequest());
|
2023-10-09 18:45:10 +08:00
|
|
|
|
}
|
|
|
|
|
|
})),
|
|
|
|
|
|
Obx(() => CommonItem(
|
2023-07-27 15:26:30 +08:00
|
|
|
|
leftTitel: TranslationLoader.lanKeys!.email!.tr,
|
2024-03-05 09:29:49 +08:00
|
|
|
|
rightTitle: state.mineInfoData.value.email != null
|
|
|
|
|
|
? state.mineInfoData.value.email!
|
2023-10-09 18:52:42 +08:00
|
|
|
|
: TranslationLoader.lanKeys!.goBind!.tr,
|
2023-07-27 15:26:30 +08:00
|
|
|
|
isHaveLine: true,
|
|
|
|
|
|
isHaveDirection: true,
|
|
|
|
|
|
action: () {
|
2023-10-09 18:45:10 +08:00
|
|
|
|
//有邮箱 则去修改邮箱 否则去绑定新的邮箱 isFrom:1 短信,2 邮箱
|
2024-03-05 09:29:49 +08:00
|
|
|
|
if (state.mineInfoData.value.email!.isNotEmpty) {
|
2024-04-09 10:52:30 +08:00
|
|
|
|
Navigator.pushNamed(context, Routers.mineUnbindPhoneOrEmailPage,
|
|
|
|
|
|
arguments: {'isFrom': '2', 'email': state.mineInfoData.value.email!})
|
|
|
|
|
|
.then((value) => logic.getUserInfoRequest());
|
2023-10-09 18:45:10 +08:00
|
|
|
|
} else {
|
2024-04-09 10:52:30 +08:00
|
|
|
|
Navigator.pushNamed(context, Routers.mineBindPhoneOrEmailPage,
|
|
|
|
|
|
arguments: {'isFrom': '2', 'email': state.mineInfoData.value.email!})
|
|
|
|
|
|
.then((value) => logic.getUserInfoRequest());
|
2023-10-09 18:45:10 +08:00
|
|
|
|
}
|
|
|
|
|
|
})),
|
2023-07-27 15:26:30 +08:00
|
|
|
|
CommonItem(
|
|
|
|
|
|
leftTitel: TranslationLoader.lanKeys!.resetPasswords!.tr,
|
|
|
|
|
|
rightTitle: "",
|
|
|
|
|
|
isHaveLine: true,
|
|
|
|
|
|
isHaveDirection: true,
|
|
|
|
|
|
action: () {
|
2024-04-09 10:52:30 +08:00
|
|
|
|
Navigator.pushNamed(context, Routers.minePersonInfoResetPasswordPage);
|
2023-07-27 15:26:30 +08:00
|
|
|
|
}),
|
2023-10-13 15:12:03 +08:00
|
|
|
|
Obx(() => CommonItem(
|
2023-07-27 15:26:30 +08:00
|
|
|
|
leftTitel: TranslationLoader.lanKeys!.safetyProblem!.tr,
|
2024-04-09 10:52:30 +08:00
|
|
|
|
rightTitle: state.mineInfoData.value.haveSafeAnswer == 0 ? "去设置" : "",
|
2023-07-27 15:26:30 +08:00
|
|
|
|
isHaveLine: true,
|
|
|
|
|
|
isHaveDirection: true,
|
|
|
|
|
|
action: () {
|
2024-03-05 09:29:49 +08:00
|
|
|
|
if (state.mineInfoData.value.haveSafeAnswer == 0) {
|
2024-04-09 10:52:30 +08:00
|
|
|
|
Navigator.pushNamed(context, Routers.minePersonInfoSetSafetyProblemPage)
|
2023-10-11 18:24:52 +08:00
|
|
|
|
.then((value) => logic.getUserInfoRequest());
|
|
|
|
|
|
} else {
|
2024-04-09 10:52:30 +08:00
|
|
|
|
Navigator.pushNamed(context, Routers.minePersonInfoViewSafetyProblemPage);
|
2023-10-11 18:24:52 +08:00
|
|
|
|
}
|
2023-10-13 15:12:03 +08:00
|
|
|
|
})),
|
2023-10-09 18:45:10 +08:00
|
|
|
|
Obx(() => CommonItem(
|
2023-07-27 15:26:30 +08:00
|
|
|
|
leftTitel: TranslationLoader.lanKeys!.countryAndRegion!.tr,
|
2024-04-09 10:52:30 +08:00
|
|
|
|
rightTitle: state.mineInfoData.value.countryName != null ? state.mineInfoData.value.countryName! : "",
|
2023-07-27 15:26:30 +08:00
|
|
|
|
isHaveLine: false,
|
2023-10-09 18:45:10 +08:00
|
|
|
|
isHaveDirection: false)),
|
2023-07-18 18:10:57 +08:00
|
|
|
|
],
|
2023-07-27 15:26:30 +08:00
|
|
|
|
));
|
2023-07-18 18:10:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-03-22 13:51:30 +08:00
|
|
|
|
// Future<void> requestCameraPermission() async {
|
|
|
|
|
|
// var status = await Permission.camera.status;
|
|
|
|
|
|
// if (status.isGranted) {
|
|
|
|
|
|
// selectCamera();
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
// status = await Permission.camera.request();
|
|
|
|
|
|
// if (status.isGranted) {
|
|
|
|
|
|
// selectCamera();
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
// showPermissionDeniedDialog();
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
Future<void> _requestCameraPermission() async {
|
|
|
|
|
|
var status = await Permission.camera.request();
|
2024-03-07 17:59:22 +08:00
|
|
|
|
if (status.isGranted) {
|
2024-03-22 13:51:30 +08:00
|
|
|
|
setState(() {
|
|
|
|
|
|
state.hasCameraPermission.value = true; // 如果权限被授予,更新状态变量
|
|
|
|
|
|
});
|
2024-03-07 17:59:22 +08:00
|
|
|
|
} else {
|
2024-03-22 13:51:30 +08:00
|
|
|
|
// 如果权限被拒绝,你可以选择在这里处理相应逻辑,比如显示一个提示框
|
|
|
|
|
|
showPermissionDeniedDialog();
|
2024-03-13 15:51:54 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-03-22 13:51:30 +08:00
|
|
|
|
Future<void> _requestPhotoPermission() async {
|
2024-04-09 10:52:30 +08:00
|
|
|
|
//针对andriud33以下的设备兼容
|
|
|
|
|
|
bool isAndroid33 = AppPlatform.isAndroid && AppPlatform.getSdkIntValue() >= 33;
|
|
|
|
|
|
var status = isAndroid33 ? await Permission.photos.request() : await Permission.storage.request();
|
2024-03-13 15:51:54 +08:00
|
|
|
|
if (status.isGranted) {
|
2024-03-22 13:51:30 +08:00
|
|
|
|
setState(() {
|
|
|
|
|
|
state.hasPhotoPermission.value = true; // 如果权限被授予,更新状态变量
|
|
|
|
|
|
});
|
2024-03-13 15:51:54 +08:00
|
|
|
|
} else {
|
2024-03-22 13:51:30 +08:00
|
|
|
|
// 如果权限被拒绝,你可以选择在这里处理相应逻辑,比如显示一个提示框
|
|
|
|
|
|
showPermissionDeniedDialog();
|
2024-03-07 17:59:22 +08:00
|
|
|
|
}
|
2024-04-09 16:30:41 +08:00
|
|
|
|
|
|
|
|
|
|
// 请求相册权限
|
|
|
|
|
|
// PermissionStatus photosStatus = await Permission.photos.request();
|
|
|
|
|
|
//
|
|
|
|
|
|
// if (photosStatus.isGranted) {
|
|
|
|
|
|
// // 相册权限已被授予
|
|
|
|
|
|
// state.hasPhotoPermission.value = true;
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
// // 如果权限被拒绝,你可以选择在这里处理相应逻辑,比如显示一个提示框
|
|
|
|
|
|
// showPermissionDeniedDialog();
|
|
|
|
|
|
// }
|
2024-03-07 17:59:22 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-03-22 13:51:30 +08:00
|
|
|
|
// Future<void> requestPhotoPermission() async {
|
|
|
|
|
|
// var status = await Permission.photos.status;
|
|
|
|
|
|
// if (status.isGranted) {
|
|
|
|
|
|
// selectImage();
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
// status = await Permission.photos.request();
|
|
|
|
|
|
// if (status.isGranted) {
|
|
|
|
|
|
// selectImage();
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
// showPermissionDeniedDialog();
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
2024-03-13 15:51:54 +08:00
|
|
|
|
// 显示权限被永久拒绝的提示对话框
|
|
|
|
|
|
void showPermissionDeniedDialog() {
|
2024-03-07 17:59:22 +08:00
|
|
|
|
showDialog(
|
|
|
|
|
|
context: context,
|
|
|
|
|
|
builder: (BuildContext context) {
|
|
|
|
|
|
return AlertDialog(
|
2024-03-13 15:51:54 +08:00
|
|
|
|
title: const Text('权限被拒绝'),
|
|
|
|
|
|
content: const Text('请手动在系统设置中开启相册权限以继续使用应用。'),
|
2024-03-07 17:59:22 +08:00
|
|
|
|
actions: <Widget>[
|
|
|
|
|
|
TextButton(
|
2024-03-13 15:51:54 +08:00
|
|
|
|
child: const Text('去设置'),
|
2024-03-07 17:59:22 +08:00
|
|
|
|
onPressed: () {
|
2024-03-13 15:51:54 +08:00
|
|
|
|
Navigator.of(context).pop(); // 关闭对话框
|
2024-03-21 11:36:48 +08:00
|
|
|
|
openAppSettings(); // 打开系统设置页面
|
2024-03-07 17:59:22 +08:00
|
|
|
|
},
|
|
|
|
|
|
),
|
|
|
|
|
|
],
|
|
|
|
|
|
);
|
|
|
|
|
|
},
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-07-18 18:10:57 +08:00
|
|
|
|
Future _openModalBottomSheet() async {
|
2023-10-11 18:24:52 +08:00
|
|
|
|
showModalBottomSheet(
|
2023-07-18 18:10:57 +08:00
|
|
|
|
context: context,
|
2024-04-09 15:21:10 +08:00
|
|
|
|
shape: RoundedRectangleBorder(borderRadius: BorderRadiusDirectional.circular(10)),
|
2023-07-18 18:10:57 +08:00
|
|
|
|
builder: (BuildContext context) {
|
2023-10-11 18:24:52 +08:00
|
|
|
|
return AlertBottomWidget(
|
|
|
|
|
|
topTitle: '',
|
|
|
|
|
|
items: const ['拍照', '从相册选择'],
|
|
|
|
|
|
chooseCallback: (value) {
|
|
|
|
|
|
int getSelectIndex = value;
|
|
|
|
|
|
if (getSelectIndex == 0) {
|
|
|
|
|
|
//拍照选项
|
2024-04-09 10:52:30 +08:00
|
|
|
|
state.hasCameraPermission.value == true ? selectCamera() : _requestCameraPermission();
|
2023-10-11 18:24:52 +08:00
|
|
|
|
} else if (getSelectIndex == 1) {
|
2024-04-09 10:52:30 +08:00
|
|
|
|
state.hasPhotoPermission.value == true ? selectImage() : _requestPhotoPermission();
|
2023-10-11 18:24:52 +08:00
|
|
|
|
}
|
|
|
|
|
|
},
|
2023-07-18 18:10:57 +08:00
|
|
|
|
);
|
2023-07-27 15:26:30 +08:00
|
|
|
|
});
|
2023-07-18 18:10:57 +08:00
|
|
|
|
}
|
2023-10-11 18:24:52 +08:00
|
|
|
|
|
|
|
|
|
|
///拍摄照片
|
|
|
|
|
|
selectCamera() async {
|
2024-04-09 16:30:41 +08:00
|
|
|
|
XFile? photo = await state.imagePicker.pickImage(source: ImageSource.camera, preferredCameraDevice: CameraDevice.rear);
|
2023-10-11 18:24:52 +08:00
|
|
|
|
if (photo != null) {
|
|
|
|
|
|
state.image = photo;
|
2023-10-13 09:20:28 +08:00
|
|
|
|
// logic.getUpTokenRequest();
|
2023-10-11 18:24:52 +08:00
|
|
|
|
setState(() {});
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
///从相册选取
|
|
|
|
|
|
selectImage() async {
|
|
|
|
|
|
XFile? image = await state.imagePicker.pickImage(
|
|
|
|
|
|
source: ImageSource.gallery,
|
|
|
|
|
|
maxHeight: 250,
|
|
|
|
|
|
maxWidth: 250,
|
|
|
|
|
|
);
|
2023-11-24 14:23:36 +08:00
|
|
|
|
if (image != null) {
|
|
|
|
|
|
state.image = image;
|
|
|
|
|
|
var bytes = File(state.image!.path);
|
|
|
|
|
|
var enc = await bytes.readAsBytes();
|
|
|
|
|
|
print(enc.length);
|
2024-03-05 09:29:49 +08:00
|
|
|
|
print(
|
|
|
|
|
|
"state.image!.path:${state.image!.path} state.image!.name:${state.image!.name} state.image!.length():${state.image!.length()}");
|
2023-11-24 14:23:36 +08:00
|
|
|
|
logic.getUpTokenRequest(state.image!.name, enc.length);
|
2024-03-05 09:29:49 +08:00
|
|
|
|
setState(() {});
|
2023-11-24 14:23:36 +08:00
|
|
|
|
}
|
2023-10-11 18:24:52 +08:00
|
|
|
|
}
|
2024-03-13 15:51:54 +08:00
|
|
|
|
|
2024-03-22 13:51:30 +08:00
|
|
|
|
Future<void> _checkCameraPermission() async {
|
2024-03-21 11:36:48 +08:00
|
|
|
|
var status = await Permission.camera.status;
|
|
|
|
|
|
if (status.isGranted) {
|
2024-03-22 13:51:30 +08:00
|
|
|
|
setState(() {
|
|
|
|
|
|
state.hasCameraPermission.value = true; // 如果权限已经被授予,更新状态变量
|
|
|
|
|
|
});
|
|
|
|
|
|
} else {
|
|
|
|
|
|
setState(() {
|
|
|
|
|
|
state.hasCameraPermission.value = false; // 如果权限未被授予,更新状态变量
|
|
|
|
|
|
});
|
2024-03-21 11:36:48 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-03-22 13:51:30 +08:00
|
|
|
|
Future<void> _checkPhotoPermission() async {
|
2024-03-21 11:36:48 +08:00
|
|
|
|
var status = await Permission.photos.status;
|
|
|
|
|
|
if (status.isGranted) {
|
2024-03-22 13:51:30 +08:00
|
|
|
|
setState(() {
|
|
|
|
|
|
state.hasPhotoPermission.value = true; // 如果权限已经被授予,更新状态变量
|
|
|
|
|
|
});
|
|
|
|
|
|
} else {
|
|
|
|
|
|
setState(() {
|
|
|
|
|
|
state.hasPhotoPermission.value = false; // 如果权限未被授予,更新状态变量
|
|
|
|
|
|
});
|
2024-03-21 11:36:48 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2024-04-09 16:30:41 +08:00
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
void dispose() {
|
|
|
|
|
|
// WidgetsBinding.instance.removeObserver(this); // 移除观察者
|
|
|
|
|
|
super.dispose();
|
|
|
|
|
|
}
|
2023-07-18 18:10:57 +08:00
|
|
|
|
}
|