我需要在页面视图中调用另一个类的方法的帮助。我有一个应用程序,它有一个由两个类别组成的页面视图,页面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 _showPageList(AppModel appModel){

List 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页类

代码语言: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 = new 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。