some fixes

This commit is contained in:
Henry Hiles 2025-12-24 18:25:33 -05:00
commit 99e19c3237
No known key found for this signature in database
3 changed files with 32 additions and 19 deletions

View file

@ -22,11 +22,12 @@ class RoomChatController extends AsyncNotifier<ChatController> {
if (event.type == EventTypes.Redaction) {
final controller = await future;
await controller.removeMessage(
controller.messages.firstWhere(
(message) => message.id == event.redacts,
),
final message = controller.messages.firstWhereOrNull(
(message) => message.id == event.redacts,
);
if (message == null) return;
await controller.removeMessage(message);
} else {
final message = await event.toMessage(includeEdits: true);
if (event.relationshipType == RelationshipTypes.edit) {

View file

@ -17,6 +17,8 @@ extension EventToMessage on Event {
? null
: await room.getEventById(replyId);
final sender =
await event.fetchSenderUser() ?? event.senderFromMemoryOrFallback;
final newContent = event.content["m.new_content"] as Map?;
final metadata = {
"formatted":
@ -26,9 +28,8 @@ extension EventToMessage on Event {
event.body,
"reply": await replyEvent?.toMessage(mustBeText: true),
"eventType": event.type,
"displayName":
event.senderFromMemoryOrFallback.displayName ??
event.senderFromMemoryOrFallback.id,
"avatarUrl": sender.avatarUrl.toString(),
"displayName": sender.displayName ?? sender.id,
"txnId": transactionId,
};
@ -107,7 +108,7 @@ extension EventToMessage on Event {
id: eventId,
authorId: senderId,
text:
"${event.senderFromMemoryOrFallback.displayName} ${switch (Membership.values.firstWhereOrNull((membership) => membership.name == event.content["membership"])) {
"${event.asUser.displayName ?? event.asUser.id} ${switch (Membership.values.firstWhereOrNull((membership) => membership.name == event.content["membership"])) {
Membership.invite => "was invited to",
Membership.join => "joined",
Membership.leave => "left",

View file

@ -2,7 +2,6 @@ import "dart:io";
import "package:flutter/material.dart";
import "package:flutter/services.dart";
import "package:flutter_chat_core/flutter_chat_core.dart";
import "package:flutter_chat_ui/flutter_chat_ui.dart";
import "package:flutter_hooks/flutter_hooks.dart";
import "package:fluttertagger/fluttertagger.dart";
import "package:hooks_riverpod/hooks_riverpod.dart";
@ -35,17 +34,22 @@ class ChatBox extends HookConsumerWidget {
Future<void> send() => ref
.watch(RoomChatController.provider(room).notifier)
.send(controller.value.text);
.send(controller.value.text, replyTo: replyToMessage);
final node = useFocusNode(
onKeyEvent: (_, event) {
if (event is KeyDownEvent &&
event.logicalKey == LogicalKeyboardKey.enter &&
!(Platform.isAndroid || Platform.isIOS) ^
HardwareKeyboard.instance.isShiftPressed) {
send();
return KeyEventResult.handled;
if (event is! KeyDownEvent || Platform.isAndroid || Platform.isIOS) {
if (event.logicalKey == LogicalKeyboardKey.enter &&
!HardwareKeyboard.instance.isShiftPressed) {
send();
return KeyEventResult.handled;
}
if (event.logicalKey == LogicalKeyboardKey.escape) {
onDismiss();
return KeyEventResult.handled;
}
}
return KeyEventResult.ignored;
},
);
@ -73,10 +77,17 @@ class ChatBox extends HookConsumerWidget {
spacing: 8,
children: [
SizedBox(width: 4),
Avatar(
userId: replyToMessage!.authorId,
AvatarOrHash(
ref
.watch(
AvatarController.provider(
replyToMessage!.metadata!["avatarUrl"],
),
)
.whenOrNull(data: (data) => data),
replyToMessage!.metadata!["displayName"].toString(),
headers: room.client.headers,
size: 16,
height: 16,
),
Text(
replyToMessage!.metadata?["displayName"] ??