Add load more button
This commit is contained in:
parent
2451555479
commit
228ff1051f
2 changed files with 21 additions and 10 deletions
|
|
@ -6,7 +6,6 @@ import "package:flutter_riverpod/flutter_riverpod.dart";
|
|||
import "package:fluttertagger/fluttertagger.dart";
|
||||
import "package:nexus/controllers/client_controller.dart";
|
||||
import "package:nexus/controllers/rooms_controller.dart";
|
||||
import "package:nexus/models/content/message.dart";
|
||||
import "package:nexus/models/content/reaction.dart";
|
||||
import "package:nexus/models/event.dart";
|
||||
import "package:nexus/models/requests/get_related_events_request.dart";
|
||||
|
|
@ -38,14 +37,9 @@ class RoomChatController extends AsyncNotifier<IList<Event>> {
|
|||
await ref.read(RoomsController.provider.notifier).addState(roomId, state);
|
||||
}
|
||||
|
||||
// While there are under 5 messages or under 20 events, try to load
|
||||
// more messages until there's no more or the conditions are met.
|
||||
if (room.hasMore &&
|
||||
(room.events.values
|
||||
.where((event) => event.content is MessageContent)
|
||||
.length <
|
||||
5 ||
|
||||
room.timeline.length < 20)) {
|
||||
// While there are under 20 events, try to load more
|
||||
// until there's no more or the conditions are met.
|
||||
if (room.hasMore && room.timeline.length < 20) {
|
||||
loadOlder();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -319,6 +319,8 @@ class RoomChat extends HookConsumerWidget {
|
|||
].toIList();
|
||||
}
|
||||
|
||||
final controllerData = ref.watch(controllerProvider);
|
||||
|
||||
return Scaffold(
|
||||
appBar: RoomAppbar(
|
||||
roomId: roomId,
|
||||
|
|
@ -337,7 +339,7 @@ class RoomChat extends HookConsumerWidget {
|
|||
Positioned.fill(
|
||||
child: Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 12),
|
||||
child: switch (ref.watch(controllerProvider)) {
|
||||
child: switch (controllerData) {
|
||||
AsyncData(:final value) ||
|
||||
AsyncLoading(:final value?) => CustomScrollView(
|
||||
reverse: true,
|
||||
|
|
@ -346,6 +348,7 @@ class RoomChat extends HookConsumerWidget {
|
|||
SliverPadding(
|
||||
padding: EdgeInsetsGeometry.only(bottom: 64),
|
||||
),
|
||||
|
||||
SuperSliverList.builder(
|
||||
listController: listController.value,
|
||||
itemCount: value.length,
|
||||
|
|
@ -391,6 +394,20 @@ class RoomChat extends HookConsumerWidget {
|
|||
);
|
||||
},
|
||||
),
|
||||
|
||||
SliverToBoxAdapter(
|
||||
child: Padding(
|
||||
padding: EdgeInsets.only(bottom: 36),
|
||||
child: Center(
|
||||
child: controllerData is AsyncLoading
|
||||
? Loading()
|
||||
: ElevatedButton(
|
||||
onPressed: notifier.loadOlder,
|
||||
child: Text("Load More"),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
AsyncLoading() => Loading(),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue