如何在flutter中通过弯曲的导航栏导航不同的页面?

时间:2019-10-21 06:18:56

标签: flutter flutter-layout

我无法在颤动中使用弯曲的导航栏,当我滑动屏幕时,弯曲的导航栏的按钮也会移动,但是当我点击弯曲的导航栏的按钮时,什么也没有发生。我认为 onTap()无法正常工作。当我点击按钮时如何浏览页面? 这是我程序的代码=>

  static final String id = 'profile_page';
  @override
  _PagesState createState() => _PagesState();
}

class _PagesState extends State<Pages> {
  PageController _pageController;

  int _Page=0;

  @override
  void initState() {
    super.initState();
    _pageController = PageController();
  }

  @override

  Widget build(BuildContext context) {
    return Scaffold(

        body: PageView(

            controller: _pageController,
          children: <Widget>[

            Search(),
            Trending(),
            Friends(),
            Profile(),
          ],
          onPageChanged: (int index) {
            setState(() {

              _pageController.jumpToPage(index);
            });
          }
          ),


          bottomNavigationBar: CurvedNavigationBar(
            animationCurve: Curves.easeInOutBack,

            index:3,

            items: <Widget>[
              Icon(Icons.search, size: 30, color: Colors.white, ),
              Icon(Icons.trending_up, size: 30, color: Colors.white),
              Icon(Icons.group, size: 30, color: Colors.white),
              Icon(Icons.person, size: 30, color: Colors.white)
            ],
            color: Colors.blueAccent,
            backgroundColor: Colors.white,
            height: 60.0,
            onTap: (int index) {
             setState(() {
               _pageController.jumpToPage(index);
             });
            },

          ),
        );

  }
}

3 个答案:

答案 0 :(得分:1)

只需更换 _pageController = PageController();

final _pageController = PageController();

并在 void initState()方法中删除_pageController = PageController();

不使用int _Page=0; 您会没事的。

答案 1 :(得分:0)

如果您更改PageView的页面,则是告诉CurvedNavigationBar更改其页面。但是,当您更改CurvedNavigationBar的页面时,并没有告诉PageView更改其页面。

您需要将PageController添加到PageView,如下所示:

final _pageController = PageController();

PageView(
  controller: _pageController,
  ...

那么您应该能够做到这一点:

_pageController.jumpToPage(index);

但是请确保当您告诉一个人更改另一个人的页面时,另一个人不会再告诉第一个更改其页面,因为这将是一个无限循环。

答案 2 :(得分:0)

我以这种方式使用它:

  1. 创建一个列表和一个变量,以保存当前的页码。这里的3个类可以是无状态或有状态的小部件。

    CASE [Table Name]
    WHEN "Events" THEN [Split 1]
    WHEN "Events1" THEN [Split 2]
    WHEN "Events2" THEN [Split 3]
    ...
    WHEN "Events5" THEN [Split 6]
    END
    
  2. 像这样定义你的身体:

    final List<Widget> _tabItems = [Class1(), Class2(), Class3()];
    int _activePage = 0;
    
  3. 然后在您的onTap中

    body: _tabItems[_activePage], //Customise it as you want.
    

希望有帮助!快乐编码:)