这里有一个例子,A 类的方法在 B 类中被调用,简单地将构造函数中的方法从 A 传递到 B,A 类也使用 GlobalKey 从 B 类调用方法。需要注意的是,GlobalKey 是用 B 类的状态类的类型声明的:
class Home extends StatelessWidget {
final GlobalKey<_ClassBState> classBKey = GlobalKey();
@override
Widget build(BuildContext context) {
return Column(
children: [
ClassA(),
],
);
}
}
class ClassA extends StatelessWidget {
final GlobalKey<_ClassBState> classBKey = GlobalKey();
@override
Widget build(BuildContext context) {
return Container(
alignment: Alignment.center,
color: Colors.blueGrey,
padding: EdgeInsets.all(10),
child: Column(
children: [
Text('Class A'),
RaisedButton(
child: Text('Class B method'),
onPressed: () => classBKey.currentState.methodInBClass(),
),
ClassB(
callback: methodInClassA,
key: classBKey,
),
],
),
);
}
void methodInClassA(){
print('methodInClassA');
}
}
class ClassB extends StatefulWidget {
final Function callback;
ClassB({
Key key,
this.callback,
}) : super(key: key) ;
@override
_ClassBState createState() => _ClassBState();
}
class _ClassBState extends State<ClassB> {
@override
Widget build(BuildContext context) {
return Container(
alignment: Alignment.center,
color: Colors.amber,
padding: EdgeInsets.all(10),
child: Column(
children: [
Text('Class B'),
RaisedButton(
child: Text('Class A method'),
onPressed: () => widget.callback(),
),
]
),
);
}
void methodInBClass(){
print('methodInBClass');
}
}
如果您希望我将每个概念单独分开,我可以更改代码。