当前位置: 代码网 > it编程>App开发>苹果IOS > Flutter使用push pop方法及路由进行导航详解

Flutter使用push pop方法及路由进行导航详解

2024年05月18日 苹果IOS 我要评论
正文在 web/mobile 应用程序中,导航是一个很重要的特性,因为它允许你从一个页面跳转到另一个页面。在 flutter 应用程序中,我们可以使用 push(), pop() 方法实现导航,或者编

正文

web/mobile 应用程序中,导航是一个很重要的特性,因为它允许你从一个页面跳转到另一个页面。

flutter 应用程序中,我们可以使用 push(), pop() 方法实现导航,或者编写我们自己的路由。

准备工作

我们假设 firstscreensecondscreen 是两个不同的类,分别在各自的 firstscreen.dartsecondscreen.dart 文件内。

firstscreen.dart 文件如下:

import 'package:flutter/material.dart';
import 'package:navigation/secondscreen.dart';
class firstscreen extends statefulwidget {
  @override
  _firstscreenstate createstate() => _firstscreenstate();
}
class _firstscreenstate extends state<firstscreen> {
  @override
  widget build(buildcontext context) {
    return scaffold(
      appbar: appbar(
      title: text("first screen"),
    ),
    body: column(
      mainaxisalignment: mainaxisalignment.center,
      children: <widget>[
        text(
          "hello to first screen",
          style: textstyle(
            fontsize: 20,
          ),
        ),
        sizedbox(
          height: 10,
        ),
        center(
          child: raisedbutton(
            onpressed: () {},
            child: text(
              "first screen",
              style: textstyle(
                fontsize: 20,
                fontweight: fontweight.bold
              ),
            ),
          ),
        ),
      ],
    ),
   );
  }
}

secondscreen.dart 文件如下:

import 'package:flutter/material.dart';
class secondscreen extends statefulwidget {
  @override
  _secondscreenstate createstate() => _secondscreenstate();
}
class _secondscreenstate extends state<secondscreen> {
  @override
  widget build(buildcontext context) {
  return scaffold(
    appbar: appbar(
      title: text("second screen"),
    ),
    body: column(
      mainaxisalignment: mainaxisalignment.center,
      children: <widget>[
        text(
          "welcome on second screen",
          style: textstyle(
            fontsize: 20,
          ),
        ),
        sizedbox(
          height: 10,
        ),
        center(
          child: raisedbutton(
            onpressed: () {},
            child: text(
              "second screen",
              style: textstyle(
                fontsize: 20,
                fontweight: fontweight.bold
              ),
            ),
          ),
        ),
      ],
    ),
  );
 }
}

main.dart 的内容如下:

import 'package:flutter/material.dart';
import 'package:navigation/firstscreen.dart';
void main() {
  runapp(materialapp(
      home: firstscreen()));
}

第一种导航方式

我们可以使用 navigator.push() 方法和 navigator.pop() 方法进行页面/屏幕导航。

为了触发 raisedbutton 事件后从 firstscreen 导航到 secondscreen。我们需要在 firstscreenbuild() 方法里面的 raisedbuttononpressed(){} 添加如下的事件:

onpressed: () {
  navigator.push(context, materialpageroute(builder: (context) => secondscreen()));
},

navigator.push() 方法将给定的路由推送到路由栈中,这个路由是由 navigator 类来维护。

现在,我们可以使用 materialpageroute路由 或者我们可以创建自己的路由。

将一个新的路由添加到栈中,我们可以通过一个 builder 函数创建一个 materialpageroute 的实例。builder 函数可以创建我们想在页面中展示的挂件。

(context) => secondscreen() 指向 secondsreen 上下文。

为了通过 raisedbutton 点击事件,从 secondscreen 返回到 firstscreen 页面:我们需要在 secondscreen 页面中添加如下的内容:

onpressed: () {
  navigator.pop(context);
}

这里的 pop() 方法是将导航栈中最新的路由弹出。

第二种导航方式

通过 materialapp 构造函数额外提供的属性:initialrouteroutes

import 'package:flutter/material.dart'
import 'package:navigation/firstscreen.dart'
import 'package:navigation/secondscreen.dart'
void main() {
  runapp(materialapp(
    initialroute: '/firstscreen',
    routes: {
      '/firstscreen': (context) => firstscreen(),
      '/secondscreen': (context) => secondscreen(),
    },
    home: firstscreen(),
  ));
}

initialroute 属性定义应用应该从哪个路由开始。routes 属性定义有哪些路由是可以获取的,且路由导航到哪些挂件。

这里,当路由导航到 /firstscreen 时,firstscreen 挂件将构建。

现在,我们将 firstscreenonpressed(){} 的方法更改如下:

onpressed: () {
  navigator.pushnamed(context, '/secondscreen');
}

这里使用命名路由 navigator.pushnamed() 导航到第一个页面。

secondscreenonpressed(){} 事件中,还是保留使用 navigator.pop() 方法:

onpressed: () {
 navigator.pop(context);
}

以上就是flutter使用push pop方法及路由进行导航详解的详细内容,更多关于flutter push pop方法路由导航的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com