This commit is contained in:
魏少阳 2024-03-13 16:17:53 +08:00
commit 38ab3c161b
5 changed files with 106 additions and 62 deletions

View File

@ -30,7 +30,6 @@
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<!--允许麦克风权限,用于录音发送--> <!--允许麦克风权限,用于录音发送-->
<uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/> <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

View File

@ -64,7 +64,7 @@ post_install do |installer|
# 'PERMISSION_CONTACTS=1', # 'PERMISSION_CONTACTS=1',
## dart: PermissionGroup.camera ## dart: PermissionGroup.camera
# 'PERMISSION_CAMERA=1', 'PERMISSION_CAMERA=1',
## dart: PermissionGroup.microphone ## dart: PermissionGroup.microphone
# 'PERMISSION_MICROPHONE=1', # 'PERMISSION_MICROPHONE=1',
@ -73,7 +73,7 @@ post_install do |installer|
# 'PERMISSION_SPEECH_RECOGNIZER=1', # 'PERMISSION_SPEECH_RECOGNIZER=1',
## dart: PermissionGroup.photos ## dart: PermissionGroup.photos
# 'PERMISSION_PHOTOS=1', 'PERMISSION_PHOTOS=1',
# dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse] # dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse]
'PERMISSION_LOCATION=1', 'PERMISSION_LOCATION=1',

View File

@ -145,6 +145,7 @@ class StarLockMinePageState extends State<StarLockMinePage> with BaseWidget {
Get.back(); Get.back();
Get.toNamed(Routers.mineSetPage); Get.toNamed(Routers.mineSetPage);
}), }),
//
F.appFlavor == Flavor.sky F.appFlavor == Flavor.sky
? Container() ? Container()
: mineItem('images/mine/icon_mine_main_vip.png', : mineItem('images/mine/icon_mine_main_vip.png',
@ -152,11 +153,13 @@ class StarLockMinePageState extends State<StarLockMinePage> with BaseWidget {
Get.back(); Get.back();
Get.toNamed(Routers.valueAddedServicesPage); Get.toNamed(Routers.valueAddedServicesPage);
}), }),
mineItem('images/mine/icon_mine_main_shoppingcart.png', "配件商城".tr, F.appFlavor == Flavor.sky
() { ? Container()
Get.back(); : mineItem(
Get.toNamed(Routers.lockMallPage); 'images/mine/icon_mine_main_shoppingcart.png', "配件商城".tr, () {
}), Get.back();
Get.toNamed(Routers.lockMallPage);
}),
mineItem('images/mine/icon_mine_main_about.png', mineItem('images/mine/icon_mine_main_about.png',
TranslationLoader.lanKeys!.about!.tr, () { TranslationLoader.lanKeys!.about!.tr, () {
Get.back(); Get.back();

View File

@ -43,48 +43,42 @@ class _MinePersonInfoPageState extends State<MinePersonInfoPage> {
backgroundColor: AppColors.mainColor), backgroundColor: AppColors.mainColor),
body: Column( body: Column(
children: [ children: [
Obx(() => CommonItem( CommonItem(
leftTitel: TranslationLoader.lanKeys!.avatar!.tr, leftTitel: TranslationLoader.lanKeys!.avatar!.tr,
rightTitle: "", rightTitle: "",
allHeight: 100.h, allHeight: 100.h,
isHaveLine: true, isHaveLine: true,
isHaveDirection: true, isHaveDirection: true,
isHaveRightWidget: true, isHaveRightWidget: true,
rightWidget: ClipOval( rightWidget: ClipOval(
child: state.mineInfoData.value.headUrl != null child: state.image != null
? CachedNetworkImage( ? Image.file(
imageUrl: Uri.encodeFull( File(state.image!.path),
state.mineInfoData.value.headUrl!), width: 72.w,
width: 72.w, height: 72.w,
height: 72.w, fit: BoxFit.fill,
fit: BoxFit.fill, )
placeholder: (context, url) => Image.asset( : Image.asset(
'images/controls_user.png', 'images/controls_user.png',
width: 72.w, width: 72.w,
height: 72.w, height: 72.w,
fit: BoxFit.fill, fit: BoxFit.fill,
)) ),
: Image.asset( ),
'images/controls_user.png', action: () async {
width: 72.w, //
height: 72.w, if (Platform.isAndroid) {
fit: BoxFit.fill, AppFirstEnterHandle()
), .getAppFirstEnter(context, isAgreeCamera);
), var getFlag = await Storage.getString(isAgreeCamera);
action: () async { if (getFlag == isAgreeCamera) {
// _openModalBottomSheet();
if (Platform.isAndroid) { }
AppFirstEnterHandle() } else {
.getAppFirstEnter(context, isAgreeCamera); _openModalBottomSheet();
var getFlag = await Storage.getString(isAgreeCamera); }
if (getFlag == isAgreeCamera) { },
requestCameraPermission(); ),
}
} else {
requestCameraPermission();
}
},
)),
Obx(() => CommonItem( Obx(() => CommonItem(
leftTitel: TranslationLoader.lanKeys!.nickName!.tr, leftTitel: TranslationLoader.lanKeys!.nickName!.tr,
rightTitle: state.mineInfoData.value.nickname != null rightTitle: state.mineInfoData.value.nickname != null
@ -189,7 +183,7 @@ class _MinePersonInfoPageState extends State<MinePersonInfoPage> {
if (status.isGranted) { if (status.isGranted) {
// //
// //
_openModalBottomSheet(); selectCamera();
} else { } else {
// //
// //
@ -197,28 +191,53 @@ class _MinePersonInfoPageState extends State<MinePersonInfoPage> {
if (status.isGranted) { if (status.isGranted) {
// //
_openModalBottomSheet(); selectCamera();
} else { } else {
// //
// //
_showPermissinDialog(); showPermissionDeniedDialog();
} }
} }
} }
Future _showPermissinDialog() async { Future<void> requestPhotoPermission() async {
//
PermissionStatus status = await Permission.photos.status;
if (status.isGranted) {
//
//
selectImage();
} else {
//
//
status = await Permission.photos.request();
if (status.isGranted) {
//
selectImage();
} else {
//
//
showPermissionDeniedDialog();
}
}
}
//
void showPermissionDeniedDialog() {
showDialog( showDialog(
context: context, context: context,
builder: (BuildContext context) { builder: (BuildContext context) {
return AlertDialog( return AlertDialog(
title: const Text('Permission Required'), title: const Text('权限被拒绝'),
content: const Text( content: const Text('请手动在系统设置中开启相册权限以继续使用应用。'),
'You need to grant camera permission to use this feature.'),
actions: <Widget>[ actions: <Widget>[
TextButton( TextButton(
child: const Text('OK'), child: const Text('去设置'),
onPressed: () { onPressed: () {
Navigator.of(context).pop(); openAppSettings(); //
Navigator.of(context).pop(); //
}, },
), ),
], ],
@ -240,9 +259,11 @@ class _MinePersonInfoPageState extends State<MinePersonInfoPage> {
int getSelectIndex = value; int getSelectIndex = value;
if (getSelectIndex == 0) { if (getSelectIndex == 0) {
// //
selectCamera(); // selectCamera();
requestCameraPermission();
} else if (getSelectIndex == 1) { } else if (getSelectIndex == 1) {
selectImage(); // selectImage();
requestPhotoPermission();
} }
}, },
); );
@ -278,4 +299,24 @@ class _MinePersonInfoPageState extends State<MinePersonInfoPage> {
setState(() {}); setState(() {});
} }
} }
// child: state.mineInfoData.value.headUrl != null
// ? CachedNetworkImage(
// imageUrl: Uri.encodeFull(
// state.mineInfoData.value.headUrl!),
// width: 72.w,
// height: 72.w,
// fit: BoxFit.fill,
// placeholder: (context, url) => Image.asset(
// 'images/controls_user.png',
// width: 72.w,
// height: 72.w,
// fit: BoxFit.fill,
// ))
// : Image.asset(
// 'images/controls_user.png',
// width: 72.w,
// height: 72.w,
// fit: BoxFit.fill,
// ),
} }

View File

@ -18,7 +18,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# In Windows, build-name is used as the major, minor, and patch parts # In Windows, build-name is used as the major, minor, and patch parts
# of the product and file versions while build-number is used as the build suffix. # of the product and file versions while build-number is used as the build suffix.
version: 1.0.11+20240309 version: 1.0.15+20240313
environment: environment:
sdk: '>=2.12.0 <3.0.0' sdk: '>=2.12.0 <3.0.0'
@ -140,6 +140,7 @@ dependencies:
#侧滑删除 #侧滑删除
flutter_slidable: ^3.0.1 flutter_slidable: ^3.0.1
audio_service: ^0.18.12 audio_service: ^0.18.12
app_settings: ^5.1.1
system_settings: ^2.0.0 system_settings: ^2.0.0
dev_dependencies: dev_dependencies: