Flutter 从页面视图容器小部件外部导航到页面视图中的页面
我在主页的pageView中有3个页面(PageA、PageB和PageC)。我可以使用PageController轻松地在页面之间切换。这3个页面也连接到BottomNavigationBar。我也可以通过它在页面之间切换 现在,我有一个问题: 如何从主页之外的页面转到PageView中的PageB或PageC页面 举个例子:Flutter 从页面视图容器小部件外部导航到页面视图中的页面,flutter,Flutter,我在主页的pageView中有3个页面(PageA、PageB和PageC)。我可以使用PageController轻松地在页面之间切换。这3个页面也连接到BottomNavigationBar。我也可以通过它在页面之间切换 现在,我有一个问题: 如何从主页之外的页面转到PageView中的PageB或PageC页面 举个例子: 我去PageA 从那里我进入一个页面 在PageQ中,我点击PageB的第二个底部NavBarItem。从这里我被困住了 如果我尝试导航到主页,屏幕上会显示PageA作
return Scaffold(
body: PageView(
controller: controller.pageController,
children: [
PageA(),
PageB(),
PageB(),
],
onPageChanged: controller.slidePage,
),
bottomNavigationBar: BottomNavbar(),
);
一种方法是传递控制器,这可能是个坏主意。更好的方法是使用
Navigator
您甚至可以坚持使用PageView
并将一个值传递给构造函数以设置初始页面,但一定要考虑重新设计。您可能不需要PageView
,也许使用单独的页面和Navigator
导航更好。如果我没记错的话,如果您需要连续的步骤,页面视图可能会很有用,但不要局限于此。如果您试图实现成功的底部导航栏,您可以尝试以下方法:
import 'package:convex_bottom_bar/convex_bottom_bar.dart';
import 'package:flutter/material.dart';
import 'presentation/screens/cart.dart';
import 'presentation/screens/home.dart';
import 'presentation/screens/order.dart';
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
int page = 0;
final _order = PageA();
final _home = Pageb();
final _cart = Pageq();
Widget _showPage = PageA();
Widget _pageChooser(page) {
switch (page) {
case 0:
return Pageq();
break;
case 1:
return Pageb();
break;
case 2:
return Pageq();
break;
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
elevation: 10.0,
backgroundColor: Colors.pink[100],
title: Image.asset("images/logo.png",scale: 14.0,),
centerTitle: true,
),
bottomNavigationBar: BottomNavigationBar(
elevation: 0.0,
items: [
BottomNavigationBarItem(
label:"PageQ",
icon:Icon(Icons.home)
),
BottomNavigationBarItem(
label:"PageB",
icon:Icon(Icons.ac_unit)
),
BottomNavigationBarItem(
label:"PageA",
icon:Icon(Icons.favorite)
),
],
onTap: (index) async {
setState(() {
_showPage = _pageChooser(index);
});
},
),
body: _showPage,
);
}
}
import'package:凸面_-bottom_-bar/凸面_-bottom_-bar.dart';
进口“包装:颤振/材料.省道”;
导入“演示/屏幕/购物车.省道”;
导入“演示/屏幕/主页.dart”;
导入“演示/屏幕/订单.dart”;
类主页扩展了StatefulWidget{
@凌驾
_HomePageState createState()=>\u HomePageState();
}
类_HomePageState扩展状态{
int page=0;
最终订单=PageA();
final_home=Pageb();
最终_cart=Pageq();
小部件_showPage=PageA();
小部件_页面选择器(页面){
交换机(第页){
案例0:
返回Pageq();
打破
案例1:
返回Pageb();
打破
案例2:
返回Pageq();
打破
}
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标高:10.0,
背景颜色:颜色。粉红色[100],
标题:Image.asset(“images/logo.png”,比例:14.0,),
标题:对,
),
底部导航栏:底部导航栏(
标高:0.0,
项目:[
底部导航气压计(
标签:“PageQ”,
图标:图标(Icons.home)
),
底部导航气压计(
标签:“PageB”,
图标:图标(Icons.ac_单位)
),
底部导航气压计(
标签:“PageA”,
图标:图标(Icons.favorite)
),
],
onTap:(索引)异步{
设置状态(){
_showPage=\u页面选择器(索引);
});
},
),
正文:_showPage,
);
}
}
这是一个逻辑问题,而不是技术问题。仍在回答,以便任何面临此类问题的人都能从中振作起来
PageView类按预期工作。当您从页面视图中不存在的其他页面导航时,请使用popintil
而不是push
。因为push
将创建一个新的主页,而不是现有的主页
void redirectTo(int selectedPageIndex) async {
if (Get.currentRoute != Routes.HOME) {
Navigator.popUntil(Get.context, ModalRoute.withName(Routes.HOME));
}
pageController.jumpToPage(selectedPageIndex);
}
只要弹出,直到你回到主页,然后跳转到所需的索引 谢谢你的回答。在这种情况下,我无法滑动到下一个屏幕&每次都会重新绘制底部导航栏。在页面之间重新绘制时,底部导航栏上可以看到一个急动。所以,我想让它永久存在。滑动页面需要页面浏览。谢谢,兄弟!这不是因为我需要,而是我想。就像在Whatsapp应用程序中一样,我想使用PageView和Navbar,而不需要重新绘制它。