From 3f84933c9d49035971ce81ee796f9e2607c1a291 Mon Sep 17 00:00:00 2001 From: liwei1dao Date: Sat, 20 Sep 2025 12:19:53 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=96=B0=E6=89=8B?= =?UTF-8?q?=E5=92=8C=E5=A4=9A=E8=AF=AD=E8=A8=80=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/main.dart | 85 +++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 65 insertions(+), 20 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 5a0941bdf..b558250f6 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,5 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_easyloading/flutter_easyloading.dart'; +import 'package:flutter_intro/flutter_intro.dart'; +import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:get/get.dart'; import 'package:get_storage/get_storage.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart'; @@ -108,27 +111,69 @@ class MainApp extends StatelessWidget { Widget build(BuildContext context) { // 在应用构建时立即初始化深链接处理 _initDeepLinkHandler(); +// 获取保存的主题设置 + final themeMode = ThemeService().getThemeMode(); - // 使用 ScreenUtilInit 包装整个应用 return ScreenUtilInit( - designSize: const Size(375, 812), // 设计稿尺寸,根据你的设计稿调整 - minTextAdapt: true, - splitScreenMode: true, - builder: (context, child) { - return GetMaterialApp( - title: 'VoiTrans', - theme: AppTheme.lightTheme, - darkTheme: AppTheme.darkTheme, - themeMode: ThemeService().getThemeMode(), - initialRoute: Routes.splash, - getPages: AppPages.pages, - initialBinding: InitialBinding(), - translations: AppTranslations(), - locale: Get.deviceLocale, - fallbackLocale: const Locale('en', 'US'), - debugShowCheckedModeBanner: false, - ); - }, - ); + designSize: const Size(375, 812), + minTextAdapt: true, + splitScreenMode: true, + builder: (_, child) { + return GetMaterialApp( + title: 'Voitrans', + theme: AppTheme.lightTheme, + darkTheme: AppTheme.darkTheme, + themeMode: themeMode, // 使用提前获取的主题模式 + initialBinding: InitialBinding(), + initialRoute: Routes.splash, + getPages: AppPages.pages, + debugShowCheckedModeBanner: false, + translations: AppTranslations(), + localizationsDelegates: const [ + GlobalMaterialLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + GlobalCupertinoLocalizations.delegate, + ], + locale: AppTranslations.deviceLocale(), + fallbackLocale: AppTranslations.getSmartFallbackLocale(), + supportedLocales: AppTranslations.supportedLocales, + builder: EasyLoading.init( + builder: (BuildContext context, Widget? widget) { + EasyLoading.instance.userInteractions = false; + return MediaQuery( + data: MediaQuery.of(context).copyWith( + textScaler: TextScaler.noScaling, + ), + child: Intro( + padding: EdgeInsets.zero, + child: widget!, + ), + ); + }, + ), + ); + }); + + // // 使用 ScreenUtilInit 包装整个应用 + // return ScreenUtilInit( + // designSize: const Size(375, 812), // 设计稿尺寸,根据你的设计稿调整 + // minTextAdapt: true, + // splitScreenMode: true, + // builder: (context, child) { + // return GetMaterialApp( + // title: 'VoiTrans', + // theme: AppTheme.lightTheme, + // darkTheme: AppTheme.darkTheme, + // themeMode: ThemeService().getThemeMode(), + // initialRoute: Routes.splash, + // getPages: AppPages.pages, + // initialBinding: InitialBinding(), + // translations: AppTranslations(), + // locale: Get.deviceLocale, + // fallbackLocale: const Locale('en', 'US'), + // debugShowCheckedModeBanner: false, + // ); + // }, + // ); } } From 95baa4af72b2ebb4403d369bd6e96e2d62a657a2 Mon Sep 17 00:00:00 2001 From: fdp <1286779656@qq.com> Date: Sat, 20 Sep 2025 13:22:21 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=BD=95=E9=9F=B3?= =?UTF-8?q?=E5=AE=8C=E5=90=8E=EF=BC=8C=E6=92=AD=E6=94=BE=E5=A4=96=E6=94=BE?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E3=80=82=E4=BF=AE=E5=A4=8D=E5=BD=95=E9=9F=B3?= =?UTF-8?q?=E4=BB=8E=E8=80=B3=E6=9C=BA=E5=BD=95=E9=9F=B3=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sources/tools/MicrophoneCapture.swift | 26 +++++++++++++++++++ .../Sources/tools/SimpleAudioReceiver.swift | 16 +++++------- 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/local_plugins/azure_speech/ios/azure_speech/Sources/tools/MicrophoneCapture.swift b/local_plugins/azure_speech/ios/azure_speech/Sources/tools/MicrophoneCapture.swift index 1d14da379..2bd895836 100644 --- a/local_plugins/azure_speech/ios/azure_speech/Sources/tools/MicrophoneCapture.swift +++ b/local_plugins/azure_speech/ios/azure_speech/Sources/tools/MicrophoneCapture.swift @@ -444,6 +444,32 @@ public class MicrophoneCapture: NSObject { // 安全地处理音频会话 guard let audioSession = audioSession else { return } + do { + try audioSession.setActive(false) + + if self.hasBluetoothDevices { + print("耳机") + // 设置音频会话参数 + try audioSession.setCategory(.playback, + mode: .videoChat, + options: [ + .allowBluetoothA2DP, + .allowBluetooth + ]) // 添加音频优先级控制 + } else { + print("手机") + try audioSession.setCategory(.playback, + mode: .videoChat, + options: [ + .mixWithOthers, + .defaultToSpeaker]) + } + + try audioSession.overrideOutputAudioPort(.none) + try audioSession.setActive(true) + } catch { + print("音频会话配置失败: \(error.localizedDescription)") + } } diff --git a/local_plugins/azure_speech/ios/azure_speech/Sources/tools/SimpleAudioReceiver.swift b/local_plugins/azure_speech/ios/azure_speech/Sources/tools/SimpleAudioReceiver.swift index b37cd56f4..8d3c4f774 100644 --- a/local_plugins/azure_speech/ios/azure_speech/Sources/tools/SimpleAudioReceiver.swift +++ b/local_plugins/azure_speech/ios/azure_speech/Sources/tools/SimpleAudioReceiver.swift @@ -192,15 +192,13 @@ public class SimpleAudioReceiver: NSObject { do { // 确保正在写入状态 guard self._isWriting else { return } - // 设置音频会话参数 - try audioSession.setCategory(.playAndRecord, - mode: .voiceChat, - options: [.defaultToSpeaker, - .mixWithOthers, - .defaultToSpeaker, - .allowBluetoothA2DP, - .allowBluetooth]) - try audioSession.overrideOutputAudioPort(.none) + // 设置音频会话参数 + try audioSession.setCategory(.playAndRecord, + mode: .videoChat, + options: [.allowBluetoothA2DP, // 允许蓝牙耳机,不占用hfp链路 + .mixWithOthers, + .defaultToSpeaker]) // 添加音频优先级控制 + try audioSession.setActive(true) try micCapture.startCapture() try micCapture.audioDataHandler = { data in