Flutter 刷新按钮的正确实现
这似乎是一个简单的问题(也许是),但我对颤振还不熟悉,我没有找到实现此功能的正确方法 我在Flutter 刷新按钮的正确实现,flutter,Flutter,这似乎是一个简单的问题(也许是),但我对颤振还不熟悉,我没有找到实现此功能的正确方法 我在CupertinoPageScaffold中有一个有状态的小部件。 脚手架位于一个CupertinaVigationBar内,该栏有一个CupertinaButton“刷新”按钮 小部件具有FutureBuilder异步构建内容 通过按下这个按钮,我想刷新脚手架内小部件的状态 该按钮当然具有onPressed()闭包,但是我不理解该按钮如何与小部件的状态进行交互(事实上,setState()只应在小部件的状
CupertinoPageScaffold
中有一个有状态的小部件。
脚手架位于一个CupertinaVigationBar
内,该栏有一个CupertinaButton
“刷新”按钮
小部件具有FutureBuilder
异步构建内容
通过按下这个按钮,我想刷新脚手架内小部件的状态
该按钮当然具有onPressed()
闭包,但是我不理解该按钮如何与小部件的状态进行交互(事实上,setState()
只应在小部件的状态本身内部调用)
以及使用FutureBuilder
构建列表的状态:
类PostsTableListState扩展状态{
最终分类数据类别;
int _currentPaginationIndex=1;
final _apiPosts=APIPost.standard();
PostsTableListState({this.category});
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:未来建设者(
未来:_getCall(_currentPaginationIndex),
生成器:(上下文,异步快照)=>
_buildListWhenAvailable(上下文、快照)
)
);
}
小部件\u buildListWhenAvailable(构建上下文上下文,异步快照){
交换机(快照.连接状态){
案例连接状态.active:{
返回CupertinoActivityIndicator();
}中断;
案例连接状态。完成:{
if(snapshot.data==null | | snapshot.data.length==0){
return EmptyDataRefresh(“没有可用的帖子,请尝试刷新”,
onRefresh:(){
this.setState((){});
});
}否则{
返回ListView(子项:_getListData(上下文,快照));
}
}中断;
案例连接状态。无:{
return EmptyDataRefresh(“没有可用的帖子,请尝试刷新”,
onRefresh:(){
this.setState((){});
});
}中断;
案例连接状态。正在等待:{
返回CupertinoActivityIndicator();
}
}
返回文本(“Errore sconosciuto.Provare di nuovo”);
}
Future _getCall(int paginationIndex){
如果(类别==null){
return _apiPosts.fetchPostMetadata(_currentPaginationIndex);
}否则{
return\u apiPosts.fetchPostsWithCategoryID(
this.category.id);//目前此调用不支持分页
}
}
列表\u getListData(
BuildContext上下文,异步快照(快照){
列表小部件=[];
for(snapshot.data中的var post){
添加(PostRow(post:post));
}
返回窗口小部件;
}
}
您应该使用流
当你按下刷新按钮时,它会添加到你的水槽中。
所有订阅流的小部件都将被刷新
我认为你应该更多地了解溪流。尝试学习集团模式它依赖于流的概念
这里有一个开始的链接:您可以在顶级小部件上使用一个,并且“刷新”按钮可以更新那里的值,这将触发每个其他也访问该值的小部件的重建。嗨,听起来很有趣。如果我没有弄错的话,流就是Flutter的Rx,它们允许将有状态的小部件转换为无状态的小部件,将状态管理部分移动到Rx observable实现中?我正试图按照您的建议实现流,但我不知道如何将刷新按钮与列表的状态同步。我是否应该将
StreamController
从导航栏传递到列表和按钮?Rx是基于流的库。流不需要rx库。但是rx让生活变得非常简单你应该使用Streambuilder小部件。我的回答对你有帮助吗。
+---------------------------+
| Refresh |
| Button+-----------------------------+
+---------------------------+ |
| | |
| +--Stateful Widget+---+ | |
| | | | |
| | +----------------+ | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | State | | | |
| | | & | | | |
| | | Future <------------------+
| | | Builder | | |
| | | | | |
| | | | | |
| | | | | |
| | +----------------+ | |
| | | |
| +---------------------+ |
| |
+---------------------------+