From 04edb9247af066edee6c08ae6646acc50373cf7c Mon Sep 17 00:00:00 2001 From: Rongjian Zhang Date: Sun, 10 Mar 2019 17:18:38 +0800 Subject: [PATCH] fix: items not fill in list view --- lib/scaffolds/list.dart | 33 +++++++++++++++++++++++---------- lib/screens/news.dart | 2 +- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/lib/scaffolds/list.dart b/lib/scaffolds/list.dart index 19c2b17..f2abea7 100644 --- a/lib/scaffolds/list.dart +++ b/lib/scaffolds/list.dart @@ -49,15 +49,7 @@ class _ListScaffoldState extends State> { void initState() { super.initState(); _refresh(); - _controller.addListener(() { - if (_controller.offset + 100 > _controller.position.maxScrollExtent && - !_controller.position.outOfRange && - !loading && - !loadingMore && - hasMore) { - _loadMore(); - } - }); + _controller.addListener(onScroll); } @override @@ -66,8 +58,27 @@ class _ListScaffoldState extends State> { super.dispose(); } + void onScroll() { + // print(_controller.position.maxScrollExtent - _controller.offset); + if (_controller.position.maxScrollExtent - _controller.offset < 100 && + !_controller.position.outOfRange && + !loading && + !loadingMore && + hasMore) { + _loadMore(); + } + } + + // FIXME: if items not enough, fetch next page + // This should be triggered after build + void _makeSureItemsFill() { + Future.delayed(Duration(milliseconds: 300)).then((_) { + onScroll(); + }); + } + Future _refresh({bool force = false}) async { - print('list scaffold refresh'); + // print('list scaffold refresh'); setState(() { error = ''; loading = true; @@ -88,6 +99,7 @@ class _ListScaffoldState extends State> { setState(() { loading = false; }); + _makeSureItemsFill(); } } } @@ -110,6 +122,7 @@ class _ListScaffoldState extends State> { setState(() { loadingMore = false; }); + _makeSureItemsFill(); } } } diff --git a/lib/screens/news.dart b/lib/screens/news.dart index 957f70c..ad580fa 100644 --- a/lib/screens/news.dart +++ b/lib/screens/news.dart @@ -28,7 +28,7 @@ class NewsScreenState extends State { var login = settings.activeLogin; List data = await settings.getWithCredentials( '/users/$login/received_events?page=$page&per_page=$pageSize'); - print(data.length); + // print(data.length); var hasMore = data.length == pageSize; var events = data .map((item) => EventPayload.fromJson(item))