make mention optional for replies

This commit is contained in:
Henry Hiles 2026-03-07 18:16:47 -05:00
commit eaebea4d44
No known key found for this signature in database
4 changed files with 26 additions and 2 deletions

View file

@ -52,7 +52,7 @@ A simple and user-friendly Matrix client made with Flutter and the Matrix Dart S
- [x] Plain text - [x] Plain text
- [x] HTML/Markdown - [x] HTML/Markdown
- [x] Replies - [x] Replies
- [ ] Choose ping on/off - [x] Choose ping on/off
- [ ] Attachments - [ ] Attachments
- [ ] Commands with [MSC4391](https://github.com/matrix-org/matrix-spec-proposals/pull/4391) - [ ] Commands with [MSC4391](https://github.com/matrix-org/matrix-spec-proposals/pull/4391)
- [x] Mentions - [x] Mentions

View file

@ -230,6 +230,7 @@ class RoomChatController extends AsyncNotifier<ChatController> {
Future<void> send( Future<void> send(
String message, { String message, {
bool shouldMention = true,
required Iterable<Tag> tags, required Iterable<Tag> tags,
required RelationType relationType, required RelationType relationType,
Message? relation, Message? relation,
@ -252,7 +253,9 @@ class RoomChatController extends AsyncNotifier<ChatController> {
roomId: roomId, roomId: roomId,
mentions: Mentions( mentions: Mentions(
userIds: [ userIds: [
if (relation != null && relationType == RelationType.reply) if (shouldMention == true &&
relation != null &&
relationType == RelationType.reply)
relation.authorId, relation.authorId,
].toIList(), ].toIList(),
room: taggedMessage.contains("@room"), room: taggedMessage.contains("@room"),

View file

@ -29,6 +29,7 @@ class ChatBox extends HookConsumerWidget {
final theme = Theme.of(context); final theme = Theme.of(context);
final controller = useRef(FlutterTaggerController()); final controller = useRef(FlutterTaggerController());
final triggerCharacter = useState(""); final triggerCharacter = useState("");
final shouldMention = useState(true);
final query = useState(""); final query = useState("");
if (relationType == RelationType.edit && if (relationType == RelationType.edit &&
@ -43,6 +44,7 @@ class ChatBox extends HookConsumerWidget {
.watch(RoomChatController.provider(room.metadata!.id).notifier) .watch(RoomChatController.provider(room.metadata!.id).notifier)
.send( .send(
controller.value.formattedText, controller.value.formattedText,
shouldMention: shouldMention.value,
relation: relatedMessage, relation: relatedMessage,
relationType: relationType, relationType: relationType,
tags: controller.value.tags, tags: controller.value.tags,
@ -84,6 +86,9 @@ class ChatBox extends HookConsumerWidget {
child: Column( child: Column(
children: [ children: [
RelationPreview( RelationPreview(
shouldMention: shouldMention.value,
toggleShouldMention: () =>
shouldMention.value = !shouldMention.value,
relatedMessage: relatedMessage, relatedMessage: relatedMessage,
relationType: relationType, relationType: relationType,
onDismiss: onDismiss, onDismiss: onDismiss,

View file

@ -8,10 +8,14 @@ class RelationPreview extends ConsumerWidget {
final Message? relatedMessage; final Message? relatedMessage;
final RelationType relationType; final RelationType relationType;
final VoidCallback onDismiss; final VoidCallback onDismiss;
final bool shouldMention;
final VoidCallback toggleShouldMention;
const RelationPreview({ const RelationPreview({
required this.relatedMessage, required this.relatedMessage,
required this.relationType, required this.relationType,
required this.onDismiss, required this.onDismiss,
required this.shouldMention,
required this.toggleShouldMention,
super.key, super.key,
}); });
@ -55,6 +59,18 @@ class RelationPreview extends ConsumerWidget {
maxLines: 1, maxLines: 1,
), ),
), ),
if (relationType == RelationType.reply)
TextButton(
onPressed: toggleShouldMention,
child: Text(
shouldMention ? "@On" : "@Off",
style: TextStyle(
fontWeight: FontWeight.w900,
color: shouldMention ? null : Theme.of(context).disabledColor,
),
),
),
IconButton( IconButton(
tooltip: tooltip:
"Cancel ${relationType == RelationType.edit ? "edit" : "reply"}", "Cancel ${relationType == RelationType.edit ? "edit" : "reply"}",