我需要帮助在网页浏览中调用另一个类的方法。我有一个应用程序,它的页面浏览量由两个类组成,分别是 Page 1 和 Page 2。它们都是有状态的小部件。
我试图从 Page1 调用 Page2 的方法,但对我来说很难,因为它们都没有子/父关系,所以我不能使用回调函数。事实上,它们都是另一个父类(MainParent)的子类。我尝试使用 globalkey 但我收到 currentState is null 错误。
非常感谢您的帮助。谢谢!
class MainParent extends StatefulWidget{
@override
MainParentState createState() => MainParentSate();
}
class MainParentState extends State<MainParent> {
PageController pageController;
@override
initState(){
pageController = new PageController(
}
List<Widget> _showPageList(AppModel appModel){
List<Widget> pageList = new List();
pageList.add(Page1(/*some named parameters pass here*/));
pageList.add(Page2(/*some named parameters pass here*/));
return pageList;
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: PageView(
physics: new NeverScrollableScrollPhysics(),
controller: pageController,
onPageChanged: _onPageChanged,
children: _showPageList(),
)
);
}
}
第 1 页课程
class Page1 extends StatefulWidget{
@override
Page1State createState() => Page1State();
}
class Page1State extends State<Page1> {
_callPage2Function(){
//animate to page 2 and mount it
MainParent.of(context).pageController.animateToPage(
1,
duration: const Duration(milliseconds: 700),
curve: Curves.fastLinearToSlowEaseIn);
//this doesn't work
Page2State page2state = new Page2State();
page2state.refreshList();
//creating a global key doesnt work as well, gets currentstate is null
GlobalKey<Page2State> page2Key = new GlobalKey<Page2State>();
page2Key.currentState.refreshList();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: GestureDetector(
onTap: () => _callPage2Function()
)
)
);
}
}
第 2 页类
class Page2 extends StatefulWidget{
@override
Page2State createState() => Page2State();
}
class Page2State extends State<Page2> {
refreshList(){
//this function refreshes the list
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: ListView.builder(
//some child widgets here
)
)
);
}
}
编辑:编辑我的代码。原来我必须先导航到 page2 选项卡,因为当我在第 1 页时,第 2 页没有安装到屏幕上。所以我添加了一个 pageController 并首先导航到 page2。