diff --git a/lib/widgets/room_chat.dart b/lib/widgets/room_chat.dart index 97afca2..5926844 100644 --- a/lib/widgets/room_chat.dart +++ b/lib/widgets/room_chat.dart @@ -126,12 +126,6 @@ class RoomChat extends HookConsumerWidget { }); } - Future loadOlder() async { - if (controllerData case AsyncData(value: final _?)) { - await notifier.loadOlder(); - } - } - final composerNode = useFocusNode( onKeyEvent: (_, event) { if (event is KeyDownEvent && event.logicalKey == .escape) { @@ -429,26 +423,29 @@ class RoomChat extends HookConsumerWidget { final historyLength = boundaryIndex + 1; final liveLength = value.length - historyLength; + int? eventIndexForKey(Key key) { + if (key is! ValueKey) return null; + final index = value.indexWhere( + (event) => event.eventId == key.value, + ); + return index < 0 ? null : index; + } + int? historyChildIndex(Key key) { if (key == const ValueKey("history-loader")) { return historyLength; } - if (key is! ValueKey) return null; - final eventIndex = value.indexWhere( - (event) => event.eventId == key.value, - ); - return eventIndex < 0 || + final eventIndex = eventIndexForKey(key); + return eventIndex == null || eventIndex >= historyLength ? null : historyLength - eventIndex - 1; } int? liveChildIndex(Key key) { - if (key is! ValueKey) return null; - final eventIndex = value.indexWhere( - (event) => event.eventId == key.value, - ); - return eventIndex < historyLength + final eventIndex = eventIndexForKey(key); + return eventIndex == null || + eventIndex < historyLength ? null : eventIndex - historyLength; } @@ -508,7 +505,7 @@ class RoomChat extends HookConsumerWidget { hasMore: hasMore, isLoading: controllerData is AsyncLoading, - onLoad: loadOlder, + onLoad: notifier.loadOlder, ); } final event =