Мне нужна помощь в вызове метода другого класса в просмотре страницы. У меня есть приложение, которое имеет просмотр страницы, состоящий из двух классов, Страница 1 и Страница 2 соответственно. Оба они являются виджетами с состоянием.
Я пытаюсь вызвать метод из Page2 из Page1, но это трудно для меня, так как у них обоих нет отношений ребенок / родитель, поэтому я не мог использовать функцию обратного вызова. На самом деле они оба являются потомками другого родительского класса (MainParent). Я пытался использовать globalkey, но я получил currentState - нулевая ошибка.
Ваша помощь очень ценится. Спасибо!
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 и сначала перешел на страницу 2.