【发布时间】:2019-05-10 14:14:38
【问题描述】:
代码:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
leading: IconButton(
icon: Icon(Icons.help),
onPressed: () {
// how can I call methodA from here?
},
),
),
body: HomePage(),
),
);
}
}
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
@override
Widget build(BuildContext context) {
return Container();
}
void methodA() {}
}
问题:
我想从IconButton 的onPressed() 打电话给methodA()。我该怎么做,我知道如何从子类调用父类的方法,但是这个用例是不同的。
【问题讨论】:
-
您可以将 GlobalKey 传递给
HomePage(...)并使用此密钥访问HomePage的状态。最好使用一些事件传播机制(BloC 和 redux 在这里有所帮助,但有很多方法可以做到这一点) -
@GünterZöchbauer 感谢您的提示,我知道
ScopedModel,这对这里也有帮助吗? IMO,这无济于事,因为它用于将数据向下传递。 -
从未仔细观察过。您还可以使用普通的
StreamController并将其流传递给子组件,并在子组件中侦听流。在您添加到StreamController的父级中,侦听器(子级)为每个事件调用methodA。 -
@GünterZöchbauer 我使用了
GlobalKey的方法,代码现在可以工作了,你能检查一下我的方法是否正确吗? -
是的,没关系。