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来避免此问题