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
中调用它。我检查了生成方法并得到了重建,但是我看不到正确的更改
这是因为myMyColWidget
sinitState
不会再次调用。但是在那里,我根据输入计算重要的内容。在小部件生命周期中是否有一种方法可以为此目的重写,该方法在重建时被调用
比如介于initState
和从setState
调用build
方法之间的某个地方:
图片来源:
谢谢你的建议
编辑:
我现在自己做了一个变通办法。我向MyColWidget添加了一个可以设置的标志。此标志指示我是否需要重新计算通常在initState
中执行的操作。调用build()
-方法时,我检查是否设置了此标志,并决定是否重新计算
但是,也许有更好的解决方案可以解决我的问题。您正在寻找didUpdateWidget
。从:
每当小部件配置更改时调用
覆盖此方法以在小部件更改时响应(例如
启动隐式动画)
框架总是在调用didUpdateWidget之后调用build,这
表示对didUpdateWidget中setState的任何调用都是多余的
在您的例子中,您可以看到,只要小部件从其构造函数接收的对象发生更改,框架就会调用此方法。它还为您提供oldWidget
的值,以便您可以有条件地更新任何需要的内容
当您的输入
发生更改时,您可以重写此方法以实现您想要进行的更改,并且每当父小部件的设置状态
中的输入
发生更改时,Flatter将调用此方法。initState在启动小部件的生命周期时调用一次。如果您需要在Buffd()之前计算值,您可以考虑重写DeDeCueApdiials.@ CBL是的。问题是,<代码> DeDeCueAssiabor < /C> >在<代码> SESTATA//COD>试图重写<代码>状态之后。当状态为change时调用didChangeDependencies。如果调用setstate,则应更改状态。