From 2e9a94ab6956cf24e026ba96e220a235d009f4d1 Mon Sep 17 00:00:00 2001 From: tanlongsheng <252620078@qq.com> Date: Wed, 13 Aug 2025 15:56:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=B0=E6=89=8B=E6=8C=87?= =?UTF-8?q?=E5=BC=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/core/widgets/intro_overlay_builder.dart | 3 +- lib/data/services/novice_guide_service.dart | 2 +- lib/modules/agent/views/agent_view.dart | 153 +++++++++++++------- 3 files changed, 100 insertions(+), 58 deletions(-) diff --git a/lib/core/widgets/intro_overlay_builder.dart b/lib/core/widgets/intro_overlay_builder.dart index 920737ae2..87101729b 100644 --- a/lib/core/widgets/intro_overlay_builder.dart +++ b/lib/core/widgets/intro_overlay_builder.dart @@ -7,6 +7,7 @@ class IntroOverlayBuilder { static Widget homeBuilder( StepWidgetParams params, bool isWakeup, { + String title = '对着麦克风说:“小言小言”', Function? onNext, }) { return Column( @@ -21,7 +22,7 @@ class IntroOverlayBuilder { Padding( padding: EdgeInsets.only(bottom: 20.w), child: Text( - isWakeup ? '我在呢~' : '对着麦克风说:“小言小言”', + isWakeup ? '我在呢~' : title, style: TextStyle( fontSize: 15.sp, color: Colors.white, diff --git a/lib/data/services/novice_guide_service.dart b/lib/data/services/novice_guide_service.dart index d32be2368..4fa2c12c7 100644 --- a/lib/data/services/novice_guide_service.dart +++ b/lib/data/services/novice_guide_service.dart @@ -12,7 +12,7 @@ class NoviceGuideService extends GetxService { StreamSubscription? _statusSubscription; bool isHomeGuide = true; - bool isAIGuide = true; + bool isAIGuide = false; RxBool isWakeup = false.obs; diff --git a/lib/modules/agent/views/agent_view.dart b/lib/modules/agent/views/agent_view.dart index 849baa4cc..9ce31cb95 100644 --- a/lib/modules/agent/views/agent_view.dart +++ b/lib/modules/agent/views/agent_view.dart @@ -193,62 +193,104 @@ class _AgentViewState extends State with WidgetsBindingObserver { ), body: Stack( children: [ + IntroStepBuilder( + group: 'ai', + order: 3, + getOverlayPosition: ({ + required Offset offset, + required Size screenSize, + required Size size, + }) { + return OverlayPosition( + top: 200.h, + width: screenSize.width, + crossAxisAlignment: CrossAxisAlignment.end, + ); + }, + overlayBuilder: (params) { + return IntroOverlayBuilder.homeBuilder( + params, + false, + title: '小言正在思考中~', + onNext: () {}, + ); + }, + builder: (BuildContext context, GlobalKey key) => SizedBox( + key: key, + ), + ), // 主要聊天界面 Column( children: [ // 聊天内容 Expanded( - child: Stack( - children: [ - IntroStepBuilder( - group: 'ai', - order: 3, - overlayBuilder: (params) { - return IntroOverlayBuilder.aiBuilder( - params, - controller.noviceGuideService.aiStepsList[ - controller.noviceGuideService.aiStep]['end'], - onFinish: () async { - if (controller.noviceGuideService.aiStep < 5) { - await Future.delayed( - const Duration(milliseconds: 300)); - controller.noviceGuideService.aiStep++; - Intro.of(Get.context!) - .start(group: 'ai', reset: true); - } - }, - ); - }, - builder: (BuildContext context, GlobalKey key) => Align( - alignment: Alignment.bottomCenter, - child: SizedBox( - key: key, - width: double.infinity, - height: 430.w, - ), - ), - ), - Obx( - () => Align( - alignment: Alignment.topCenter, - child: ListView.builder( - controller: controller.scrollController, - shrinkWrap: true, - reverse: true, - padding: EdgeInsets.symmetric( - vertical: 16.h, horizontal: 16.w), - itemCount: controller.messages.length + - (controller.hasMoreMessages.value ? 1 : 0), - itemBuilder: (context, index) { - // 如果是最后一项且有更多消息,显示加载指示器 - if (index == controller.messages.length && - controller.hasMoreMessages.value) { - return _buildLoadMoreIndicator(); - } + child: Obx(() { + return Align( + alignment: Alignment.topCenter, + child: ListView.builder( + controller: controller.scrollController, + shrinkWrap: true, + reverse: true, + padding: EdgeInsets.symmetric( + vertical: 16.h, horizontal: 16.w), + itemCount: controller.messages.length + + (controller.hasMoreMessages.value ? 1 : 0), + itemBuilder: (context, index) { + // 如果是最后一项且有更多消息,显示加载指示器 + if (index == controller.messages.length && + controller.hasMoreMessages.value) { + return _buildLoadMoreIndicator(); + } - final message = controller.messages[ - controller.messages.length - 1 - index]; - return Padding( + final message = controller + .messages[controller.messages.length - 1 - index]; + return index == 0 + ? IntroStepBuilder( + group: 'ai', + order: 4, + overlayBuilder: (params) { + return IntroOverlayBuilder.aiBuilder( + params, + controller.noviceGuideService.aiStepsList[ + controller + .noviceGuideService.aiStep]['end'], + onFinish: () async { + if (controller.noviceGuideService.aiStep < + 5) { + await Future.delayed( + const Duration(milliseconds: 300)); + controller.noviceGuideService.aiStep++; + Intro.of(Get.context!) + .start(group: 'ai', reset: true); + } + }, + ); + }, + builder: + (BuildContext context, GlobalKey key) => + Padding( + key: key, + padding: EdgeInsets.only(bottom: 8.h), + child: GestureDetector( + onLongPressStart: + (LongPressStartDetails details) { + messageActionController + .onLongPressMessage(context, + isDarkMode, details, message); + }, + child: MessageBubble( + isUser: message.isUser, + message: message.text, + timestamp: message.timestamp, + isRecognizing: message.isRecognizing, + hasImage: message.hasImage, + imagePath: message.imagePath, + meta: message.meta, + ), + ), + ), + ) + : Padding( padding: EdgeInsets.only(bottom: 8.h), child: GestureDetector( onLongPressStart: @@ -265,13 +307,12 @@ class _AgentViewState extends State with WidgetsBindingObserver { imagePath: message.imagePath, meta: message.meta, ), - )); - }, - ), - ), + ), + ); + }, ), - ], - ), + ); + }), ), // 输入区域