通过GlobalKey方式实现
方式一:
PageA的定义如下:
class PageA extends StatefulWidget {
const PageA({Key? key}) : super(key: key);
@override
PageAState createState() => PageAState();
}
class PageAState extends State<PageA> {
///1
static GlobalKey homeKey = GlobalKey();
///2关键代码
static currentInstance() {
var state = PageAState.homeKey.currentContext?.findAncestorStateOfType<PageAState>();
return state;
}
@override
Widget build(BuildContext context) {
return Scaffold(
///3
key: homeKey,
body: Container(),
);
}
reloadData() {
setState(() {});
}
}
在 PageB 里调用 PageAState 的 reloadData() 方法
class PageB {
buttonClick() {
PageAState.currentInstance()?.reloadData();
}
}
方式二:Flutter中父widget调用子widget
ParentPage类:
class ParentPage extends StatefulWidget {
const ParentPage({Key? key}) : super(key: key);
@override
State<ParentPage> createState() => _ParentPageState();
}
class _ParentPageState extends State<ParentPage> {
///1
final GlobalKey<ChildPageState> _childWidgetKey = GlobalKey();
@override
Widget build(BuildContext context) {
return ChildPage(
///2
key: _childWidgetKey,
);
}
///3
refresh() => _childWidgetKey.currentState?.onRefresh();
}
ChildPage类:
class ChildPage extends StatefulWidget {
const ChildPage({Key? key}) : super(key: key);
@override
ChildPageState createState() => ChildPageState();
}
class ChildPageState extends State<ChildPage> {
@override
Widget build(BuildContext context) {
return const Placeholder();
}
onRefresh() {
setState(() {});
}
}
参考:flutter通过GlobalKey在自定义Widget外部获取其state刷新页面_flutter刷新子控件_一叶飘舟的博客-CSDN博客