StatefulBuilder和StatefulWidget有什么区别?什么时候应该用一种而不是另一种?
乍一看,它们似乎很相似。
定义了StatefulBuilder:
一个具有状态并调用闭包以获得其子小部件的柏拉图式小部件。
在定义StatefulBuilder时:
具有可变状态的小部件
发布于 2019-06-04 14:25:00
通常,当在构建器方法中创建小部件树时,可以使用build内联。当您需要访问小部件子树中的context时,这通常是很有帮助的。例如:
@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。
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);
});
}
}));
}
}https://stackoverflow.com/questions/56445912
复制相似问题