From 5fb882955c6cf9a63eaa325aafa03904b631960f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Ku=C3=9Fowski?= Date: Sun, 1 Jun 2025 11:31:09 +0200 Subject: [PATCH] chore: Follow up create check list UX --- lib/pages/chat/chat.dart | 9 -------- lib/pages/chat/chat_input_row.dart | 12 ---------- lib/utils/markdown_context_builder.dart | 29 +++++++++++++++++++++++++ 3 files changed, 29 insertions(+), 21 deletions(-) diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index b312429d4..e5e741fc9 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -1186,15 +1186,6 @@ class ChatController extends State if (choice == 'location') { sendLocationAction(); } - if (choice == 'checklist') { - if (sendController.text.isEmpty) { - sendController.text = '- [ ] '; - } else { - sendController.text += '\n- [ ] '; - } - onInputBarChanged(sendController.text); - inputFocus.requestFocus(); - } } unpinEvent(String eventId) async { diff --git a/lib/pages/chat/chat_input_row.dart b/lib/pages/chat/chat_input_row.dart index f5464f27c..6a673bded 100644 --- a/lib/pages/chat/chat_input_row.dart +++ b/lib/pages/chat/chat_input_row.dart @@ -124,18 +124,6 @@ class ChatInputRow extends StatelessWidget { onSelected: controller.onAddPopupMenuButtonSelected, itemBuilder: (BuildContext context) => >[ - PopupMenuItem( - value: 'checklist', - child: ListTile( - leading: CircleAvatar( - backgroundColor: theme.colorScheme.onPrimaryContainer, - foregroundColor: theme.colorScheme.primaryContainer, - child: const Icon(Icons.check_circle_outlined), - ), - title: Text(L10n.of(context).checkList), - contentPadding: const EdgeInsets.all(0), - ), - ), if (PlatformInfos.isMobile) PopupMenuItem( value: 'location', diff --git a/lib/utils/markdown_context_builder.dart b/lib/utils/markdown_context_builder.dart index ac6348553..9404d3504 100644 --- a/lib/utils/markdown_context_builder.dart +++ b/lib/utils/markdown_context_builder.dart @@ -54,6 +54,35 @@ Widget markdownContextBuilder( ContextMenuController.removeAny(); }, ), + ContextMenuButtonItem( + label: l10n.checkList, + onPressed: () { + final text = controller.text; + final selection = controller.selection; + + var start = selection.textBefore(text).lastIndexOf('\n'); + if (start == -1) start = 0; + final end = selection.end; + + final fullLineSelection = + TextSelection(baseOffset: start, extentOffset: end); + + const checkBox = '- [ ]'; + + final replacedRange = fullLineSelection + .textInside(text) + .split('\n') + .map( + (line) => line.startsWith(checkBox) || line.isEmpty + ? line + : '$checkBox $line', + ) + .join('\n'); + controller.text = + controller.text.replaceRange(start, end, replacedRange); + ContextMenuController.removeAny(); + }, + ), ContextMenuButtonItem( label: l10n.boldText, onPressed: () {