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