flutter 路由管理- Navigator的push和pop

简介: Navigator类是flutter一个路由管理的组件,通过一个栈来管理活动路由集合,通常当前屏幕显示的页面就是栈顶的路由。

      在 Flutter 中,屏 (screen) 和 页面 (page) 都叫做 路由 (route),在下文中统称为“路由 (route)”。

      在 Android 开发中,Activity 相当于“路由”,在 iOS 开发中,ViewController 相当于“路由”,在 Flutter 中,“路由”也是一个 widget。怎样从一个“路由”跳转到新的“路由”就是我们接下来要讲的路由管理。

      Flutter 中的路由管理和原生开发类似,无论是 Android 还是 iOS,导航管理都会维护一个路由栈,路由入栈(push)操作对应打开一个新页面,路由出栈(pop)操作对应页面关闭操作返回到上一个页面,当前屏幕显示的页面就是栈顶的路由,而路由管理主要是指如何来管理该路由栈。

      Navigator类是flutter一个路由管理的组件,提供了一系列方法来管理路由栈。下边我们先结合flutter官方文档上例子介绍其最常用的两个方法,既Navigator.push() 和Navigator.pop() 。

  1. Future push(BuildContext context, Route route)

    通过使用 Navigator.push() 方法将给定的 Route 对象入栈,即跳转到新的路由页面。

  1. bool pop(BuildContext context, [ result ])

     pop() 方法会从堆栈上移除 Route 对象(出栈),它将关闭当前页面返回上一个页面,其result 为页面关闭时返回给上一个页面的数据。

     在Navigator类中第一个参数为context的静态方法都有对应一个Navigator的实例方法, 比如Navigator.push(BuildContext context, Route route)等价于Navigator.of(context).push(Route route),看一下Navigator.push() 和Navigator.pop() 态方法源码,其中也是使用Navigator.of(context).[方法]来实现的。

import'package:flutter/foundation.dart';
import'package:flutter/material.dart';
voidmain() {
runApp(constMaterialApp(
title: '路由管理',
home: FirstRoute(),
  ));
}
//创建界面一classFirstRouteextendsStatelessWidget {
constFirstRoute({super.key});
@overrideWidgetbuild(BuildContextcontext) {
returnScaffold(
appBar: AppBar(
title: constText("页面一"),
      ),
body: Center(
child: ElevatedButton(
child: constText("跳转"),
onPressed: () async {
// 使用Navigator.push跳转到界面二varresult=awaitNavigator.push(context,
MaterialPageRoute(builder: (context) =>constSecondRoute(text: "页面二",)),
              );
if (kDebugMode) {
print("路由返回值: $result");
               }
          },
        ),
      ),
    );
  }
}
classSecondRouteextendsStatelessWidget {
finalStringtext;
constSecondRoute({super.key,requiredthis.text});
@overrideWidgetbuild(BuildContextcontext) {
returnScaffold(
appBar: AppBar(
title:  Text(text),
      ),
body: Center(
child: ElevatedButton(
onPressed: () {
// 使用Navigator.pop跳转到界面一Navigator.pop(context,"我是返回值");
          },
child: constText('返回'),
        ),
      ),
    );
  }
}

      在这个例子中,我们通过调Navigator.push()跳转到页面二,然后在调Navigator.pop() 返回到页面一,实现了界面之间的跳转和返回。

      在使用Navigator.push() 和Navigator.pop() 我如何进行路由传值呢,其实非常简单,在Navigator.push() 我们可以通过实例化新页面的构造函数将需要的参数给下一个页面,在Navigator.pop()时我们通过pop的result参数将数据返回给上一个页面。

相关文章
|
17天前
|
Go 网络架构 开发者
Flutter &鸿蒙next中的路由使用详解【基础使用】
本文介绍了 Flutter 路由系统的使用方法,包括基本路由、命名路由、参数传递、返回参数和动态路由。通过 `Navigator` 类实现页面跳转,支持简单和复杂参数的传递,并可通过 `onGenerateRoute` 实现更灵活的动态路由管理。示例代码展示了如何在实际项目中应用这些技术,帮助开发者构建清晰、易于维护的导航结构。
64 1
|
1月前
|
UED 开发者
flutter:获取对象&路由管理 (四)
本文介绍了Flutter中如何通过Context获取状态对象、使用GlobalKey获取状态对象、基本的路由管理、路由传值、命名路由、返回根路由以及点击图标跳转的方法。示例代码展示了如何在应用中实现这些功能,包括页面跳转、传递参数和返回上一页等操作。
|
4月前
|
容器
flutter 布局管理【详解】
flutter 布局管理【详解】
40 3
|
4月前
|
Android开发
Flutter路由跳转参数处理小技巧
Flutter路由跳转参数处理小技巧
42 0
|
4月前
flutter的状态管理学习
flutter的状态管理学习
|
6月前
|
前端开发 开发者 UED
【Flutter前端技术开发专栏】Flutter中的图标、字体与样式管理
【4月更文挑战第30天】本文介绍了在Flutter中管理图标、字体和样式的做法。Flutter提供`Icons`类用于内置矢量图标,支持第三方图标库如FontAwesome。自定义字体可通过添加字体文件至`assets`目录并配置`pubspec.yaml`,然后使用`TextStyle`设置。借助`ThemeData`,开发者能统一管理应用主题样式,局部样式可覆盖全局。通过集中管理样式,提升代码复用性和应用一致性。
173 0
【Flutter前端技术开发专栏】Flutter中的图标、字体与样式管理
|
6月前
|
存储 JavaScript 前端开发
【Flutter 前端技术开发专栏】Flutter 中的状态管理框架(如 Provider、Redux 等)
【4月更文挑战第30天】本文探讨了 Flutter 开发中的状态管理,重点介绍了 Provider 和 Redux 两种框架。Provider 以其简单易用性适合初学者和小项目,而 Redux 则适用于大型复杂应用,保证状态一致性。此外,还提到了 Riverpod 和 BLoC 等其他框架。选择框架时要考虑项目规模、团队技术水平和个人偏好。文章通过购物车应用示例展示了不同框架的使用,并展望了状态管理框架的未来发展。
172 0
【Flutter 前端技术开发专栏】Flutter 中的状态管理框架(如 Provider、Redux 等)
|
6月前
|
JavaScript 前端开发 开发者
【Flutter前端技术开发专栏】Flutter中的Widget与状态管理
【4月更文挑战第30天】本文探讨了Flutter的Widget和状态管理。Widget是Flutter构建UI的基础,分为有状态和无状态两种。状态管理确保UI随应用状态变化更新,影响应用性能和可维护性。文章介绍了`setState`、`Provider`、`Riverpod`、`Bloc`和`Redux`等状态管理方法,并通过计数器应用展示了其实现。选择合适的状态管理策略对高效开发至关重要。
85 0
【Flutter前端技术开发专栏】Flutter中的Widget与状态管理
|
1月前
|
Android开发 iOS开发 容器
鸿蒙harmonyos next flutter混合开发之开发FFI plugin
鸿蒙harmonyos next flutter混合开发之开发FFI plugin