3

我有一个 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);
        }
      }
    });
  }

和一个提供者类,用于从 web 服务获取数据,然后在 ui 中显示数据:

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

我看到这个帖子,但我不明白。

4

0 回答 0