首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StatefulBuilder对StatefulWidget

StatefulBuilder对StatefulWidget
EN

Stack Overflow用户
提问于 2019-06-04 14:25:00
回答 1查看 12.9K关注 0票数 14

StatefulBuilderStatefulWidget有什么区别?什么时候应该用一种而不是另一种?

乍一看,它们似乎很相似。

定义了StatefulBuilder

一个具有状态并调用闭包以获得其子小部件的柏拉图式小部件。

在定义StatefulBuilder时:

具有可变状态的小部件

EN

回答 1

Stack Overflow用户

发布于 2019-06-04 14:25:00

通常,当在构建器方法中创建小部件树时,可以使用build内联。当您需要访问小部件子树中的context时,这通常是很有帮助的。例如:

还可以看到这个https://stackoverflow.com/questions/52088889/can-someone-explain-to-me-what-the-builder-class-does-in-flutter

代码语言:javascript
复制
 @override
 Widget build(BuildContext context) {
   return Scaffold(
       appBar: AppBar(
         title: Text("Home"),
       ),
       body: Builder(builder: (thisLowerContext) {
         return RaisedButton(
             onPressed: () => Scaffold.of(thisLowerContext)
                 .showSnackBar(SnackBar(content: Text("button was clicked"))));
       }));
 }

当您需要访问该子树的StatefulBuilder时,请使用setState。这将只重建带有子树的StatefulBuilder

代码语言:javascript
复制
class _SomeWidgetState extends State<HomeScreen> {
  Data data;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text("Home"),
        ),
        body: StatefulBuilder(builder: (thisLowerContext, innerSetState) {
          if (data == null) {
            return RaisedButton(
                child: Text("Load data"),
                onPressed: () async {
                  Scaffold.of(thisLowerContext)
                      .showSnackBar(SnackBar(content: Text("Loading data...")));
                  var loadedData = await _loadData();
                  innerSetState(() => data = loadedData);
                });
          } else {
            return RaisedButton(
                child: Text("Reload data"),
                onPressed: () async {
                  Scaffold.of(thisLowerContext).showSnackBar(
                      SnackBar(content: Text("Reloading data...")));
                  var loadedData = await _reloadData();
                  innerSetState(() => data = loadedData);
                });
          }
        }));
  }
}
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56445912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档