make loadOlder properly guard

This commit is contained in:
Henry Hiles 2026-08-11 10:39:45 -04:00
commit 43d2e94d62
Signed by: Henry-Hiles
SSH key fingerprint: SHA256:VKQUdS31Q90KvX7EkKMHMBpUspcmItAh86a+v7PGiIs
2 changed files with 38 additions and 31 deletions

View file

@ -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,19 +471,20 @@ class RoomChat extends HookConsumerWidget {
ScrollViewKeyboardDismissBehavior.onDrag,
controller: scrollController,
slivers: [
SliverToBoxAdapter(
child: Padding(
padding: .symmetric(vertical: 36),
child: Center(
child: ElevatedButton(
onPressed: controllerData is AsyncData
? loadOlder
: null,
child: Text("Load More"),
if (hasMore.value)
SliverToBoxAdapter(
child: Padding(
padding: .symmetric(vertical: 36),
child: Center(
child: ElevatedButton(
onPressed: controllerData is AsyncData
? loadOlder
: null,
child: Text("Load More"),
),
),
),
),
),
SuperSliverList.builder(
listController: listController.value,