Flutter 如何使用Navigator.push更改页面,使正文和页眉动画不同,而页脚保持不变
我正试图使用导航器进入下一页。按下,同时只更改页面上的正文。例如,我只是在将第2页的索引包装在materialApp中时才得到这个。但当我决定制作动画时(它平滑地将旧页面向左推,并将新页面向右推),结果是她推了旧页面,但在它后面是完全相同的静止页面,后来被新页面阻止 我的理解是,第一个被删除的页面是一个索引2页面,它用MaterialApp包装,后面是整个应用程序的固定MaterialApp。目前,我不知道如何删除固定页面。我给出了我目前如何在应用程序中导航的图片,它可能并不完美,但我不知道更好,任何帮助都将不胜感激Flutter 如何使用Navigator.push更改页面,使正文和页眉动画不同,而页脚保持不变,flutter,dart,Flutter,Dart,我正试图使用导航器进入下一页。按下,同时只更改页面上的正文。例如,我只是在将第2页的索引包装在materialApp中时才得到这个。但当我决定制作动画时(它平滑地将旧页面向左推,并将新页面向右推),结果是她推了旧页面,但在它后面是完全相同的静止页面,后来被新页面阻止 我的理解是,第一个被删除的页面是一个索引2页面,它用MaterialApp包装,后面是整个应用程序的固定MaterialApp。目前,我不知道如何删除固定页面。我给出了我目前如何在应用程序中导航的图片,它可能并不完美,但我不知道更好
在许多应用程序中,我看到这样一个动画,头部平滑淡出,同时出现一个新的。此时,正文被替换为平滑移动的旧页面,我非常喜欢它,我也想这样做。您必须使用页面视图。请检查下面的代码,希望它能帮助您:
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
void initState() {
// TODO: implement initState
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Basic AppBar'),
),
body: PageView(
children: <Widget>[
Page1(),
Page2()
],
pageSnapping: false,
scrollDirection: Axis.horizontal,
physics: BouncingScrollPhysics(),
),
);
}
}
class Page1 extends StatefulWidget {
@override
_Page1State createState() => _Page1State();
}
class _Page1State extends State<Page1> {
@override
Widget build(BuildContext context) {
return Container(
child: Center(child:Text("Page 1")),
color: Colors.red,
);
}
}
class Page2 extends StatefulWidget {
@override
_Page2State createState() => _Page2State();
}
class _Page2State extends State<Page2> {
@override
Widget build(BuildContext context) {
return Container(
child: Center(child:Text("Page 2")),
color: Colors.blueAccent,
);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
@凌驾
void initState(){
//TODO:实现initState
super.initState();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:常量文本(“基本AppBar”),
),
正文:页面视图(
儿童:[
第1页(),
第2页()
],
页面捕捉:false,
滚动方向:轴水平,
物理:弹跳CrollPhysics(),
),
);
}
}
类Page1扩展了StatefulWidget{
@凌驾
_Page1State createState();
}
类_Page1State扩展状态{
@凌驾
小部件构建(构建上下文){
返回容器(
子项:居中(子项:文本(“第1页”),
颜色:颜色,红色,
);
}
}
类Page2扩展了StatefulWidget{
@凌驾
_Page2State createState();
}
类_Page2State扩展状态{
@凌驾
小部件构建(构建上下文){
返回容器(
子:居中(子:文本(“第2页”),
颜色:Colors.blueAccent,
);
}
}
您必须使用页面视图。请检查下面的代码,希望它能帮助您:
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
void initState() {
// TODO: implement initState
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Basic AppBar'),
),
body: PageView(
children: <Widget>[
Page1(),
Page2()
],
pageSnapping: false,
scrollDirection: Axis.horizontal,
physics: BouncingScrollPhysics(),
),
);
}
}
class Page1 extends StatefulWidget {
@override
_Page1State createState() => _Page1State();
}
class _Page1State extends State<Page1> {
@override
Widget build(BuildContext context) {
return Container(
child: Center(child:Text("Page 1")),
color: Colors.red,
);
}
}
class Page2 extends StatefulWidget {
@override
_Page2State createState() => _Page2State();
}
class _Page2State extends State<Page2> {
@override
Widget build(BuildContext context) {
return Container(
child: Center(child:Text("Page 2")),
color: Colors.blueAccent,
);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
@凌驾
void initState(){
//TODO:实现initState
super.initState();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:常量文本(“基本AppBar”),
),
正文:页面视图(
儿童:[
第1页(),
第2页()
],
页面捕捉:false,
滚动方向:轴水平,
物理:弹跳CrollPhysics(),
),
);
}
}
类Page1扩展了StatefulWidget{
@凌驾
_Page1State createState();
}
类_Page1State扩展状态{
@凌驾
小部件构建(构建上下文){
返回容器(
子项:居中(子项:文本(“第1页”),
颜色:颜色,红色,
);
}
}
类Page2扩展了StatefulWidget{
@凌驾
_Page2State createState();
}
类_Page2State扩展状态{
@凌驾
小部件构建(构建上下文){
返回容器(
子:居中(子:文本(“第2页”),
颜色:Colors.blueAccent,
);
}
}
您可以尝试在脚手架内使用嵌套导航器
页面索引1、2和3将位于material app下的根导航器内。第2页将包含另一个导航器,以满足您的目的
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
final GlobalKey<NavigatorState> outgoingKey = GlobalKey<NavigatorState>();
return MaterialApp(
title: 'Sample',
home: Scaffold(
body: PageView(
children: <Widget>[
Page1(),
Page2(navigatorKey: outgoingKey,),
Page3(),
],
pageSnapping: false,
scrollDirection: Axis.horizontal,
physics: BouncingScrollPhysics(),
),
bottomNavigationBar: /*SomeBottomNavigationBar()*/,
),
);
}
}
class Page2 extends StatelessWidget {
Page2({Key key, this.navigatorKey}) : super(key: key);
final GlobalKey<NavigatorState> navigatorKey;
@override
Widget build(BuildContext context) {
return Container(
child: Column(children: [
Expanded(
child: Navigator(
key: navigatorKey, // you need to use this to pop i.e. navigatorKey.currentState.pop()
initialRoute: 'initialPageIndex2',
onGenerateRoute: (RouteSettings settings) {
WidgetBuilder _builder;
switch (settings.name) {
case 'nextPageForPageIndex2':
_builder = (context) => /*NextPageForPageIndex2()*/;
break;
case 'initialPageIndex2':
default:
_builder = (context) => /*InitialPageIndex2()*/;
}
return MaterialPageRoute(builder: _builder);
},
transitionDelegate: DefaultTransitionDelegate(),
);
)
],)
);
}
}
class Page1 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
child: Text('Page1'),
);
}
}
class Page3 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
child: Text('Page3'),
);
}
}
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
最终GlobalKey outgoingKey=GlobalKey();
返回材料PP(
标题:“样本”,
家:脚手架(
正文:页面视图(
儿童:[
第1页(),
第2页(导航工作:外出钥匙),
第3页(),
],
页面捕捉:false,
滚动方向:轴水平,
物理:弹跳CrollPhysics(),
),
bottomNavigationBar:/*SomeBottomNavigationBar()*/,,
),
);
}
}
类Page2扩展了无状态小部件{
Page2({Key-Key,this.navigatorKey}):超级(Key:Key);
最后的环球航行;
@凌驾
小部件构建(构建上下文){
返回容器(
子项:列(子项:[
扩大(
孩子:领航员(
key:navigatorKey,//您需要使用它来弹出,即navigatorKey.currentState.pop()
initialRoute:'initialPageIndex2',
onGenerateRoute:(路由设置){
WidgetBuilder\u builder;
开关(设置.名称){
案例“nextPageForPageIndex2”:
_生成器=(上下文)=>/*NextPageForPageIndex2()*/;
打破
案例“initialPageIndex2”:
违约:
_生成器=(上下文)=>/*InitialPageIndex2()*/;
}
返回物料管理路线(建造商:_建造商);
},
TransitionLegate:DefaultTransitionLegate(),
);
)
],)
);
}
}
类Page1扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回容器(
子项:文本(“第1页”),
);
}
}
C