From 178d3d0a9bcd08e3c8a2b9ce2707d4e1c1cfc0b1 Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Wed, 13 Aug 2025 17:52:26 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix(agent):=20=E4=BF=AE=E5=A4=8D=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E6=9F=A5=E7=9C=8B=E5=99=A8=E8=B7=AF=E5=BE=84=E5=A4=84?= =?UTF-8?q?=E7=90=86=E5=B9=B6=E4=BC=98=E5=8C=96=E4=BA=A4=E4=BA=92=E4=BD=93?= =?UTF-8?q?=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 处理图片路径拼接逻辑,支持相对路径和完整路径 - 移除AppBar改为点击图片退出查看器 - 优化图片查看器的交互方式 --- lib/data/services/novice_guide_service.dart | 2 +- .../agent/controllers/agent_controller.dart | 49 +++++++++++++++---- 2 files changed, 41 insertions(+), 10 deletions(-) diff --git a/lib/data/services/novice_guide_service.dart b/lib/data/services/novice_guide_service.dart index 4fa2c12c7..d32be2368 100644 --- a/lib/data/services/novice_guide_service.dart +++ b/lib/data/services/novice_guide_service.dart @@ -12,7 +12,7 @@ class NoviceGuideService extends GetxService { StreamSubscription? _statusSubscription; bool isHomeGuide = true; - bool isAIGuide = false; + bool isAIGuide = true; RxBool isWakeup = false.obs; diff --git a/lib/modules/agent/controllers/agent_controller.dart b/lib/modules/agent/controllers/agent_controller.dart index 4ab856798..89eed9292 100644 --- a/lib/modules/agent/controllers/agent_controller.dart +++ b/lib/modules/agent/controllers/agent_controller.dart @@ -1759,21 +1759,52 @@ class AgentController extends GetxController { // 打开图片查看器 void openImageViewer(BuildContext context, String imagePath) { + // 构建完整的图片路径 + String fullImagePath; + if (imagePath.startsWith('/')) { + // 如果是相对路径(以/开头),需要拼接AppDir.value + fullImagePath = '${AppDir.value}$imagePath'; + } else { + // 如果已经是完整路径,直接使用 + fullImagePath = imagePath; + } + Navigator.push( context, MaterialPageRoute( builder: (context) => Scaffold( - appBar: AppBar( - backgroundColor: Colors.black, - iconTheme: IconThemeData(color: Colors.white), - ), + // appBar: AppBar( + // backgroundColor: Colors.black, + // leading: IconButton( + // icon: Icon(Icons.arrow_back_ios, color: Colors.white), + // onPressed: () => Navigator.of(context).pop(), + // ), + // iconTheme: IconThemeData(color: Colors.white), + // //title: Text('图片预览', style: TextStyle(color: Colors.white)), + // ), body: Container( color: Colors.black, - child: PhotoView( - imageProvider: FileImage(File(imagePath)), - minScale: PhotoViewComputedScale.contained, - maxScale: PhotoViewComputedScale.covered * 2, - backgroundDecoration: BoxDecoration(color: Colors.black), + child: GestureDetector( + onTap: () => Navigator.of(context).pop(), // 点击退出 + + child: PhotoView( + imageProvider: FileImage(File(fullImagePath)), + minScale: PhotoViewComputedScale.contained, + maxScale: PhotoViewComputedScale.covered * 2, + backgroundDecoration: BoxDecoration(color: Colors.black), + // errorBuilder: (context, error, stackTrace) { + // return const Center( + // child: Column( + // mainAxisAlignment: MainAxisAlignment.center, + // children: [ + // Icon(Icons.error, color: Colors.white, size: 64), + // SizedBox(height: 16), + // Text('图片加载失败', style: TextStyle(color: Colors.white)), + // ], + // ), + // ); + // }, + ), ), ), ), From b8c93efe6c9505101caec9b2d17ec6f232a794a0 Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Wed, 13 Aug 2025 18:52:20 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat(=E6=9D=83=E9=99=90):=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E8=81=94=E7=B3=BB=E4=BA=BA=E6=9D=83=E9=99=90=E6=8F=8F?= =?UTF-8?q?=E8=BF=B0=E5=B9=B6=E5=AE=9E=E7=8E=B0=E6=96=B0=E6=89=8B=E5=BC=95?= =?UTF-8?q?=E5=AF=BC=E4=B8=AD=E7=9A=84=E6=9D=83=E9=99=90=E8=AF=B7=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 为电话和短信功能添加联系人权限的国际化描述 在新手引导服务中实现各功能所需的权限请求逻辑 --- lib/core/translations/language/en_us.dart | 3 + lib/core/translations/language/zh_cn.dart | 2 + lib/data/services/novice_guide_service.dart | 68 ++++++++++++++++++--- 3 files changed, 64 insertions(+), 9 deletions(-) diff --git a/lib/core/translations/language/en_us.dart b/lib/core/translations/language/en_us.dart index b4c776ab6..45071ebdd 100644 --- a/lib/core/translations/language/en_us.dart +++ b/lib/core/translations/language/en_us.dart @@ -518,6 +518,9 @@ const Map enUS = { 'smsPermissionDetailDesc': 'SMS functionality requires SMS permission', 'alarmPermissionDetailDesc': 'This permission is required to set exact alarms and ensure reminders trigger on time', + 'contactsPermissionDesc': 'Used for accessing contact information', + 'contactsPermissionDetailDesc': + 'Phone call and SMS functionality requires contacts permission to select contacts', 'calendarWritePermissionDetailDesc': 'Creating calendar events requires calendar write permission', 'calendarFullAccessPermissionDetailDesc': diff --git a/lib/core/translations/language/zh_cn.dart b/lib/core/translations/language/zh_cn.dart index e0757379e..986e8cd14 100644 --- a/lib/core/translations/language/zh_cn.dart +++ b/lib/core/translations/language/zh_cn.dart @@ -484,6 +484,8 @@ const Map zhCN = { 'calendarWritePermissionDetailDesc': '创建日历事件需要日历写入权限', 'calendarFullAccessPermissionDetailDesc': '管理日历事件需要完整日历权限', 'locationPermissionDetailDesc': '获取位置信息需要位置权限', + 'contactsPermissionDesc': '用于访问联系人信息', + 'contactsPermissionDetailDesc': '拨打电话和发送短信功能需要联系人权限以选择联系人', 'appNeedsPermissionForFullFunction': '应用需要此权限以提供完整功能', 'permanentDenialText': '您已永久拒绝{permission}权限,请前往应用设置开启', 'goToSettings': '去设置', diff --git a/lib/data/services/novice_guide_service.dart b/lib/data/services/novice_guide_service.dart index 44ab00590..0f908bb69 100644 --- a/lib/data/services/novice_guide_service.dart +++ b/lib/data/services/novice_guide_service.dart @@ -4,6 +4,8 @@ import 'package:ble_service/ble_service.dart'; import 'package:flutter_intro/flutter_intro.dart'; import 'package:get/get.dart'; import 'package:get_storage/get_storage.dart'; +import 'package:permission_handler/permission_handler.dart'; +import '../../core/utils/permission_util.dart'; class NoviceGuideService extends GetxService { final GetStorage _storage = GetStorage(); @@ -12,7 +14,7 @@ class NoviceGuideService extends GetxService { StreamSubscription? _statusSubscription; bool isHomeGuide = true; - bool isAIGuide = true; + bool isAIGuide = false; RxBool isWakeup = false.obs; @@ -25,7 +27,15 @@ class NoviceGuideService extends GetxService { 'send': '小言会为你实时为你播报天气', 'end': '小言能实时为你播报天气,试试其他指令吧', 'method': () async { - print('-----1------'); + // 天气查询需要位置权限 + + await PermissionUtil.instance.requestPermission( + permissionType: Permission.location, + permissionName: 'locationInfo'.tr, // 位置信息 + explanationText: 'locationPermissionDesc'.tr, // 用于获取当前位置信息 + permanentDenialText: + 'locationPermissionDetailDesc'.tr, // 获取位置信息需要位置权限 + ); }, }, { @@ -33,9 +43,7 @@ class NoviceGuideService extends GetxService { 'input': '请播放一组摇滚乐', 'send': '小言会为你搜寻到一组音乐', 'end': '小言已成功为您搜寻到一组音乐,试试其他指令吧', - 'method': () async { - print('-----2------'); - }, + 'method': () async {}, }, { 'start': '对小言说:“导航到深圳机场”', @@ -43,7 +51,14 @@ class NoviceGuideService extends GetxService { 'send': '小言会为你规划路线', 'end': '小言已成功为您导航到深圳机场,试试其他指令吧', 'method': () async { - print('-----3------'); + // 导航功能需要位置权限 + await PermissionUtil.instance.requestPermission( + permissionType: Permission.location, + permissionName: 'locationInfo'.tr, // 位置信息 + explanationText: 'locationPermissionDesc'.tr, // 用于获取当前位置信息 + permanentDenialText: + 'locationPermissionDetailDesc'.tr, // 获取位置信息需要位置权限 + ); }, }, { @@ -52,7 +67,14 @@ class NoviceGuideService extends GetxService { 'send': '小言会为你创建会议提醒', 'end': '小言已成功为您创建会议提醒,试试其他指令吧', 'method': () async { - print('-----4------'); + //创建会议提醒需要日历权限 + await PermissionUtil.instance.requestPermission( + permissionType: Permission.calendarWriteOnly, + permissionName: 'calendarWrite'.tr, // 日历写入 + explanationText: 'calendarWritePermissionDesc'.tr, // 用于创建日历事件和提醒 + permanentDenialText: + 'calendarWritePermissionDetailDesc'.tr, // 创建日历事件需要日历写入权限 + ); }, }, { @@ -61,7 +83,21 @@ class NoviceGuideService extends GetxService { 'send': '小言会为你拨打电话', 'end': '小言已成功为您拨打电话,试试其他指令吧', 'method': () async { - print('-----5------'); + // 拨打电话需要电话权限 + await PermissionUtil.instance.requestPermission( + permissionType: Permission.phone, + permissionName: 'phone'.tr, // 电话 + explanationText: 'phonePermissionDesc'.tr, // 用于拨打电话功能 + permanentDenialText: 'phonePermissionDetailDesc'.tr, // 拨打电话功能需要电话权限 + ); + //拨打电话还需要联系人权限 + await PermissionUtil.instance.requestPermission( + permissionType: Permission.contacts, + permissionName: 'contacts'.tr, // 联系人 + explanationText: 'contactsPermissionDesc'.tr, // 用于访问联系人信息 + permanentDenialText: + 'contactsPermissionDetailDesc'.tr, // 拨打电话功能需要联系人权限 + ); }, }, { @@ -70,7 +106,21 @@ class NoviceGuideService extends GetxService { 'send': '小言会为你发送短信', 'end': '短信已发送,语音操控更便捷', 'method': () async { - print('-----6------'); + // 发送短信需要短信权限 + await PermissionUtil.instance.requestPermission( + permissionType: Permission.sms, + permissionName: 'sms'.tr, // 短信 + explanationText: 'smsPermissionDesc'.tr, // 用于发送短信功能 + permanentDenialText: 'smsPermissionDetailDesc'.tr, // 发送短信功能需要短信权限 + ); + //发送短信还需要联系人权限 + await PermissionUtil.instance.requestPermission( + permissionType: Permission.contacts, + permissionName: 'contacts'.tr, // 联系人 + explanationText: 'contactsPermissionDesc'.tr, // 用于访问联系人信息 + permanentDenialText: + 'contactsPermissionDetailDesc'.tr, // 发送短信功能需要联系人权限 + ); }, }, ];