Как можно сохранить положение прокрутки в CustomScrollView

У меня есть 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?

Я вижу это сообщение, но я не понимаю.


person Cyrus the Great    schedule 01.09.2020    source источник