Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
1d6a98f165 |
1 changed files with 15 additions and 25 deletions
|
|
@ -87,14 +87,7 @@ class RoomChat extends HookConsumerWidget {
|
||||||
);
|
);
|
||||||
|
|
||||||
Future<void> jumpToId(String eventId) async {
|
Future<void> jumpToId(String eventId) async {
|
||||||
var events = ref.read(controllerProvider).value;
|
final events = controllerData.value;
|
||||||
while (events?.any((event) => event.eventId == eventId) != true) {
|
|
||||||
final room = ref.read(RoomsController.provider)[roomId];
|
|
||||||
if (room == null || !room.hasMore) return;
|
|
||||||
await notifier.loadOlder();
|
|
||||||
await WidgetsBinding.instance.endOfFrame;
|
|
||||||
events = ref.read(controllerProvider).value;
|
|
||||||
}
|
|
||||||
if (events == null || !scrollController.hasClients) return;
|
if (events == null || !scrollController.hasClients) return;
|
||||||
|
|
||||||
final sourceIndex = events.indexWhere(
|
final sourceIndex = events.indexWhere(
|
||||||
|
|
@ -126,12 +119,6 @@ class RoomChat extends HookConsumerWidget {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> loadOlder() async {
|
|
||||||
if (controllerData case AsyncData(value: final _?)) {
|
|
||||||
await notifier.loadOlder();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
final composerNode = useFocusNode(
|
final composerNode = useFocusNode(
|
||||||
onKeyEvent: (_, event) {
|
onKeyEvent: (_, event) {
|
||||||
if (event is KeyDownEvent && event.logicalKey == .escape) {
|
if (event is KeyDownEvent && event.logicalKey == .escape) {
|
||||||
|
|
@ -429,26 +416,29 @@ class RoomChat extends HookConsumerWidget {
|
||||||
final historyLength = boundaryIndex + 1;
|
final historyLength = boundaryIndex + 1;
|
||||||
final liveLength = value.length - historyLength;
|
final liveLength = value.length - historyLength;
|
||||||
|
|
||||||
|
int? eventIndexForKey(Key key) {
|
||||||
|
if (key is! ValueKey<String>) return null;
|
||||||
|
final index = value.indexWhere(
|
||||||
|
(event) => event.eventId == key.value,
|
||||||
|
);
|
||||||
|
return index < 0 ? null : index;
|
||||||
|
}
|
||||||
|
|
||||||
int? historyChildIndex(Key key) {
|
int? historyChildIndex(Key key) {
|
||||||
if (key == const ValueKey("history-loader")) {
|
if (key == const ValueKey("history-loader")) {
|
||||||
return historyLength;
|
return historyLength;
|
||||||
}
|
}
|
||||||
if (key is! ValueKey<String>) return null;
|
final eventIndex = eventIndexForKey(key);
|
||||||
final eventIndex = value.indexWhere(
|
return eventIndex == null ||
|
||||||
(event) => event.eventId == key.value,
|
|
||||||
);
|
|
||||||
return eventIndex < 0 ||
|
|
||||||
eventIndex >= historyLength
|
eventIndex >= historyLength
|
||||||
? null
|
? null
|
||||||
: historyLength - eventIndex - 1;
|
: historyLength - eventIndex - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int? liveChildIndex(Key key) {
|
int? liveChildIndex(Key key) {
|
||||||
if (key is! ValueKey<String>) return null;
|
final eventIndex = eventIndexForKey(key);
|
||||||
final eventIndex = value.indexWhere(
|
return eventIndex == null ||
|
||||||
(event) => event.eventId == key.value,
|
eventIndex < historyLength
|
||||||
);
|
|
||||||
return eventIndex < historyLength
|
|
||||||
? null
|
? null
|
||||||
: eventIndex - historyLength;
|
: eventIndex - historyLength;
|
||||||
}
|
}
|
||||||
|
|
@ -508,7 +498,7 @@ class RoomChat extends HookConsumerWidget {
|
||||||
hasMore: hasMore,
|
hasMore: hasMore,
|
||||||
isLoading:
|
isLoading:
|
||||||
controllerData is AsyncLoading,
|
controllerData is AsyncLoading,
|
||||||
onLoad: loadOlder,
|
onLoad: notifier.loadOlder,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
final event =
|
final event =
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue