这似乎是一个简单的问题(也许是),但是我对Flutter还是陌生的,我没有找到实现此功能的正确方法。
我在CupertinoPageScaffold
中有一个有状态的小部件。
支架位于CupertinoNavigationBar
内,该{@ 1}具有一个“刷新”按钮。
窗口小部件具有CupertinoButton
来异步生成内容。
通过按下此按钮,我想刷新支架内部小部件的状态。
该按钮当然具有FutureBuilder
闭包,但是我不知道该按钮如何与小部件的状态进行交互(实际上,onPressed()
应该只能在小部件的状态本身内部调用。
setState()
如何实现此刷新按钮的正确方法?
编辑
目前这是我所拥有的:
+---------------------------+
| Refresh |
| Button+-----------------------------+
+---------------------------+ |
| | |
| +--Stateful Widget+---+ | |
| | | | |
| | +----------------+ | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | State | | | |
| | | & | | | |
| | | Future <------------------+
| | | Builder | | |
| | | | | |
| | | | | |
| | | | | |
| | +----------------+ | |
| | | |
| +---------------------+ |
| |
+---------------------------+
以及使用class PostListScaffold extends StatelessWidget {
final CategoryMetadata category;
PostListScaffold({this.category});
@override
Widget build(BuildContext context) {
return CupertinoPageScaffold(
navigationBar: CupertinoNavigationBar(
middle: Image(image: AssetImage("assets/logo.png")),
heroTag: "post_list",
transitionBetweenRoutes: false,
actionsForegroundColor: MyColors.mainColor,
),
child: PostsTableList(category)
);
}
}
class PostsTableList extends StatefulWidget {
final CategoryMetadata category;
PostsTableList(this.category);
@override
PostsTableListState createState() => PostsTableListState(category: category);
}
构建列表的状态:
FutureBuilder
答案 0 :(得分:0)
您应该使用流
当您按下刷新按钮时,它应该添加到您的接收器中。 订阅流的所有小部件都将刷新。
我认为您应该了解有关流的更多信息。尝试学习 bloc模式,它依赖于流的概念。
以下是可帮助您入门的链接:https://medium.com/flutterpub/architecting-your-flutter-project-bd04e144a8f1
答案 1 :(得分:0)
您可以在顶级窗口小部件上使用InheritedNotifier,并且“刷新”按钮可以在那里更新值,这将触发其他也访问该值的窗口小部件的重建。