safety checks and message fix
This commit is contained in:
parent
099725063f
commit
322acbd694
2 changed files with 9 additions and 5 deletions
|
|
@ -44,17 +44,18 @@ class RoomChatController extends AsyncNotifier<ChatController> {
|
||||||
|
|
||||||
ref.onDispose(
|
ref.onDispose(
|
||||||
ref.listen(NewEventsController.provider(roomId), (_, next) async {
|
ref.listen(NewEventsController.provider(roomId), (_, next) async {
|
||||||
|
final controller = await future;
|
||||||
for (final event in next) {
|
for (final event in next) {
|
||||||
if (event.type == "m.room.redaction") {
|
if (event.type == "m.room.redaction") {
|
||||||
final controller = await future;
|
final controller = await future;
|
||||||
final message = controller.messages.firstWhereOrNull(
|
final message = controller.messages.firstWhereOrNull(
|
||||||
(message) => message.id == event.content["redacts"],
|
(message) => message.id == event.content["redacts"],
|
||||||
);
|
);
|
||||||
if (message == null) return;
|
if (message == null || !ref.mounted) return;
|
||||||
|
|
||||||
await controller.removeMessage(message);
|
await controller.removeMessage(message);
|
||||||
} else {
|
} else {
|
||||||
final message = await ref.read(
|
final message = await ref.watch(
|
||||||
MessageController.provider(
|
MessageController.provider(
|
||||||
MessageConfig(event: event, includeEdits: true),
|
MessageConfig(event: event, includeEdits: true),
|
||||||
).future,
|
).future,
|
||||||
|
|
@ -64,7 +65,7 @@ class RoomChatController extends AsyncNotifier<ChatController> {
|
||||||
final oldMessage = controller.messages.firstWhereOrNull(
|
final oldMessage = controller.messages.firstWhereOrNull(
|
||||||
(element) => element.id == event.relatesTo,
|
(element) => element.id == event.relatesTo,
|
||||||
);
|
);
|
||||||
if (oldMessage == null || message == null) return;
|
if (oldMessage == null || message == null || !ref.mounted) return;
|
||||||
|
|
||||||
return await updateMessage(
|
return await updateMessage(
|
||||||
oldMessage,
|
oldMessage,
|
||||||
|
|
@ -84,8 +85,9 @@ class RoomChatController extends AsyncNotifier<ChatController> {
|
||||||
if (message != null &&
|
if (message != null &&
|
||||||
!controller.messages.any(
|
!controller.messages.any(
|
||||||
(oldMessage) => oldMessage.id == message.id,
|
(oldMessage) => oldMessage.id == message.id,
|
||||||
)) {
|
) &&
|
||||||
await insertMessage(message);
|
ref.mounted) {
|
||||||
|
await controller.insertMessage(message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
import "dart:developer";
|
||||||
import "dart:io";
|
import "dart:io";
|
||||||
import "package:fast_immutable_collections/fast_immutable_collections.dart";
|
import "package:fast_immutable_collections/fast_immutable_collections.dart";
|
||||||
import "package:flutter/foundation.dart";
|
import "package:flutter/foundation.dart";
|
||||||
|
|
@ -43,6 +44,7 @@ void showError(Object error, [StackTrace? stackTrace]) {
|
||||||
if (error.toString().contains("Invalid image data")) return;
|
if (error.toString().contains("Invalid image data")) return;
|
||||||
|
|
||||||
debugPrintStack(stackTrace: stackTrace, label: error.toString());
|
debugPrintStack(stackTrace: stackTrace, label: error.toString());
|
||||||
|
debugger();
|
||||||
if (navigatorKey.currentContext != null) {
|
if (navigatorKey.currentContext != null) {
|
||||||
Future.delayed(
|
Future.delayed(
|
||||||
Duration.zero,
|
Duration.zero,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue