У меня есть StatelessWidget
class MessagePage extends StatelessWidget {
MessageProvider provider;
ScrollController _scrollController = ScrollController();
MessagePage() {
_scrollController.addListener(() {
if (_scrollController.position.maxScrollExtent ==
_scrollController.position.pixels) {
if (!isLoading) {
isLoading = !isLoading;
provider.getList(id: provider.lastItemVisited);
}
}
});
}
и класс провайдера для получения данных из веб-сервиса, а затем отображения данных в пользовательском интерфейсе:
ChangeNotifierProvider<MessageProvider>(
create: (context) => provider,
child: Consumer<MessageProvider>(
builder: (context, value, child) {
if (value.state == ViewState.IDLE) {
return CustomScrollView(
controller: _scrollController,
slivers: <Widget>[
SliverPadding(
padding: const EdgeInsets.only(
left: 28.0, right: 28.0, bottom: 28.0, top: 30),
sliver: SliverList(
delegate: SliverChildListDelegate(
initItems(context, value.messageModels),
),
),
),
],
);
}
Когда пользователь прокручивает конец списка, я вызываю свои службы, и после получения результата я использую эти данные child: Consumer<MessageProvider>(
и отображаю в SliverList
.
Все хорошо, но вот проблема!!!
Когда я получаю новые данные, моя позиция в списке попадает в первый список? Как можно сохранить
scroll position
?
Я вижу это сообщение, но я не понимаю.