Вы можете передать обратный вызов, использовать VoidCallback
и получить событие в главном виджете.
class MainPage extends StatelessWidget {
_onTapButton() {
print("your event here");
}
@override
Widget build(BuildContext context) {
return Container(
child: ChildPage(
onTap: _onTapButton,
),
);
}
}
class ChildPage extends StatelessWidget {
final VoidCallback onTap;
const ChildPage({Key key, this.onTap}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
child: RaisedButton(
child: Text("Click Me"),
onPressed: () {
//call to your callback here
onTap();
},
),
);
}
}
Если вы хотите обратного, вы можете просто обновить состояние родительского виджета иизмените параметр, который вы передаете своим фрагментам или также вы можете использовать GlobalKey, как в примере ниже:
class MainPage extends StatelessWidget {
final GlobalKey<ChildPageState> _key = GlobalKey();
_onTapButton() {
_key.currentState.myMethod();
}
@override
Widget build(BuildContext context) {
return Container(
child: Column(
children: [
ChildPage(
key: _key,
),
RaisedButton(
child: Text("Click me"),
onPressed: _onTapButton,
)
],
)
);
}
}
class ChildPage extends StatefulWidget {
const ChildPage({Key key}) : super(key: key);
@override
ChildPageState createState() {
return new ChildPageState();
}
}
class ChildPageState extends State<ChildPage> {
myMethod(){
print("called from parent");
}
@override
Widget build(BuildContext context) {
return Container(
child: Text("Click Me"),
);
}
}