Flutter 未在重建时调用initState()

Flutter 未在重建时调用initState(),flutter,dart,flutter-widget,Flutter,Dart,Flutter Widget,我的构建方法如下: @override Widget build(BuildContext context) { return Scaffold( key: _scaffoldKey, body: new NestedScrollView( headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) { return <Widget&

我的构建方法如下:

@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)
                ),
            ))
          ])),
    );
  }
@覆盖
小部件构建(构建上下文){
返回脚手架(
钥匙:_scaffoldKey,
正文:新嵌套滚动视图(
headerSliverBuilder:(BuildContext上下文,boolInnerBoxIsCrolled){
返回[
someWidget()
];
},
控制器:\ u滚动控制器,
正文:列(子项:[
扩大(
子:容器(
子项:(_input.length==0
?中心(子:文本('Lädt…'))
:mycolwidget(\u输入)
),
))
])),
);
}
现在,在运行时上,有时会调用get方法:

void setInput(List<String> input) {
    setState(() {
      _input = input;
    });
}
void setInput(列表输入){
设置状态(){
_输入=输入;
});
}
这将更改
输入
。现在我想让
mycolwidget
重新构建,因为widget依赖于这个
输入。所以我在
setState
中调用它。我检查了生成方法并得到了重建,但是我看不到正确的更改

这是因为my
MyColWidget
s
initState
不会再次调用。但是在那里,我根据
输入计算重要的内容。在小部件生命周期中是否有一种方法可以为此目的重写,该方法在重建时被调用

比如介于
initState
和从
setState
调用
build
方法之间的某个地方:

图片来源:

谢谢你的建议

编辑: 我现在自己做了一个变通办法。我向MyColWidget添加了一个可以设置的标志。此标志指示我是否需要重新计算通常在
initState
中执行的操作。调用
build()
-方法时,我检查是否设置了此标志,并决定是否重新计算


但是,也许有更好的解决方案可以解决我的问题。

您正在寻找
didUpdateWidget
。从:

每当小部件配置更改时调用

覆盖此方法以在小部件更改时响应(例如 启动隐式动画)

框架总是在调用didUpdateWidget之后调用build,这 表示对didUpdateWidget中setState的任何调用都是多余的

在您的例子中,您可以看到,只要小部件从其构造函数接收的对象发生更改,框架就会调用此方法。它还为您提供
oldWidget
的值,以便您可以有条件地更新任何需要的内容


当您的
输入
发生更改时,您可以重写此方法以实现您想要进行的更改,并且每当父小部件的
设置状态
中的
输入
发生更改时,Flatter将调用此方法。

initState在启动小部件的生命周期时调用一次。如果您需要在Buffd()之前计算值,您可以考虑重写DeDeCueApdiials.@ CBL是的。问题是,<代码> DeDeCueAssiabor < /C> >在<代码> SESTATA//COD>试图重写<代码>状态之后。当状态为change时调用didChangeDependencies。如果调用setstate,则应更改状态。