Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.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 刷新按钮的正确实现_Flutter - Fatal编程技术网

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     |  |  |
|  | |                |  |  |
|  | |                |  |  |
|  | |                |  |  |
|  | +----------------+  |  |
|  |                     |  |
|  +---------------------+  |
|                           |
+---------------------------+