Browse Source

Merge branch 'new_dev' of https://github.com/deepcloud2048/deep_voice into new_dev

newdev_shunjiawei
liwei1dao 1 year ago
parent
commit
d7cc97a481
  1. 3
      lib/modules/home/views/home_view.dart
  2. 4
      lib/modules/pairing/controllers/pairing_controller.dart
  3. 49
      local_plugins/amap_service/ios/Classes/AmapViewController.swift

3
lib/modules/home/views/home_view.dart

@ -92,7 +92,6 @@ class HomeView extends GetView<HomeController> {
// 设备状态卡片 // 设备状态卡片
IntroStepBuilder( IntroStepBuilder(
key: const ValueKey('home_device_status'), // 添加唯一key
group: 'home', group: 'home',
order: 1, order: 1,
onWidgetLoad: () { onWidgetLoad: () {
@ -121,7 +120,6 @@ class HomeView extends GetView<HomeController> {
SizedBox(height: 20.h), SizedBox(height: 20.h),
IntroStepBuilder( IntroStepBuilder(
key: const ValueKey('home_wakeup_guide'), // 添加唯一key
group: 'home', group: 'home',
order: 2, order: 2,
getOverlayPosition: IntroOverlayBuilder.overlayPosition, getOverlayPosition: IntroOverlayBuilder.overlayPosition,
@ -797,7 +795,6 @@ class HomeView extends GetView<HomeController> {
Expanded( Expanded(
flex: 1, flex: 1,
child: IntroStepBuilder( child: IntroStepBuilder(
key: const ValueKey('home_ai_assistant'), // 添加唯一key
group: 'home', group: 'home',
order: 3, order: 3,
getOverlayPosition: IntroOverlayBuilder.overlayPosition, getOverlayPosition: IntroOverlayBuilder.overlayPosition,

4
lib/modules/pairing/controllers/pairing_controller.dart

@ -803,13 +803,13 @@ class PairingController extends GetxController with WidgetsBindingObserver {
} }
} else { } else {
//未绑定设备 //未绑定设备
_bleManager.clearPairedDevices();
Logger.i(_tag, '验证时BLE状态: $currentBleState'); Logger.i(_tag, '验证时BLE状态: $currentBleState');
if (currentBleState == 2) { if (currentBleState == 2) {
//已连接 清理 //已连接 清理
// BleConnectionState.connected // BleConnectionState.connected
Logger.i(_tag, 'BLE已连接,断开并清理缓存'); Logger.i(_tag, 'BLE已连接,断开并清理缓存');
_bleManager.clearPairedDevices();
_bleManager.disconnect(); _bleManager.disconnect();
} }
} }

49
local_plugins/amap_service/ios/Classes/AmapViewController.swift

@ -56,9 +56,15 @@ class AmapViewController: UIViewController {
cleanupResources() cleanupResources()
} }
/**
* 清理资源,包括移除通知观察者
*/
private func cleanupResources() { private func cleanupResources() {
print("开始清理导航资源") print("开始清理导航资源")
// 移除通知观察者,防止内存泄漏
NotificationCenter.default.removeObserver(self, name: NSNotification.Name("ExitNavigation"), object: nil)
// 停止语音合成 // 停止语音合成
speechSynthesizer.stopSpeaking(at: .immediate) speechSynthesizer.stopSpeaking(at: .immediate)
@ -144,21 +150,36 @@ class AmapViewController: UIViewController {
print("导航------------------ startNavigation_4") print("导航------------------ startNavigation_4")
} }
/**
* 退出导航并清理资源
* 添加了nil检查以防止崩溃
*/
@objc private func exitNavigation() { @objc private func exitNavigation() {
print("导航------------------ 退出导航,清理资源") print("导航------------------ 退出导航,清理资源")
// 安全检查:确保driveManager存在再进行操作
guard let manager = driveManager else {
print("⚠️ driveManager已为nil,跳过导航清理")
return
}
// 停止导航 // 停止导航
driveManager.stopNavi() manager.stopNavi()
driveManager.removeDataRepresentative(driveView)
driveManager.delegate = nil
// 移除导航视图 // 安全检查:确保driveView存在再进行操作
driveView.delegate = nil if let view = driveView {
driveView.removeFromSuperview() manager.removeDataRepresentative(view)
driveView = nil view.delegate = nil
view.removeFromSuperview()
} else {
print("⚠️ driveView已为nil,跳过视图清理")
}
// 销毁导航管理器 // 清理管理器
manager.delegate = nil
driveManager = nil driveManager = nil
driveView = nil
// 关闭当前页面 - 修复:使用正确的退出方式 // 关闭当前页面 - 修复:使用正确的退出方式
if let navigationController = navigationController { if let navigationController = navigationController {
// 如果是在导航控制器中,使用 pop // 如果是在导航控制器中,使用 pop
@ -168,13 +189,19 @@ class AmapViewController: UIViewController {
dismiss(animated: true, completion: nil) dismiss(animated: true, completion: nil)
} }
} }
/**
* 添加通知监听器
* 使用弱引用避免循环引用和对象销毁后的调用
*/
private func addNSNotification(){ private func addNSNotification(){
NotificationCenter.default.addObserver( NotificationCenter.default.addObserver(
forName: NSNotification.Name("ExitNavigation"), forName: NSNotification.Name("ExitNavigation"),
object: nil, object: nil,
queue: .main queue: .main
) { _ in ) { [weak self] _ in
self.exitNavigation() // 使用弱引用避免在对象销毁后调用方法
self?.exitNavigation()
} }
} }
} }

Loading…
Cancel
Save