Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 将已完成的future传递给FutureBuilder时,避免单帧等待状态_Flutter_Dart_Dart Async - Fatal编程技术网

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

Flutter 将已完成的future传递给FutureBuilder时,避免单帧等待状态,flutter,dart,dart-async,Flutter,Dart,Dart Async,我有一个Future列表,我用它来为类似tinder的刷卡提要消费创建预加载机制,但我遇到了一些问题。事实上,当刷卡时,我使用已加载到我的列表中的下一个帖子来重建卡堆栈 问题是,即使我的未来已经完成,我也会得到一帧ConnectionState.waiting在我的未来构建器中,使UI抖动 此限制记录在文件中: 这样做的一个副作用是,为FutureBuilder提供一个新的但已经完成的未来将导致一个帧处于ConnectionState.waiting状态。这是因为无法同步确定未来是否已经完成 我

我有一个
Future
列表,我用它来为类似tinder的刷卡提要消费创建预加载机制,但我遇到了一些问题。事实上,当刷卡时,我使用已加载到我的
列表中的下一个帖子来重建卡堆栈

问题是,即使我的未来已经完成,我也会得到一帧
ConnectionState.waiting
在我的未来构建器中,使UI抖动

此限制记录在文件中:

这样做的一个副作用是,为
FutureBuilder
提供一个新的但已经完成的未来将导致一个帧处于
ConnectionState.waiting
状态。这是因为无法同步确定未来是否已经完成

我在想,有没有办法避免这个问题


干杯

不确定使用
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());
  };
}
class PostsRetriever{
//处理帖子的加载、缓存和删除
}
类PostsWidget扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
final postsRetriever=Provider.of(上下文);
返回值ListenableBuilder(
valueListenable:postsRetriever.currentPost,
生成器:(上下文、currentPost、389;){
//将绘制currentPost的某些ui
返回RawMaterialButton(按下:postsRetriever.loadNext());
};
}

您需要库。

在flutter中是否有类似于完成未来的Completer类的东西。不知道这是否有帮助you@MarkusHeinDart中有一个completer类,但我不确定在这种情况下您想如何使用它您不能使用
Future
+
FutureBuilder
。至少不能以干净的方式使用。请考虑r切换到
ValueListenable
开始我将通过流从一个组发送
列表
。这意味着将其转换为
列表
,通过流发送该列表,并在从组中准备好值时更新这些值。您可以发布一些方法的代码吗?以便查看您在c中可以做些什么请使用ase来避免此问题