From dc13abaeca9513b24f5b82be32b51f6a4a577303 Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Wed, 6 Aug 2025 08:29:09 +0800 Subject: [PATCH 1/2] =?UTF-8?q?refactor(ui):=20=E9=87=8D=E6=9E=84=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E6=B0=94=E6=B3=A1=E5=92=8C=E8=BF=9B=E5=BA=A6=E6=8C=89?= =?UTF-8?q?=E9=92=AE=E7=BB=84=E4=BB=B6=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 统一消息气泡的内边距和圆角样式 - 将circular_progress_button移动到widgets目录 - 优化音乐播放列表视图的代码格式 - 移除平台特定的隐私设置条件判断 --- lib/modules/agent/views/message_bubble.dart | 26 ++++------ lib/modules/agent/views/music_card.dart | 2 +- .../circular_progress_button.dart | 0 .../music/views/music_playlist_view.dart | 13 +++-- lib/modules/settings/views/settings_view.dart | 51 +++++++++---------- 5 files changed, 43 insertions(+), 49 deletions(-) rename lib/modules/agent/{views => widgets}/circular_progress_button.dart (100%) diff --git a/lib/modules/agent/views/message_bubble.dart b/lib/modules/agent/views/message_bubble.dart index b8903cc5f..6099dc1f0 100644 --- a/lib/modules/agent/views/message_bubble.dart +++ b/lib/modules/agent/views/message_bubble.dart @@ -46,28 +46,20 @@ class MessageBubble extends GetView { isUser ? CrossAxisAlignment.end : CrossAxisAlignment.start, children: [ Container( - padding: hasImage - ? (message == '[图片]' - ? EdgeInsets.zero - : isUser - ? const EdgeInsets.fromLTRB( - 12, 12, 16, 12) // 用户消息右侧多一点内边距 - : const EdgeInsets.fromLTRB( - 16, 12, 12, 12)) // AI消息左侧多一点内边距 - : isUser - ? const EdgeInsets.fromLTRB( - 12, 12, 16, 12) // 用户消息右侧多一点内边距 - : const EdgeInsets.fromLTRB( - 16, 12, 12, 12), // AI消息左侧多一点内边距 + padding: (hasImage && message == '[图片]') + ? EdgeInsets.zero + : const EdgeInsets.all(12), decoration: BoxDecoration( color: _getBubbleColor(context), - borderRadius: BorderRadius.circular(18).copyWith( + borderRadius: BorderRadius.only( topLeft: isUser ? const Radius.circular(18) : const Radius.circular(4), - topRight: !isUser - ? const Radius.circular(18) - : const Radius.circular(4), + topRight: isUser + ? const Radius.circular(4) + : const Radius.circular(18), + bottomLeft: const Radius.circular(18), + bottomRight: const Radius.circular(18), ), boxShadow: [ BoxShadow( diff --git a/lib/modules/agent/views/music_card.dart b/lib/modules/agent/views/music_card.dart index 4da822412..1639994d8 100644 --- a/lib/modules/agent/views/music_card.dart +++ b/lib/modules/agent/views/music_card.dart @@ -3,7 +3,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import '../../../routes/app_routes.dart'; import '../controllers/agent_controller.dart'; -import 'circular_progress_button.dart'; +import '../widgets/circular_progress_button.dart'; /// 构建音乐项目 Widget buildMusicItem(BuildContext context, int id, String name, String url, diff --git a/lib/modules/agent/views/circular_progress_button.dart b/lib/modules/agent/widgets/circular_progress_button.dart similarity index 100% rename from lib/modules/agent/views/circular_progress_button.dart rename to lib/modules/agent/widgets/circular_progress_button.dart diff --git a/lib/modules/music/views/music_playlist_view.dart b/lib/modules/music/views/music_playlist_view.dart index 29f2c520b..d549252fe 100644 --- a/lib/modules/music/views/music_playlist_view.dart +++ b/lib/modules/music/views/music_playlist_view.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import '../../../core/utils/logger.dart'; import '../../agent/controllers/agent_controller.dart'; -import '../../agent/views/circular_progress_button.dart'; +import '../../agent/widgets/circular_progress_button.dart'; class MusicPlaylistView extends StatelessWidget { const MusicPlaylistView({Key? key}) : super(key: key); @@ -115,7 +115,9 @@ class MusicPlaylistView extends StatelessWidget { ); } - final title = currentSong['name'] ?? currentSong['title'] ?? 'unknownSong'.tr; // 未知歌曲 + final title = currentSong['name'] ?? + currentSong['title'] ?? + 'unknownSong'.tr; // 未知歌曲 final artist = currentSong['singer'] ?? currentSong['sgener'] ?? currentSong['artist'] ?? @@ -192,7 +194,8 @@ class MusicPlaylistView extends StatelessWidget { final id = item["id"] ?? 0; final name = item["name"] ?? 'unknownSong'.tr; // 未知歌曲 final url = item["url"] ?? ""; - final singer = item["singer"] ?? item["sgener"] ?? 'unknownArtist'.tr; // 未知歌手 + final singer = + item["singer"] ?? item["sgener"] ?? 'unknownArtist'.tr; // 未知歌手 final image = item["image"] ?? ""; return _buildMusicItem( @@ -628,8 +631,8 @@ class MusicPlaylistView extends StatelessWidget { } // 播放选中的歌曲 - Future _playSelectedSong(AgentController controller, Map song, - List> playlist) async { + Future _playSelectedSong(AgentController controller, + Map song, List> playlist) async { // 防止重复点击导致的状态混乱 if (controller.isLoadingMusic.value) { return; diff --git a/lib/modules/settings/views/settings_view.dart b/lib/modules/settings/views/settings_view.dart index 571c1731c..8c12701a1 100644 --- a/lib/modules/settings/views/settings_view.dart +++ b/lib/modules/settings/views/settings_view.dart @@ -418,32 +418,31 @@ class SettingsView extends GetView { }, isDarkMode: isDarkMode, ), - if (Platform.isAndroid) ...[ - Divider( - height: 1, - color: isDarkMode - ? Colors.white.withOpacity(0.1) - : Colors.grey[200]), + // if (Platform.isAndroid) ...[ + Divider( + height: 1, + color: isDarkMode + ? Colors.white.withOpacity(0.1) + : Colors.grey[200]), - // 隐私设置 - _buildSimpleNavigationSetting( - title: 'privacySettings'.tr, // 隐私设置 - subtitle: 'privacySettingsInfo'.tr, // 管理数据收集和权限 - icon: Icons.shield_outlined, - iconBgColor: isDarkMode - ? Colors.purple[900]!.withOpacity(0.3) - : Colors.purple[100]!, - iconColor: isDarkMode - ? Colors.purple[300]! - : Colors.purple[600]!, - titleColor: isDarkMode ? Colors.white : null, - subtitleColor: isDarkMode ? Colors.white70 : null, - onTap: () { - AppSettings.openAppSettings(); - }, - isDarkMode: isDarkMode, - ) - ], + // 隐私设置 + _buildSimpleNavigationSetting( + title: 'privacySettings'.tr, // 隐私设置 + subtitle: 'privacySettingsInfo'.tr, // 管理数据收集和权限 + icon: Icons.shield_outlined, + iconBgColor: isDarkMode + ? Colors.purple[900]!.withOpacity(0.3) + : Colors.purple[100]!, + iconColor: + isDarkMode ? Colors.purple[300]! : Colors.purple[600]!, + titleColor: isDarkMode ? Colors.white : null, + subtitleColor: isDarkMode ? Colors.white70 : null, + onTap: () { + AppSettings.openAppSettings(); + }, + isDarkMode: isDarkMode, + ), + // ], Divider( height: 1, @@ -599,7 +598,7 @@ class SettingsView extends GetView { ? Colors.white.withOpacity(0.1) : Colors.grey[200]), - // 添加权限管理设置项 + // 权限管理设置项 _buildSimpleNavigationSetting( title: 'permissionManagement'.tr, // 权限管理 subtitle: 'permissionManagementInfo'.tr, // 管理应用权限设置 From aae0eed29b26ec074e65170b89e53e85ad9f3d40 Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Wed, 6 Aug 2025 17:18:33 +0800 Subject: [PATCH 2/2] =?UTF-8?q?Revert=20"fix(azure=5Fspeech):=20=E6=81=A2?= =?UTF-8?q?=E5=A4=8D=E9=9F=B3=E9=A2=91=E6=95=B0=E6=8D=AE=E5=9B=9E=E8=B0=83?= =?UTF-8?q?=E5=B9=B6=E6=B3=A8=E9=87=8AASR=E7=9B=B8=E5=85=B3=E4=BB=A3?= =?UTF-8?q?=E7=A0=81"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 09b0dc3d232e295367130c06129dd34852e6ddec. --- .../meeting_record_controller.dart | 25 +++++++++---------- .../azure_speech/AzureAsrHelper.kt | 7 +++--- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/lib/modules/meeting/controllers/meeting_record_controller.dart b/lib/modules/meeting/controllers/meeting_record_controller.dart index 0d27de8b7..8cd767ee0 100644 --- a/lib/modules/meeting/controllers/meeting_record_controller.dart +++ b/lib/modules/meeting/controllers/meeting_record_controller.dart @@ -90,7 +90,7 @@ class MeetingRecordController extends GetxController Future _reinitializeAsrService() async { try { // 重新初始化ASR服务 - // await _asrService.initialize(); + await _asrService.initialize(); Logger.info('ASR服务重新初始化成功'); } catch (e) { @@ -163,7 +163,7 @@ class MeetingRecordController extends GetxController _bleManager.closeCodec(); } _asrService.stopRecord(true); - //_asrService.stopContinuousRecognition(); + _asrService.stopContinuousRecognition(); isRecording.value = false; } @@ -196,12 +196,12 @@ class MeetingRecordController extends GetxController /// Toggles visibility of transcribed text content Future toggleTextDisplay() async { - // final recognitionStream = await _asrService.recognizeCallback(); - // _recognitionSubscription?.cancel(); - // _recognitionSubscription = - // recognitionStream.listen(_handleRecognitionEvent); + final recognitionStream = await _asrService.recognizeCallback(); + _recognitionSubscription?.cancel(); + _recognitionSubscription = + recognitionStream.listen(_handleRecognitionEvent); - //await _asrService.startContinuousRecognition(_audioSourceType); + await _asrService.startContinuousRecognition(_audioSourceType); showTextContent.toggle(); } @@ -242,8 +242,8 @@ class MeetingRecordController extends GetxController /// Starts recording session Future _startRecording() async { // Initialize speech recognition - // final recognitionStream = - // await _asrService.startContinuousRecognition(_audioSourceType); + final recognitionStream = + await _asrService.startContinuousRecognition(_audioSourceType); // Prepare storage directory final appDir = await appDocDir; @@ -284,14 +284,14 @@ class MeetingRecordController extends GetxController /// Pauses current recording session Future _pauseRecording() async { - // await _asrService.stopContinuousRecognition(); + await _asrService.stopContinuousRecognition(); await _asrService.pauseRecord(); pauseTimer(); } /// Resumes paused recording session Future _resumeRecording() async { - //await _asrService.startContinuousRecognition(_audioSourceType); + await _asrService.startContinuousRecognition(_audioSourceType); startTimer(); } @@ -303,7 +303,6 @@ class MeetingRecordController extends GetxController intermediateContent.value = event.text; break; case RecognitionEventType.onAudio: - print("音波数据:${event.audio!.length}"); // 添加新音频数据到波形 _processAudioData(event.audio!); break; @@ -462,7 +461,7 @@ class MeetingRecordController extends GetxController } } - //await _asrService.stopContinuousRecognition(); + await _asrService.stopContinuousRecognition(); _resetToDefaultState(); isRecording.value = false; } diff --git a/local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/AzureAsrHelper.kt b/local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/AzureAsrHelper.kt index ff5ba4ca1..02d909d4a 100644 --- a/local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/AzureAsrHelper.kt +++ b/local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/AzureAsrHelper.kt @@ -717,7 +717,7 @@ class AzureAsrHelper(private val context: Context) { if (bytesToWrite < data.size) data.copyOf(bytesToWrite) else data try { - continuousCallback?.onAudio(finalData) + //continuousCallback?.onAudio(finalData) pushAudioStream?.write(finalData) recordfile?.saveAudioDataToWav(finalData) } catch (e: Exception) { @@ -922,7 +922,6 @@ class AzureAsrHelper(private val context: Context) { fun onError(error: String) } - /** * 连续识别回调接口 */ @@ -954,9 +953,9 @@ class AzureAsrHelper(private val context: Context) { fun onSessionStopped() /** - * 返回音频数据 + * 返回音频 * - * @param data 音频字节数组 + * @param data 识别的音频 */ fun onAudio(data: ByteArray)