From da64ed15066ddcea664df26b50e6dea75722bb7f Mon Sep 17 00:00:00 2001 From: Gabby Gurdin Date: Sat, 10 Feb 2024 14:41:18 -0500 Subject: [PATCH] fix to update state of defintion button in toolbar --- .../widgets/chat/message_text_selection.dart | 7 ++++--- lib/pangea/widgets/chat/message_toolbar.dart | 15 +++++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/lib/pangea/widgets/chat/message_text_selection.dart b/lib/pangea/widgets/chat/message_text_selection.dart index 16982d979..b41d62cbe 100644 --- a/lib/pangea/widgets/chat/message_text_selection.dart +++ b/lib/pangea/widgets/chat/message_text_selection.dart @@ -1,12 +1,13 @@ import 'dart:async'; import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; class MessageTextSelection { String? selectedText; String messageText = ""; + final StreamController selectionStream = + StreamController.broadcast(); void setMessageText(String text) { messageText = text; @@ -21,7 +22,7 @@ class MessageTextSelection { if (BrowserContextMenu.enabled && kIsWeb) { BrowserContextMenu.disableContextMenu(); } - // selectionStream.add(selectedText); + selectionStream.add(selectedText); } void clearTextSelection() { @@ -29,6 +30,6 @@ class MessageTextSelection { if (kIsWeb && !BrowserContextMenu.enabled) { BrowserContextMenu.enableContextMenu(); } - // selectionStream.add(selectedText); + selectionStream.add(selectedText); } } diff --git a/lib/pangea/widgets/chat/message_toolbar.dart b/lib/pangea/widgets/chat/message_toolbar.dart index 2c7409866..18072d468 100644 --- a/lib/pangea/widgets/chat/message_toolbar.dart +++ b/lib/pangea/widgets/chat/message_toolbar.dart @@ -141,6 +141,7 @@ class MessageToolbar extends StatefulWidget { class MessageToolbarState extends State { Widget? child; MessageMode? _currentMode; + bool hasSelectedText = false; late StreamSubscription _selectionStream; late StreamSubscription _toolbarModeStream; @@ -233,9 +234,23 @@ class MessageToolbarState extends State { @override void initState() { super.initState(); + if (widget.textSelection.selectedText != null) { + hasSelectedText = true; + } + _toolbarModeStream = widget.toolbarModeStream.stream.listen((mode) { updateMode(mode); }); + + _selectionStream = + widget.textSelection.selectionStream.stream.listen((value) { + final bool shouldSetState = + value != null && !hasSelectedText || value == null && hasSelectedText; + hasSelectedText = value != null; + if (shouldSetState) { + setState(() {}); + } + }); } @override