【发布时间】:2021-06-10 14:35:45
【问题描述】:
我的构建方法是这样的:
@override
Widget build(BuildContext context) {
return Scaffold(
key: _scaffoldKey,
body: new NestedScrollView(
headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
return <Widget>[
someWidget()
];
},
controller: _scrollController,
body: Column(children: [
Expanded(
child: Container(
child: (_input.length == 0
? Center(child: Text('Lädt...'))
: MyCoolWidget(_input)
),
))
])),
);
}
现在在运行时有时会调用这个方法:
void setInput(List<String> input) {
setState(() {
_input = input;
});
}
这改变了input。现在我想让MyCoolWidget 重建,因为小部件依赖于这个input。所以我称之为setState。我检查了构建方法 get 的重新构建,但我看不到正确的更改。
这是因为我的MyCoolWidgets initState 没有被再次调用。但是我根据input 计算重要的事情。 Widget 生命周期中是否有为此目的而覆盖的方法,该方法在重建时被调用?
就像介于 initState 和从 setState 调用 build 方法之间的某处:
图片来自:https://www.developerlibs.com/2019/12/flutter-lifecycle-widgets.html
感谢您的建议。
编辑:
我现在自己做了一个解决方法。我向MyCoolWidget 添加了一个可以设置的标志。这个标志表明我是否需要重新计算我通常在initState 中所做的事情。当build()-Method 被调用时,我检查是否设置了这个标志并决定是否重新计算。
但也许有更好的解决方案来解决我的问题。
【问题讨论】:
-
initState 在小部件生命周期开始时调用一次。如果需要在 build() 之前计算值,可以考虑覆盖 didChangeDependencies。
-
@CbL 是啊..问题是,
didChangeDependencies在setState之后没有被调用 -
试图覆盖
State.didUpdateWidget? -
那就奇怪了。状态改变时调用 didChangeDependencies。如果调用 setstate,则应更改状态。 api.flutter.dev/flutter/widgets/State/…
标签: flutter dart flutter-widget