make loadOlder properly guard
This commit is contained in:
parent
62fe37c6ae
commit
43d2e94d62
2 changed files with 38 additions and 31 deletions
|
|
@ -75,12 +75,13 @@ class RoomChatController extends AsyncNotifier<IList<Event>?> {
|
|||
);
|
||||
|
||||
Future<bool> loadOlder() async {
|
||||
state = AsyncLoading();
|
||||
final timelineKeys = ref
|
||||
.read(RoomsController.provider.select((value) => value[roomId]))
|
||||
?.timeline
|
||||
.keys;
|
||||
final response = await ref
|
||||
.watch(ClientController.provider.notifier)
|
||||
.read(ClientController.provider.notifier)
|
||||
.paginate(
|
||||
.new(
|
||||
roomId: roomId,
|
||||
|
|
@ -90,8 +91,11 @@ class RoomChatController extends AsyncNotifier<IList<Event>?> {
|
|||
),
|
||||
);
|
||||
|
||||
if (response.events.isEmpty) {
|
||||
state = .data(state.value);
|
||||
} else {
|
||||
ref
|
||||
.watch(RoomsController.provider.notifier)
|
||||
.read(RoomsController.provider.notifier)
|
||||
.update(
|
||||
IMap({
|
||||
roomId: Room(
|
||||
|
|
@ -110,6 +114,7 @@ class RoomChatController extends AsyncNotifier<IList<Event>?> {
|
|||
}),
|
||||
.new(),
|
||||
);
|
||||
}
|
||||
|
||||
return response.hasMore;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -80,6 +80,7 @@ class RoomChat extends HookConsumerWidget {
|
|||
final controllerData = ref.watch(controllerProvider);
|
||||
|
||||
final topEventBeforeLoad = useState<String?>(null);
|
||||
final hasMore = useState<bool>(true);
|
||||
|
||||
Future<void> jumpToId(String eventId) async {
|
||||
final index = controllerData.value?.indexWhere(
|
||||
|
|
@ -105,7 +106,7 @@ class RoomChat extends HookConsumerWidget {
|
|||
Future<void> loadOlder() async {
|
||||
if (controllerData case AsyncData(:final value?)) {
|
||||
topEventBeforeLoad.value = value.firstOrNull?.eventId;
|
||||
await notifier.loadOlder();
|
||||
hasMore.value = await notifier.loadOlder();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -470,6 +471,7 @@ class RoomChat extends HookConsumerWidget {
|
|||
ScrollViewKeyboardDismissBehavior.onDrag,
|
||||
controller: scrollController,
|
||||
slivers: [
|
||||
if (hasMore.value)
|
||||
SliverToBoxAdapter(
|
||||
child: Padding(
|
||||
padding: .symmetric(vertical: 36),
|
||||
|
|
|
|||
Loading…
Reference in a new issue