Flutter PageView和GestureDetector通过滑动更改路由

问题描述

Flutter中,我已经使用PageView小部件构建了一个路由系统。这与bottomNavigationBar配合良好。

routing.dart

class Routes extends StatefulWidget {
  Routes({Key key}) : super(key: key);

  @override
  _Routesstate createState() => _Routesstate();
}

class _Routesstate extends State<Routes> {
  PageController _pageController = PageController();
  // handle all pages
  List<Widget> _screens = [
    Stores(),Recipes(),Basket(),];

  int _selectedindex = 0;
  void _onPageChanged(int currentIndex) {
    setState(() {
      _selectedindex = currentIndex;
    });
  }

  void _onItemTapped(int selectedindex) {
    _pageController.jumpToPage(selectedindex);
    setState(() {
      _selectedindex = selectedindex;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: PageView(
          controller: _pageController,children: _screens,onPageChanged: _onPageChanged,physics: NeverScrollableScrollPhysics(),),bottomNavigationBar: Theme(
            data: Theme.of(context).copyWith(
              canvasColor: Colors.white,// BottomNavBar BackgroundColor
            ),child: BottomNavigationBar(
              currentIndex: _selectedindex,onTap: _onItemTapped,items: const <BottomNavigationBarItem>[
                BottomNavigationBarItem(
                  icon: Icon(Icons.home),title: Text('Stores'),BottomNavigationBarItem(
                  icon: Icon(Icons.restaurant_menu),title: Text('Recipes'),title: Text('Basket'),)
              ],)));
  }
}

每页(商店,食谱和购物篮)在底部显示导航。
但是,当我加载Stores页面时,会弹出一条消息,要求用户滑动以查看最新的食谱之一。
滑动时,应将用户重定向Recipes()BottomNavigationBar应该使用新索引进行更新。

alertDialog.dart

class Dialogs {
  recipesAlert(BuildContext context,String title,String description) {
    return showDialog(
        context: context,barrierdismissible: false,builder: (BuildContext context) {
          return GestureDetector(
              onPanUpdate: (details) {
                if (details.delta.dx > 0) {
                  // swiping in right direction
                  print('ive swiped');
                  *************************************
                  HERE WHERE I SHOULD CALL ROUTES(),REDIRECT TO RECIPES() AND 
                  UPDATE THE BottOM BAR 
                  *************************************
                }
              },child: AlertDialog(
                content: SingleChildScrollView(
                    child: ListBody(
                      children: <Widget>[
                        
                        Padding(
                          child: Text('Swipe right',style: TextStyle(
                                color: Colors.black,fontWeight: FontWeight.bold
                            ),............
                    

我不能使用类似的东西:

Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (context) => Recipes())

否则,它将打开一个没有bottomNavigationBar的新recipes页面
我想打电话给Routes(),将用户重定向Recipes(),并用正确的索引更新BottomNavigationBar

感谢您的帮助。 乔

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...