diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts
index d26cbc350..0b53e4a8f 100644
--- a/android/app/build.gradle.kts
+++ b/android/app/build.gradle.kts
@@ -69,7 +69,7 @@ android {
// You can update the following values to match your application needs.
// For more information, see: https://flutter.dev/to/review-gradle-config.
minSdk = 26 // 更新为26以满足ble_service库的要求
- targetSdk = 34 // 设置为 Android 13 (API 33),以匹配 FOREGROUND_SERVICE_MEDIA_PLAYBACK 权限的要求
+ targetSdk = 35 // 设置为 Android 15 (API 35),以满足应用市场要求
versionCode = flutter.versionCode // 对应构建号,自动同步flutter构建号
versionName = flutter.versionName // 对应版本号,自动同步flutter版本号
}
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 441e2cafc..a2c7bb84e 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -9,6 +9,8 @@
+
+
@@ -70,6 +72,9 @@
android:enableOnBackInvokedCallback="true"
tools:replace="android:label">
+
+
+
diff --git a/lib/data/services/ble_manager.dart b/lib/data/services/ble_manager.dart
index b0b79dbd9..16ee0d843 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/novice_guide_service.dart b/lib/data/services/novice_guide_service.dart
index 485004914..17d9f0a35 100644
--- a/lib/data/services/novice_guide_service.dart
+++ b/lib/data/services/novice_guide_service.dart
@@ -14,8 +14,8 @@ class NoviceGuideService extends GetxService {
final BleService _bleService = BleService();
StreamSubscription? _statusSubscription;
- bool isHomeGuide = true;
- bool isAIGuide = true;
+ bool isHomeGuide = false;
+ bool isAIGuide = false;
RxBool isWakeup = false.obs;
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..378dfc6ea 100644
--- a/lib/modules/home/controllers/home_controller.dart
+++ b/lib/modules/home/controllers/home_controller.dart
@@ -1,4 +1,5 @@
import 'package:get/get.dart';
+import 'package:get_storage/get_storage.dart';
// 移除了dart:async导入,因为不再使用Timer
import '../../../data/services/novice_guide_service.dart';
import '../../../routes/app_routes.dart';
@@ -20,6 +21,7 @@ enum ConnectionStatus {
class HomeController extends GetxController {
static const String _tag = 'HomeCtrl';
static HomeController get to => Get.find();
+ final GetStorage _storage = GetStorage();
final _isFullyConnected = false.obs;
String? _lastConnectedDeviceName;
@@ -46,13 +48,13 @@ class HomeController extends GetxController {
Logger.d(_tag, 'lxm--接收到的DeviceInfo: $newDeviceInfo');
if (newDeviceInfo != null) {
- Logger.d(_tag, 'lxm--原始数据 - 左耳电量: ${newDeviceInfo.leftEarBattery}');
- Logger.d(_tag, 'lxm--原始数据 - 右耳电量: ${newDeviceInfo.rightEarBattery}');
- Logger.d(_tag, 'lxm--原始数据 - 充电仓电量: ${newDeviceInfo.caseBattery}');
- Logger.d(_tag, 'lxm--原始数据 - 左耳充电: ${newDeviceInfo.leftEarCharging}');
- Logger.d(_tag, 'lxm--原始数据 - 右耳充电: ${newDeviceInfo.rightEarCharging}');
- Logger.d(_tag, 'lxm--原始数据 - 充电仓充电: ${newDeviceInfo.caseCharging}');
- Logger.d(_tag, 'lxm--原始数据 - 固件版本: ${newDeviceInfo.firmwareVersion}');
+ // Logger.d(_tag, 'lxm--原始数据 - 左耳电量: ${newDeviceInfo.leftEarBattery}');
+ // Logger.d(_tag, 'lxm--原始数据 - 右耳电量: ${newDeviceInfo.rightEarBattery}');
+ // Logger.d(_tag, 'lxm--原始数据 - 充电仓电量: ${newDeviceInfo.caseBattery}');
+ // Logger.d(_tag, 'lxm--原始数据 - 左耳充电: ${newDeviceInfo.leftEarCharging}');
+ // Logger.d(_tag, 'lxm--原始数据 - 右耳充电: ${newDeviceInfo.rightEarCharging}');
+ // Logger.d(_tag, 'lxm--原始数据 - 充电仓充电: ${newDeviceInfo.caseCharging}');
+ // Logger.d(_tag, 'lxm--原始数据 - 固件版本: ${newDeviceInfo.firmwareVersion}');
} else {
Logger.d(_tag, 'lxm--接收到的DeviceInfo为null');
}
@@ -72,13 +74,13 @@ class HomeController extends GetxController {
caseCharging.value = newDeviceInfo?.caseCharging ?? false;
firmwareVersion.value = newDeviceInfo?.firmwareVersion ?? '';
- Logger.d(_tag, 'lxm--更新后的值 - 左耳电量: ${leftEarBattery.value}');
- Logger.d(_tag, 'lxm--更新后的值 - 右耳电量: ${rightEarBattery.value}');
- Logger.d(_tag, 'lxm--更新后的值 - 充电仓电量: ${caseBattery.value}');
- Logger.d(_tag, 'lxm--更新后的值 - 左耳充电: ${leftEarCharging.value}');
- Logger.d(_tag, 'lxm--更新后的值 - 右耳充电: ${rightEarCharging.value}');
- Logger.d(_tag, 'lxm--更新后的值 - 充电仓充电: ${caseCharging.value}');
- Logger.d(_tag, 'lxm--更新后的值 - 固件版本: ${firmwareVersion.value}');
+ // Logger.d(_tag, 'lxm--更新后的值 - 左耳电量: ${leftEarBattery.value}');
+ // Logger.d(_tag, 'lxm--更新后的值 - 右耳电量: ${rightEarBattery.value}');
+ // Logger.d(_tag, 'lxm--更新后的值 - 充电仓电量: ${caseBattery.value}');
+ // Logger.d(_tag, 'lxm--更新后的值 - 左耳充电: ${leftEarCharging.value}');
+ // Logger.d(_tag, 'lxm--更新后的值 - 右耳充电: ${rightEarCharging.value}');
+ // Logger.d(_tag, 'lxm--更新后的值 - 充电仓充电: ${caseCharging.value}');
+ // Logger.d(_tag, 'lxm--更新后的值 - 固件版本: ${firmwareVersion.value}');
}
Worker? _deviceInfoWorker;
@@ -140,7 +142,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() {
@@ -164,6 +175,8 @@ class HomeController extends GetxController {
bool wasConnected = _isFullyConnected.value;
bool isNowConnected = hasClassicBluetooth && hasBleConnection;
+ bool isGuideCompleted = _storage.read('home_guide') ?? false;
+
if (isNowConnected && currentDevice == null) {
isNowConnected = false;
}
@@ -182,9 +195,11 @@ class HomeController extends GetxController {
// 移除了连接成功后的电池信息刷新
// 连接成功后检查OTA升级
- Future.delayed(const Duration(seconds: 2), () {
- _checkOtaUpgrade();
- });
+ if (isGuideCompleted) {
+ Future.delayed(const Duration(seconds: 2), () {
+ _checkOtaUpgrade();
+ });
+ }
}
// 移除了根据连接状态控制定时器的逻辑
}
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,
diff --git a/local_plugins/ble_service/android/build.gradle.kts b/local_plugins/ble_service/android/build.gradle.kts
index 398f8afa7..66a4892b9 100644
--- a/local_plugins/ble_service/android/build.gradle.kts
+++ b/local_plugins/ble_service/android/build.gradle.kts
@@ -9,11 +9,11 @@ plugins {
android {
namespace = "com.yunqiinnovation.ble_service"
- compileSdk = 34
+ compileSdk = 35
defaultConfig {
minSdk = 26
- targetSdk = 34
+ targetSdk = 35
}
compileOptions {
@@ -31,4 +31,4 @@ dependencies {
// 使用从本地Maven仓库引用的AAR依赖
implementation("com.jieli.audio:jl_audio_decode:2.0.0")
implementation("com.jieli.jl_bt_ota:jl_bt_ota:1.9.2")
-}
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/local_plugins/bytedance_speech/android/build.gradle.kts b/local_plugins/bytedance_speech/android/build.gradle.kts
index afd104ba2..402e0b7bd 100644
--- a/local_plugins/bytedance_speech/android/build.gradle.kts
+++ b/local_plugins/bytedance_speech/android/build.gradle.kts
@@ -29,7 +29,7 @@ android {
defaultConfig {
minSdk = 26
- targetSdk = 34
+ targetSdk = 35
}
compileOptions {
@@ -53,4 +53,4 @@ dependencies {
implementation(project(":speech"))
-}
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/local_plugins/chat_api/android/build.gradle.kts b/local_plugins/chat_api/android/build.gradle.kts
index 0f564abce..44bb954b1 100644
--- a/local_plugins/chat_api/android/build.gradle.kts
+++ b/local_plugins/chat_api/android/build.gradle.kts
@@ -10,7 +10,7 @@ android {
defaultConfig {
minSdk = 21
- targetSdk = 33
+ targetSdk = 35
}
compileOptions {
diff --git a/local_plugins/chat_storage/android/build.gradle.kts b/local_plugins/chat_storage/android/build.gradle.kts
index 842b98276..f72c52b68 100644
--- a/local_plugins/chat_storage/android/build.gradle.kts
+++ b/local_plugins/chat_storage/android/build.gradle.kts
@@ -11,12 +11,12 @@ android {
namespace = "com.yunqiinnovation.chat_storage"
// 目标 SDK 版本
- compileSdk = 33
+ compileSdk = 35
defaultConfig {
// 最低 SDK 版本
minSdk = 21
- targetSdk = 33
+ targetSdk = 35
}
// Java 语言级别兼容配置
diff --git a/local_plugins/classic_bluetooth/android/build.gradle.kts b/local_plugins/classic_bluetooth/android/build.gradle.kts
index fa40cf9fa..3c6531e8c 100644
--- a/local_plugins/classic_bluetooth/android/build.gradle.kts
+++ b/local_plugins/classic_bluetooth/android/build.gradle.kts
@@ -16,7 +16,7 @@ android {
defaultConfig {
// 最低 SDK 版本
minSdk = 21
- targetSdk = 33
+ targetSdk = 35
}
// Java 语言级别兼容配置
diff --git a/local_plugins/jl_opus/android/build.gradle.kts b/local_plugins/jl_opus/android/build.gradle.kts
index 3c0b820e2..9eae80a05 100644
--- a/local_plugins/jl_opus/android/build.gradle.kts
+++ b/local_plugins/jl_opus/android/build.gradle.kts
@@ -18,12 +18,12 @@ android {
namespace = "com.yunqiinnovation.jl_opus"
// 目标 SDK 版本
- compileSdk = 33
+ compileSdk = 35
defaultConfig {
// 最低 SDK 版本
minSdk = 21
- targetSdk = 33
+ targetSdk = 35
}
// Java 语言级别兼容配置
diff --git a/local_plugins/open_ai_service/android/build.gradle.kts b/local_plugins/open_ai_service/android/build.gradle.kts
index f5bbc9337..a93b5d5a7 100644
--- a/local_plugins/open_ai_service/android/build.gradle.kts
+++ b/local_plugins/open_ai_service/android/build.gradle.kts
@@ -17,7 +17,7 @@ android {
defaultConfig {
// 最低 SDK 版本
minSdk = 21
- targetSdk = 33
+ targetSdk = 35
}
// Java 语言级别兼容配置
diff --git a/local_plugins/realtime/android/build.gradle.kts b/local_plugins/realtime/android/build.gradle.kts
index b787e4124..10c4dad20 100644
--- a/local_plugins/realtime/android/build.gradle.kts
+++ b/local_plugins/realtime/android/build.gradle.kts
@@ -10,7 +10,7 @@ android {
defaultConfig {
minSdk = 21
- targetSdk = 33
+ targetSdk = 35
}
compileOptions {
@@ -44,4 +44,4 @@ dependencies {
// OkHttp for WebSocket
implementation(platform("com.squareup.okhttp3:okhttp-bom:4.12.0"))
implementation("com.squareup.okhttp3:okhttp")
-}
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/local_plugins/speech/android/build.gradle.kts b/local_plugins/speech/android/build.gradle.kts
index 4e5186a27..532e74759 100644
--- a/local_plugins/speech/android/build.gradle.kts
+++ b/local_plugins/speech/android/build.gradle.kts
@@ -17,7 +17,7 @@ android {
defaultConfig {
// 最低 SDK 版本
minSdk = 21
- targetSdk = 33
+ targetSdk = 35
}
// Java 语言级别兼容配置