首页 > 解决方案 > Flutter 使用 PageController 从另一个类更改 PageView

问题描述

帮助我是一个颤振的新手,我已经构建了一个具有 OnTap TapGestureRecognizer 函数的文件,我试图在第二页中管理 pageView。我尝试了一些不同的选项,但我无法弄清楚如何让 pageController 更改第二页上的页面视图。

根类

class RootApp extends StatefulWidget {
  @override
  RootAppState createState() => RootAppState();
}

class RootAppState extends State<RootApp> {
  bool isFavorite = false;
  int pageIndex = 0;

  PageController _pgController = PageController();

  void pgCont(pg){
     _pgController.animateToPage(pg, duration: Duration(milliseconds: 250), curve: Curves.bounceInOut);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: PageView(controller: _pgController,
        children: <Widget>[
        getBody1() ,
        getBody2(),
      ]),
      bottomNavigationBar: getFooter(),
    );
  }

标题首页类

class HeaderHomePage extends StatelessWidget {
   HeaderHomePage({
    Key ?key
  }) : super(key: key);

   RootAppState rooting = RootAppState();
 }

  @override
  Widget build(BuildContext context) {
    return Row(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text.rich(
          TextSpan(
            text: "Body1",
          recognizer: TapGestureRecognizer()
        ..onTap = (){
              print('He Clicked Body1');
              rooting.pgCont(1);
        },
   SizedBox(
      width: 8,
    ),
    Text.rich(
      TextSpan(
      text: "Body2",
      recognizer: TapGestureRecognizer()
          ..onTap = (){
        print('She clicked Body2');
        rooting.pgCont(2);
          },),
      style: TextStyle(
          color: white, fontSize: 17, fontWeight: FontWeight.w500),
    )
  ],
);

请帮助我被困在看起来很简单的事情上,我在这里错过了什么或做错了什么?

标签: flutterflutter-pageviewpagecontrol

解决方案


RootAppState课堂上

  void pgCont(pg){
    if(_pgController.hasClients) {
     _pgController.animateToPage(pg, duration: Duration(milliseconds: 250), curve: Curves.bounceInOut);
    }
  }

HeaderHome课堂上

onTap = (){
        print('She clicked Body2');
        rooting.pgCont(0); // index starts from 0
    },

从另一个小部件调用另一个小部件的状态是不明智的。您应该使用回调来处理来自其他 State 类的代码。

https://www.geeksforgeeks.org/flutter-working-with-callback-functions/


推荐阅读