From 00844f1222adc88adc51c84a551cec4c1b8cc629 Mon Sep 17 00:00:00 2001 From: wolfplus Date: Tue, 13 May 2025 12:09:44 +0100 Subject: [PATCH] add --- .../agent/controllers/agent_controller.dart | 43 ++++++------------- .../controllers/pairing_controller.dart | 2 +- 2 files changed, 15 insertions(+), 30 deletions(-) diff --git a/lib/modules/agent/controllers/agent_controller.dart b/lib/modules/agent/controllers/agent_controller.dart index 617cd5258..f82dd7d5c 100644 --- a/lib/modules/agent/controllers/agent_controller.dart +++ b/lib/modules/agent/controllers/agent_controller.dart @@ -376,21 +376,28 @@ class AgentController extends GetxController { break; case AgentServiceEventType.functionCallResult: - final responseId = event.data['responseId'] ?? ''; +final responseId = event.data['responseId'] ?? ''; final result = event.data['result'] ?? ''; final functionCall = event.data['function_call'] ?? ''; logger.i('Flutter 结束调用 mcp: $result, $functionCall'); if (result.isNotEmpty) { final parsedResult = jsonDecode(result); - final meta = parsedResult["meta"] as String; - final metaResult = jsonDecode(meta); - if (meta.isNotEmpty) { - logger.i('Flutter 结束调用 mcp metaResult: $metaResult'); + final meta = parsedResult["meta"]; + Map metaResult = {}; + + if (meta != null && meta is String && meta.isNotEmpty) { + try { + metaResult = jsonDecode(meta); + } catch (e) { + print('解析meta数据失败: $e'); + } + } + if(metaResult.isNotEmpty){ + // 判断是否为新的回复或响应ID是否改变 if (_isNewAssistantResponse || _currentResponseId != responseId) { // 添加新消息 - messages - .add(Message(isUser: false, text: "", meta: metaResult)); + messages.add(Message(isUser: false, text: "", meta: metaResult)); _isNewAssistantResponse = false; _currentResponseId = responseId; } else { @@ -405,9 +412,6 @@ class AgentController extends GetxController { ); } } - messages.refresh(); - // 滚动到底部 - _scrollToBottom(); } } break; @@ -417,25 +421,6 @@ class AgentController extends GetxController { }); } - // 滚动到底部 - void _scrollToBottom() { - // 使用reverse:true时,此方法可大部分场景下不再需要 - // 保留此方法但简化实现,仅用于特殊情况下的手动滚动 - WidgetsBinding.instance.addPostFrameCallback((_) { - if (scrollController.hasClients) { - try { - scrollController.animateTo( - 0, // 使用reverse:true时,0表示列表底部 - duration: Duration(milliseconds: 300), - curve: Curves.easeOut, - ); - } catch (e) { - logger.e('滚动到底部失败: $e'); - } - } - }); - } - // 发送文本消息 Future sendTextMessage() async { // 如果图片输入是活跃的,使用选中的图片和文本框的内容 diff --git a/lib/modules/pairing/controllers/pairing_controller.dart b/lib/modules/pairing/controllers/pairing_controller.dart index 98d7df449..7ecf4e076 100644 --- a/lib/modules/pairing/controllers/pairing_controller.dart +++ b/lib/modules/pairing/controllers/pairing_controller.dart @@ -186,7 +186,7 @@ class PairingController extends GetxController { if (Platform.isAndroid) { permissionsToRequest.add(Permission.locationWhenInUse); - // permissionsToRequest.add(Permission.microphone); + permissionsToRequest.add(Permission.microphone); if (await _getAndroidSdkVersion() >= 31) { permissionsToRequest.add(Permission.bluetoothScan); permissionsToRequest.add(Permission.bluetoothConnect);