gpt4 book ai didi

flutter - 如何在Flutter中从父窗口小部件调用子窗口小部件的initState()方法

转载 作者:行者123 更新时间:2023-12-03 03:03:28 24 4
gpt4 key购买 nike

我想从父状态小部件调用子小部件的initState()方法。
这是我的代码:

class ClassA extends StatefulWidget {
@override
_ClassAState createState() => _ClassAState();
}

class _ClassAState extends State<ClassA> {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Column(
children: <Widget>[
ClassB(),
InkWell(
child: Text('Call ClassB initState()'),
onTap: (){
setState(() {});
},
),
],
),
)
,
);
}
}

class ClassB extends StatefulWidget {
@override
_ClassBState createState() => _ClassBState();
}

class _ClassBState extends State<ClassB> {

@override
void initState() {
print('initState in ClassB');
super.initState();
}

@override
Widget build(BuildContext context) {
return Container(
height: 100,
child: Text('Class B'),
);
}
}
在上面我想从ClassA()调用ClassB initState()方法。但是在点击时,它仅调用类B的build方法,但我也想调用initState()。

最佳答案

ClassA和ClassB具有2个不同的内部状态。第一次运行时,将两个小部件插入树中,以便调用每个initState。之后,如果您在ClassA中调用setState,则将更改ClassA状态。如果您查看文档
https://api.flutter.dev/flutter/widgets/State/initState.html

Called when this object is inserted into the tree.

The framework will call this method exactly once for each State objectit creates.

Override this method to perform initialization that depends on thelocation at which this object was inserted into the tree (i.e.,context) or on the widget used to configure this object (i.e.,widget).


您可以看到initState仅由框架调用一次,因此一旦初始化ClassB的状态,就不是正确的方法。正如Randal Schwartz建议的那样,您应该更改代码。你可以从这里开始
https://flutter.dev/docs/development/ui/interactive

关于flutter - 如何在Flutter中从父窗口小部件调用子窗口小部件的initState()方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64677829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com