将已经完成的future传递给FutureBuilder时避免单帧等待状态

时间:2019-10-18 13:03:19

标签: flutter dart dart-async

我有一个Future<PostData>列表,可用于创建预加载机制来应付类似火种的轻扫提要,但我遇到了一些问题。实际上,刷卡时,我会使用List<Future<PostData>>中已经加载的下一个帖子重建卡堆栈。

事实是,即使我的未来已经完成,我的未来构建器中也会得到ConnectionState.waiting的单个帧,这会导致UI抖动。

此限制记录在文档中:

  

此操作的副作用是为FutureBuilder提供新的但已经完成的将来将导致ConnectionState.waiting状态下的单个帧。这是因为无法同步确定Future已经完成。

我想知道,有没有办法避免这个问题?

干杯!

1 个答案:

答案 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库。