我有一个 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
?
我看到这个帖子,但我不明白。