From 2a43640dc93bafeeda64b6acfd4e687700326975 Mon Sep 17 00:00:00 2001 From: siddu015 <116783967+siddu015@users.noreply.github.com> Date: Thu, 27 Feb 2025 22:23:06 +0530 Subject: [PATCH] Feat: Copy Response --- lib/dashbot/widgets/chat_bubble.dart | 24 +++++++++++++++++++++- lib/dashbot/widgets/dashbot_widget.dart | 27 ++++--------------------- 2 files changed, 27 insertions(+), 24 deletions(-) diff --git a/lib/dashbot/widgets/chat_bubble.dart b/lib/dashbot/widgets/chat_bubble.dart index cd61c48f..a99a76d2 100644 --- a/lib/dashbot/widgets/chat_bubble.dart +++ b/lib/dashbot/widgets/chat_bubble.dart @@ -1,5 +1,6 @@ // lib/dashbot/widgets/chat_bubble.dart import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'content_renderer.dart'; class ChatBubble extends StatelessWidget { @@ -21,7 +22,28 @@ class ChatBubble extends StatelessWidget { : Theme.of(context).colorScheme.surfaceContainerHighest, borderRadius: BorderRadius.circular(8), ), - child: renderContent(context, message), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Flexible( + child: renderContent(context, message), + ), + if (!isUser) ...[ + const SizedBox(width: 8), + IconButton( + icon: const Icon(Icons.copy, size: 20), + tooltip: 'Copy Response', + onPressed: () { + Clipboard.setData(ClipboardData(text: message)); + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar(content: Text('Copied to clipboard')), + ); + }, + ), + ], + ], + ), ), ); } diff --git a/lib/dashbot/widgets/dashbot_widget.dart b/lib/dashbot/widgets/dashbot_widget.dart index 443d984a..f876df28 100644 --- a/lib/dashbot/widgets/dashbot_widget.dart +++ b/lib/dashbot/widgets/dashbot_widget.dart @@ -3,7 +3,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:apidash/dashbot/providers/dashbot_providers.dart'; import 'package:apidash/providers/providers.dart'; -import 'package:flutter/services.dart'; import 'chat_bubble.dart'; class DashBotWidget extends ConsumerStatefulWidget { @@ -106,28 +105,10 @@ class _DashBotWidgetState extends ConsumerState { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ const Text('DashBot', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)), - Row( - children: [ - IconButton( - icon: const Icon(Icons.copy), - tooltip: 'Copy Last Response', - onPressed: () { - final lastBotMessage = ref.read(chatMessagesProvider).lastWhere( - (msg) => msg['role'] == 'bot', - orElse: () => {'message': ''}, - )['message']; - Clipboard.setData(ClipboardData(text: lastBotMessage)); - ScaffoldMessenger.of(context).showSnackBar( - const SnackBar(content: Text('Copied to clipboard')), - ); - }, - ), - IconButton( - icon: const Icon(Icons.delete_sweep), - tooltip: 'Clear Chat', - onPressed: () => ref.read(chatMessagesProvider.notifier).clearMessages(), - ), - ], + IconButton( + icon: const Icon(Icons.delete_sweep), + tooltip: 'Clear Chat', + onPressed: () => ref.read(chatMessagesProvider.notifier).clearMessages(), ), ], );