forked from Henry-Hiles/nexus
some fixes
This commit is contained in:
parent
11a946e6ea
commit
99e19c3237
3 changed files with 32 additions and 19 deletions
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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",
|
||||||
|
|
|
||||||
|
|
@ -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"] ??
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue