微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。