diff --git a/.github/workflows/versions.env b/.github/workflows/versions.env index 3cad68ef4..1d646f732 100644 --- a/.github/workflows/versions.env +++ b/.github/workflows/versions.env @@ -1,2 +1,2 @@ -FLUTTER_VERSION=3.32.0 +FLUTTER_VERSION=3.32.1 JAVA_VERSION=17 diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index 1ddf8cc6e..421836958 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -1780,14 +1780,6 @@ class ChatController extends State if (choice == 'location') { sendLocationAction(); } - if (choice == 'checklist') { - if (sendController.text.isEmpty) { - sendController.text = '- [ ] '; - } else { - sendController.text += '\n- [ ] '; - } - 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 01eafc874..a598d9b11 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/pages/chat/events/html_message.dart b/lib/pages/chat/events/html_message.dart index e90727b7b..d05374dc3 100644 --- a/lib/pages/chat/events/html_message.dart +++ b/lib/pages/chat/events/html_message.dart @@ -1,3 +1,4 @@ +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:collection/collection.dart'; @@ -508,12 +509,11 @@ class HtmlMessage extends StatelessWidget { child: Padding( padding: const EdgeInsets.symmetric(horizontal: 8.0), child: SizedBox.square( - dimension: fontSize, - child: Checkbox.adaptive( + dimension: fontSize + 2, + child: CupertinoCheckbox( checkColor: textColor, side: BorderSide(color: textColor), activeColor: textColor.withAlpha(64), - visualDensity: VisualDensity.compact, value: staticallyChecked || checkedByReaction != null, onChanged: eventId == null || 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: () {