我需要在页面视图中调用另一个类的方法的帮助。我有一个应用程序,它有一个由两个类别组成的页面视图,页面1和页面2分别。它们都是有状态的小部件。
我正在尝试从Page1调用Page2中的方法,但这对我来说很困难,因为它们都没有子/父关系,所以我不能使用回调函数。事实上,它们都是另一个父类(MainParent)的子类。我尝试使用globalkey,但收到currentState is null错误。
非常感谢您的帮助。谢谢!
代码语言:javascript复制class MainParent extends StatefulWidget{
@override
MainParentState createState() => MainParentSate();
}
class MainParentState extends State
PageController pageController;
@override
initState(){
pageController = new PageController(
}
List
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页类
代码语言:javascript复制class Page1 extends StatefulWidget{
@override
Page1State createState() => Page1State();
}
class Page1State extends State
_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
page2Key.currentState.refreshList();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: GestureDetector(
onTap: () => _callPage2Function()
)
)
);
}
}第2页类
代码语言:javascript复制class Page2 extends StatefulWidget{
@override
Page2State createState() => Page2State();
}
class Page2State extends State
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。