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) { if (event.type == EventTypes.Redaction) {
final controller = await future; final controller = await future;
await controller.removeMessage( final message = controller.messages.firstWhereOrNull(
controller.messages.firstWhere(
(message) => message.id == event.redacts, (message) => message.id == event.redacts,
),
); );
if (message == null) return;
await controller.removeMessage(message);
} else { } else {
final message = await event.toMessage(includeEdits: true); final message = await event.toMessage(includeEdits: true);
if (event.relationshipType == RelationshipTypes.edit) { if (event.relationshipType == RelationshipTypes.edit) {

View file

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

View file

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