From c648698e977a3d15c12998206d91b6d49c60bd8f Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Fri, 5 Sep 2025 16:35:31 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=B0=83=E6=95=B4=E5=AD=97=E4=BD=93?= =?UTF-8?q?=E5=A4=A7=E5=B0=8F=E5=B9=B6=E4=BC=98=E5=8C=96=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E5=88=B7=E6=96=B0=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改设置和探索页面的标题字体大小 - 在设备连接时主动刷新设备信息 - 为路由添加页面切换动画 - 清理调试日志和注释代码 - 为翻译统计页面添加返回按钮 --- lib/data/services/ble_manager.dart | 9 +- lib/data/services/version_update_service.dart | 12 +- lib/modules/explore/views/explore_view.dart | 2 +- .../home/controllers/home_controller.dart | 11 +- lib/modules/settings/views/settings_view.dart | 2 +- .../views/translation_stats_view.dart | 492 ++++++++++-------- lib/routes/app_pages.dart | 4 + 7 files changed, 289 insertions(+), 243 deletions(-) diff --git a/lib/data/services/ble_manager.dart b/lib/data/services/ble_manager.dart index 963f22c25..954c2b61c 100644 --- a/lib/data/services/ble_manager.dart +++ b/lib/data/services/ble_manager.dart @@ -156,7 +156,7 @@ class BleManager extends GetxService { /// 设置BLE事件监听 void _setupBleListener() { - Logger.info('lxm--_setupBleListener被调用,开始设置BLE事件监听'); + //Logger.info('lxm--_setupBleListener被调用,开始设置BLE事件监听'); _statusSubscription?.cancel(); _dataSubscription?.cancel(); @@ -394,6 +394,7 @@ class BleManager extends GetxService { Logger.info('lxm-- overallBattery: $overallBattery'); Logger.info('lxm--准备调用_updateDeviceInfoIfNeeded'); + // 更新设备信息 _updateDeviceInfoIfNeeded( batteryLevel: overallBattery, @@ -796,12 +797,12 @@ class BleManager extends GetxService { /// 主动获取电池信息 Future fetchBatteryInfo() async { try { - Logger.info('lxm--fetchBatteryInfo被调用,准备向设备发送获取电池信息指令'); + //Logger.info('lxm--fetchBatteryInfo被调用,准备向设备发送获取电池信息指令'); final result = await _bleService.getBatteryInfo(); - Logger.info('lxm--getBatteryInfo指令发送结果: $result'); + //Logger.info('lxm--getBatteryInfo指令发送结果: $result'); return result; } catch (e) { - Logger.error('lxm--获取电池信息失败: ${e.toString()}'); + //Logger.error('lxm--获取电池信息失败: ${e.toString()}'); return false; } } diff --git a/lib/data/services/version_update_service.dart b/lib/data/services/version_update_service.dart index 23be2291b..b6822c17f 100644 --- a/lib/data/services/version_update_service.dart +++ b/lib/data/services/version_update_service.dart @@ -353,12 +353,12 @@ class VersionUpdateService extends GetxService { /// 执行更新操作 Future performUpdate(VersionUpdateInfo updateInfo) async { - print('lxm---updateInfo详情:'); - print('lxm---hasUpdate: ${updateInfo.hasUpdate}'); - print('lxm---currentVersion: ${updateInfo.currentVersion}'); - print('lxm---latestVersion: ${updateInfo.latestVersion}'); - print('lxm---updateType: ${updateInfo.updateType}'); - print('lxm---appInfo: ${updateInfo.appInfo?.toJson()}'); + //print('lxm---updateInfo详情:'); + //print('lxm---hasUpdate: ${updateInfo.hasUpdate}'); + //print('lxm---currentVersion: ${updateInfo.currentVersion}'); + //print('lxm---latestVersion: ${updateInfo.latestVersion}'); + //print('lxm---updateType: ${updateInfo.updateType}'); + //print('lxm---appInfo: ${updateInfo.appInfo?.toJson()}'); if (!updateInfo.hasUpdate || updateInfo.appInfo == null) { return false; } diff --git a/lib/modules/explore/views/explore_view.dart b/lib/modules/explore/views/explore_view.dart index 0f373dbf1..2c9c076ee 100644 --- a/lib/modules/explore/views/explore_view.dart +++ b/lib/modules/explore/views/explore_view.dart @@ -99,7 +99,7 @@ class ExploreView extends GetView { Text( 'explore'.tr, // 发现 style: TextStyle( - fontSize: 24.sp, + fontSize: 20.sp, fontWeight: FontWeight.bold, color: isDarkMode ? Colors.white : Colors.grey[800], ), diff --git a/lib/modules/home/controllers/home_controller.dart b/lib/modules/home/controllers/home_controller.dart index ebf33cd74..c0434e6e1 100644 --- a/lib/modules/home/controllers/home_controller.dart +++ b/lib/modules/home/controllers/home_controller.dart @@ -140,7 +140,16 @@ class HomeController extends GetxController { Future refreshDeviceConnection() async { await _checkConnectionStatus(); - // 移除了立即刷新电池信息的逻辑 + + // 如果设备已连接,主动刷新设备信息 + if (_isFullyConnected.value) { + try { + Logger.d(_tag, '刷新设备信息'); + await _bleManager.fetchDeviceInfo(); + } catch (e) { + Logger.e(_tag, '刷新设备信息失败: $e'); + } + } } void rescanDevices() { diff --git a/lib/modules/settings/views/settings_view.dart b/lib/modules/settings/views/settings_view.dart index 4220460bd..c538aac0d 100644 --- a/lib/modules/settings/views/settings_view.dart +++ b/lib/modules/settings/views/settings_view.dart @@ -29,7 +29,7 @@ class SettingsView extends GetView { title: Text( 'settings'.tr, // 设置 style: TextStyle( - fontSize: 17.sp, + fontSize: 18.sp, fontWeight: FontWeight.w600, color: isDarkMode ? Colors.white : Colors.black, ), diff --git a/lib/modules/translation/views/translation_stats_view.dart b/lib/modules/translation/views/translation_stats_view.dart index 22773ddcb..271bdeb31 100644 --- a/lib/modules/translation/views/translation_stats_view.dart +++ b/lib/modules/translation/views/translation_stats_view.dart @@ -24,6 +24,14 @@ class TranslationStatsView extends GetView { /// 构建应用栏 PreferredSizeWidget _buildAppBar(bool isDarkMode) { return AppBar( + leading: IconButton( + icon: Icon( + Icons.arrow_back_ios, + color: isDarkMode ? Colors.white : Colors.black, + size: 20.sp, + ), + onPressed: () => Get.back(), + ), backgroundColor: isDarkMode ? AppColors.darkBackground : Colors.white, elevation: 0.5, title: Text( @@ -136,20 +144,20 @@ class TranslationStatsView extends GetView { ], ), child: Obx(() => Row( - children: [ - _buildTimeRangeTab('今日', 0, isDarkMode), - _buildTimeRangeTab('本周', 1, isDarkMode), - _buildTimeRangeTab('本月', 2, isDarkMode), - _buildTimeRangeTab('历史', 3, isDarkMode), - ], - )), + children: [ + _buildTimeRangeTab('今日', 0, isDarkMode), + _buildTimeRangeTab('本周', 1, isDarkMode), + _buildTimeRangeTab('本月', 2, isDarkMode), + _buildTimeRangeTab('历史', 3, isDarkMode), + ], + )), ); } /// 构建时间范围标签 Widget _buildTimeRangeTab(String title, int index, bool isDarkMode) { final isSelected = controller.selectedTabIndex.value == index; - + return Expanded( child: GestureDetector( onTap: () => controller.switchTimeRange(index), @@ -215,49 +223,50 @@ class TranslationStatsView extends GetView { ), SizedBox(height: 16.h), Obx(() => Row( - children: [ - Expanded( - child: _buildStatItem( - '翻译次数', - controller.realtimeStats.translationCount.toString(), - Icons.translate, - isDarkMode, - ), - ), - Expanded( - child: _buildStatItem( - '会话时长', - '${controller.realtimeStats.sessionDurationMinutes}分钟', - Icons.timer, - isDarkMode, - ), - ), - ], - )), + children: [ + Expanded( + child: _buildStatItem( + '翻译次数', + controller.realtimeStats.translationCount.toString(), + Icons.translate, + isDarkMode, + ), + ), + Expanded( + child: _buildStatItem( + '会话时长', + '${controller.realtimeStats.sessionDurationMinutes}分钟', + Icons.timer, + isDarkMode, + ), + ), + ], + )), SizedBox(height: 12.h), Obx(() => Row( - children: [ - Expanded( - child: _buildStatItem( - '字符数', - controller.formatNumber( - controller.realtimeStats.sourceCharacters + - controller.realtimeStats.targetCharacters, + children: [ + Expanded( + child: _buildStatItem( + '字符数', + controller.formatNumber( + controller.realtimeStats.sourceCharacters + + controller.realtimeStats.targetCharacters, + ), + Icons.text_fields, + isDarkMode, + ), ), - Icons.text_fields, - isDarkMode, - ), - ), - Expanded( - child: _buildStatItem( - '录音时长', - controller.formatDuration(controller.realtimeStats.recordingDuration), - Icons.mic, - isDarkMode, - ), - ), - ], - )), + Expanded( + child: _buildStatItem( + '录音时长', + controller.formatDuration( + controller.realtimeStats.recordingDuration), + Icons.mic, + isDarkMode, + ), + ), + ], + )), ], ), ); @@ -290,64 +299,68 @@ class TranslationStatsView extends GetView { ), SizedBox(width: 8.w), Obx(() => Text( - '${controller.selectedTimeRange.value}概览', - style: TextStyle( - fontSize: 16.sp, - fontWeight: FontWeight.w600, - color: isDarkMode ? Colors.white : Colors.black, - ), - )), + '${controller.selectedTimeRange.value}概览', + style: TextStyle( + fontSize: 16.sp, + fontWeight: FontWeight.w600, + color: isDarkMode ? Colors.white : Colors.black, + ), + )), ], ), SizedBox(height: 16.h), Obx(() => Row( - children: [ - Expanded( - child: _buildStatItem( - '总调用次数', - controller.formatNumber(controller.currentStats.totalApiCalls), - Icons.api, - isDarkMode, - ), - ), - Expanded( - child: _buildStatItem( - '预估成本', - controller.formatCost(controller.currentStats.estimatedCost), - Icons.attach_money, - isDarkMode, - ), - ), - ], - )), + children: [ + Expanded( + child: _buildStatItem( + '总调用次数', + controller + .formatNumber(controller.currentStats.totalApiCalls), + Icons.api, + isDarkMode, + ), + ), + Expanded( + child: _buildStatItem( + '预估成本', + controller + .formatCost(controller.currentStats.estimatedCost), + Icons.attach_money, + isDarkMode, + ), + ), + ], + )), SizedBox(height: 12.h), Obx(() => Row( - children: [ - Expanded( - child: _buildStatItem( - '会话数量', - controller.currentStats.sessionCount.toString(), - Icons.chat, - isDarkMode, - ), - ), - Expanded( - child: _buildStatItem( - '总字符数', - controller.formatNumber(controller.currentStats.totalCharacterCount), - Icons.text_snippet, - isDarkMode, - ), - ), - ], - )), + children: [ + Expanded( + child: _buildStatItem( + '会话数量', + controller.currentStats.sessionCount.toString(), + Icons.chat, + isDarkMode, + ), + ), + Expanded( + child: _buildStatItem( + '总字符数', + controller.formatNumber( + controller.currentStats.totalCharacterCount), + Icons.text_snippet, + isDarkMode, + ), + ), + ], + )), ], ), ); } /// 构建统计项 - Widget _buildStatItem(String label, String value, IconData icon, bool isDarkMode) { + Widget _buildStatItem( + String label, String value, IconData icon, bool isDarkMode) { return Column( children: [ Icon( @@ -414,23 +427,34 @@ class TranslationStatsView extends GetView { ), SizedBox(height: 16.h), Obx(() => Column( - children: [ - _buildApiCallRow('翻译API', controller.currentStats.translationApiCalls, Icons.translate, isDarkMode), - SizedBox(height: 12.h), - _buildApiCallRow('语音识别', controller.currentStats.asrApiCalls, Icons.mic, isDarkMode), - SizedBox(height: 12.h), - _buildApiCallRow('语音合成', controller.currentStats.ttsApiCalls, Icons.volume_up, isDarkMode), - SizedBox(height: 12.h), - _buildApiCallRow('AI摘要', controller.currentStats.aiSummaryApiCalls, Icons.summarize, isDarkMode), - ], - )), + children: [ + _buildApiCallRow( + '翻译API', + controller.currentStats.translationApiCalls, + Icons.translate, + isDarkMode), + SizedBox(height: 12.h), + _buildApiCallRow('语音识别', controller.currentStats.asrApiCalls, + Icons.mic, isDarkMode), + SizedBox(height: 12.h), + _buildApiCallRow('语音合成', controller.currentStats.ttsApiCalls, + Icons.volume_up, isDarkMode), + SizedBox(height: 12.h), + _buildApiCallRow( + 'AI摘要', + controller.currentStats.aiSummaryApiCalls, + Icons.summarize, + isDarkMode), + ], + )), ], ), ); } /// 构建API调用行 - Widget _buildApiCallRow(String label, int count, IconData icon, bool isDarkMode) { + Widget _buildApiCallRow( + String label, int count, IconData icon, bool isDarkMode) { return Row( children: [ Icon( @@ -498,50 +522,54 @@ class TranslationStatsView extends GetView { ), SizedBox(height: 16.h), Obx(() => Column( - children: [ - Row( - children: [ - Expanded( - child: _buildStatItem( - '源文本字符', - controller.formatNumber(controller.currentStats.sourceTextCharacters), - Icons.text_fields, - isDarkMode, - ), - ), - Expanded( - child: _buildStatItem( - 'TTS文本字符', - controller.formatNumber(controller.currentStats.ttsTextCharacters), - Icons.translate, - isDarkMode, - ), - ), - ], - ), - SizedBox(height: 16.h), - Row( children: [ - Expanded( - child: _buildStatItem( - '有效音频时长', - controller.formatDuration(controller.currentStats.effectiveAudioDuration), - Icons.mic, - isDarkMode, - ), + Row( + children: [ + Expanded( + child: _buildStatItem( + '源文本字符', + controller.formatNumber( + controller.currentStats.sourceTextCharacters), + Icons.text_fields, + isDarkMode, + ), + ), + Expanded( + child: _buildStatItem( + 'TTS文本字符', + controller.formatNumber( + controller.currentStats.ttsTextCharacters), + Icons.translate, + isDarkMode, + ), + ), + ], ), - Expanded( - child: _buildStatItem( - '总会话时长', - controller.formatDuration(controller.currentStats.totalSessionDuration), - Icons.volume_up, - isDarkMode, - ), + SizedBox(height: 16.h), + Row( + children: [ + Expanded( + child: _buildStatItem( + '有效音频时长', + controller.formatDuration( + controller.currentStats.effectiveAudioDuration), + Icons.mic, + isDarkMode, + ), + ), + Expanded( + child: _buildStatItem( + '总会话时长', + controller.formatDuration( + controller.currentStats.totalSessionDuration), + Icons.volume_up, + isDarkMode, + ), + ), + ], ), ], - ), - ], - )), + )), ], ), ); @@ -585,79 +613,82 @@ class TranslationStatsView extends GetView { ), SizedBox(height: 16.h), Obx(() => Column( - children: [ - // 当前成本 - Container( - padding: EdgeInsets.all(12.w), - decoration: BoxDecoration( - color: AppColors.primary.withOpacity(0.1), - borderRadius: BorderRadius.circular(8.r), - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - '${controller.selectedTimeRange.value}预估成本', - style: TextStyle( - fontSize: 14.sp, - fontWeight: FontWeight.w500, - color: isDarkMode ? Colors.white : Colors.black, - ), - ), - Text( - controller.formatCost(controller.currentStats.estimatedCost), - style: TextStyle( - fontSize: 18.sp, - fontWeight: FontWeight.bold, - color: AppColors.primary, - ), - ), - ], - ), - ), - SizedBox(height: 12.h), - // 预警阈值 - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text( - '日成本预警阈值', - style: TextStyle( - fontSize: 12.sp, - color: isDarkMode ? Colors.white70 : Colors.black54, + // 当前成本 + Container( + padding: EdgeInsets.all(12.w), + decoration: BoxDecoration( + color: AppColors.primary.withOpacity(0.1), + borderRadius: BorderRadius.circular(8.r), ), - ), - Text( - controller.formatCost(controller.dailyCostThreshold.value), - style: TextStyle( - fontSize: 12.sp, - color: isDarkMode ? Colors.white70 : Colors.black54, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + '${controller.selectedTimeRange.value}预估成本', + style: TextStyle( + fontSize: 14.sp, + fontWeight: FontWeight.w500, + color: isDarkMode ? Colors.white : Colors.black, + ), + ), + Text( + controller.formatCost( + controller.currentStats.estimatedCost), + style: TextStyle( + fontSize: 18.sp, + fontWeight: FontWeight.bold, + color: AppColors.primary, + ), + ), + ], ), ), - ], - ), - SizedBox(height: 4.h), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - '月成本预警阈值', - style: TextStyle( - fontSize: 12.sp, - color: isDarkMode ? Colors.white70 : Colors.black54, - ), + SizedBox(height: 12.h), + // 预警阈值 + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + '日成本预警阈值', + style: TextStyle( + fontSize: 12.sp, + color: isDarkMode ? Colors.white70 : Colors.black54, + ), + ), + Text( + controller + .formatCost(controller.dailyCostThreshold.value), + style: TextStyle( + fontSize: 12.sp, + color: isDarkMode ? Colors.white70 : Colors.black54, + ), + ), + ], ), - Text( - controller.formatCost(controller.monthlyCostThreshold.value), - style: TextStyle( - fontSize: 12.sp, - color: isDarkMode ? Colors.white70 : Colors.black54, - ), + SizedBox(height: 4.h), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + '月成本预警阈值', + style: TextStyle( + fontSize: 12.sp, + color: isDarkMode ? Colors.white70 : Colors.black54, + ), + ), + Text( + controller + .formatCost(controller.monthlyCostThreshold.value), + style: TextStyle( + fontSize: 12.sp, + color: isDarkMode ? Colors.white70 : Colors.black54, + ), + ), + ], ), ], - ), - ], - )), + )), ], ), ); @@ -701,31 +732,32 @@ class TranslationStatsView extends GetView { ), SizedBox(height: 16.h), Obx(() => Column( - children: [ - // 最常用语言对 - _buildUsageBehaviorRow( - '最常用语言对', - controller.currentStats.mostUsedLanguagePair, - Icons.language, - isDarkMode, - ), - SizedBox(height: 12.h), - // 最常用翻译模式 - _buildUsageBehaviorRow( - '最常用模式', - controller.currentStats.mostUsedMode, - Icons.settings, - isDarkMode, - ), - ], - )), + children: [ + // 最常用语言对 + _buildUsageBehaviorRow( + '最常用语言对', + controller.currentStats.mostUsedLanguagePair, + Icons.language, + isDarkMode, + ), + SizedBox(height: 12.h), + // 最常用翻译模式 + _buildUsageBehaviorRow( + '最常用模式', + controller.currentStats.mostUsedMode, + Icons.settings, + isDarkMode, + ), + ], + )), ], ), ); } /// 构建使用行为行 - Widget _buildUsageBehaviorRow(String label, String value, IconData icon, bool isDarkMode) { + Widget _buildUsageBehaviorRow( + String label, String value, IconData icon, bool isDarkMode) { return Row( children: [ Icon( diff --git a/lib/routes/app_pages.dart b/lib/routes/app_pages.dart index 864c9b320..7b8c533f2 100644 --- a/lib/routes/app_pages.dart +++ b/lib/routes/app_pages.dart @@ -122,6 +122,8 @@ abstract class AppPages { name: Routes.OTA_UPGRADE, page: () => const OtaUpgradeView(), binding: OtaUpgradeBinding(), + transition: Transition.rightToLeft, + transitionDuration: Duration(milliseconds: 250), ), // GetPage( // name: Routes.profile, @@ -273,6 +275,8 @@ abstract class AppPages { name: Routes.devices, page: () => const DevicesView(), binding: DevicesBinding(), + transition: Transition.rightToLeft, + transitionDuration: Duration(milliseconds: 250), ), GetPage( name: Routes.ble,