mirror of
https://gitlab.com/famedly/fluffychat.git
synced 2024-12-19 03:12:36 +01:00
refactor: More reliable request history/future timeline mechanism
This commit is contained in:
parent
a1468c92c8
commit
f19bbcd010
@ -204,6 +204,7 @@ class ChatController extends State<ChatPageWithRoom> {
|
|||||||
|
|
||||||
void requestHistory() async {
|
void requestHistory() async {
|
||||||
if (!timeline!.canRequestHistory) return;
|
if (!timeline!.canRequestHistory) return;
|
||||||
|
Logs().v('Requesting history...');
|
||||||
try {
|
try {
|
||||||
await timeline!.requestHistory(historyCount: _loadHistoryCount);
|
await timeline!.requestHistory(historyCount: _loadHistoryCount);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
@ -222,6 +223,7 @@ class ChatController extends State<ChatPageWithRoom> {
|
|||||||
final timeline = this.timeline;
|
final timeline = this.timeline;
|
||||||
if (timeline == null) return;
|
if (timeline == null) return;
|
||||||
if (!timeline.canRequestFuture) return;
|
if (!timeline.canRequestFuture) return;
|
||||||
|
Logs().v('Requesting future...');
|
||||||
try {
|
try {
|
||||||
final mostRecentEventId = timeline.events.first.eventId;
|
final mostRecentEventId = timeline.events.first.eventId;
|
||||||
await timeline.requestFuture(historyCount: _loadHistoryCount);
|
await timeline.requestFuture(historyCount: _loadHistoryCount);
|
||||||
@ -244,12 +246,6 @@ class ChatController extends State<ChatPageWithRoom> {
|
|||||||
}
|
}
|
||||||
setReadMarker();
|
setReadMarker();
|
||||||
if (!scrollController.hasClients) return;
|
if (!scrollController.hasClients) return;
|
||||||
if (scrollController.position.pixels ==
|
|
||||||
scrollController.position.maxScrollExtent) {
|
|
||||||
requestHistory();
|
|
||||||
} else if (scrollController.position.pixels == 0) {
|
|
||||||
requestFuture();
|
|
||||||
}
|
|
||||||
if (timeline?.allowNewEvent == false ||
|
if (timeline?.allowNewEvent == false ||
|
||||||
scrollController.position.pixels > 0 && _scrolledUp == false) {
|
scrollController.position.pixels > 0 && _scrolledUp == false) {
|
||||||
setState(() => _scrolledUp = true);
|
setState(() => _scrolledUp = true);
|
||||||
|
@ -53,12 +53,19 @@ class ChatEventList extends StatelessWidget {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (controller.timeline!.canRequestFuture) {
|
if (controller.timeline!.canRequestFuture) {
|
||||||
|
return Builder(
|
||||||
|
builder: (context) {
|
||||||
|
WidgetsBinding.instance.addPostFrameCallback(
|
||||||
|
(_) => controller.requestFuture(),
|
||||||
|
);
|
||||||
return Center(
|
return Center(
|
||||||
child: IconButton(
|
child: IconButton(
|
||||||
onPressed: controller.requestFuture,
|
onPressed: controller.requestFuture,
|
||||||
icon: const Icon(Icons.refresh_outlined),
|
icon: const Icon(Icons.refresh_outlined),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
return Column(
|
return Column(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
@ -77,12 +84,19 @@ class ChatEventList extends StatelessWidget {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (controller.timeline!.canRequestHistory) {
|
if (controller.timeline!.canRequestHistory) {
|
||||||
|
return Builder(
|
||||||
|
builder: (context) {
|
||||||
|
WidgetsBinding.instance.addPostFrameCallback(
|
||||||
|
(_) => controller.requestHistory(),
|
||||||
|
);
|
||||||
return Center(
|
return Center(
|
||||||
child: IconButton(
|
child: IconButton(
|
||||||
onPressed: controller.requestHistory,
|
onPressed: controller.requestHistory,
|
||||||
icon: const Icon(Icons.refresh_outlined),
|
icon: const Icon(Icons.refresh_outlined),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
return const SizedBox.shrink();
|
return const SizedBox.shrink();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user