Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何使用Navigator.push更改页面,使正文和页眉动画不同,而页脚保持不变_Flutter_Dart - Fatal编程技术网

Flutter 如何使用Navigator.push更改页面,使正文和页眉动画不同,而页脚保持不变

Flutter 如何使用Navigator.push更改页面,使正文和页眉动画不同,而页脚保持不变,flutter,dart,Flutter,Dart,我正试图使用导航器进入下一页。按下,同时只更改页面上的正文。例如,我只是在将第2页的索引包装在materialApp中时才得到这个。但当我决定制作动画时(它平滑地将旧页面向左推,并将新页面向右推),结果是她推了旧页面,但在它后面是完全相同的静止页面,后来被新页面阻止 我的理解是,第一个被删除的页面是一个索引2页面,它用MaterialApp包装,后面是整个应用程序的固定MaterialApp。目前,我不知道如何删除固定页面。我给出了我目前如何在应用程序中导航的图片,它可能并不完美,但我不知道更好

我正试图使用导航器进入下一页。按下,同时只更改页面上的正文。例如,我只是在将第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