我有一个Future<PostData>
列表,可用于创建预加载机制来应付类似火种的轻扫提要,但我遇到了一些问题。实际上,刷卡时,我会使用List<Future<PostData>>
中已经加载的下一个帖子重建卡堆栈。
事实是,即使我的未来已经完成,我的未来构建器中也会得到ConnectionState.waiting
的单个帧,这会导致UI抖动。
此限制记录在文档中:
此操作的副作用是为
FutureBuilder
提供新的但已经完成的将来将导致ConnectionState.waiting
状态下的单个帧。这是因为无法同步确定Future已经完成。
我想知道,有没有办法避免这个问题?
干杯!
答案 0 :(得分:0)
不确定是否可以使用FutureBuilder
来实现。
考虑创建一个将处理网络,缓存等的类。
然后用ValueListenableBuilder
听其变化。
类似这样的东西:
class PostsRetriever{
//handles loading, caching of posts
}
class PostsWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
final postsRetriever = Provider.of<PostsRetriever>(context);
return ValueListenableBuilder<PostData>(
valueListenable: postsRetriever.currentPost,
builder: (context, currentPost, _) {
//some ui that will draw currentPost'
return RawMaterialButton(onPressed: postsRetriever.loadNext());
};
}
您将需要provider库。