Flutter &鸿蒙next中的路由使用详解【基础使用】

简介: 本文介绍了 Flutter 路由系统的使用方法,包括基本路由、命名路由、参数传递、返回参数和动态路由。通过 `Navigator` 类实现页面跳转,支持简单和复杂参数的传递,并可通过 `onGenerateRoute` 实现更灵活的动态路由管理。示例代码展示了如何在实际项目中应用这些技术,帮助开发者构建清晰、易于维护的导航结构。

写在前面

  1. 基本路由
    基本路由通过 Navigator 类实现。你可以使用 Navigator.push 方法来导航到新页面,使用 Navigator.pop 返回。

import 'package:flutter/material.dart';

class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Home Page')),
body: Center(
child: ElevatedButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondPage()),
);
},
child: Text('Go to Second Page'),
),
),
);
}
}

class SecondPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Second Page')),
body: Center(
child: ElevatedButton(
onPressed: () {
Navigator.pop(context);
},
child: Text('Back to Home Page'),
),
),
);
}
}

  1. 命名路由
    命名路由允许你以字符串形式定义路由,便于管理和维护。在 MaterialApp 中定义路由:

import 'package:flutter/material.dart';

void main() {
runApp(MyApp());
}

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Named Routes Example',
initialRoute: '/',
routes: {
'/': (context) => HomePage(),
'/second': (context) => SecondPage(),
},
);
}
}

导航到命名路由:

Navigator.pushNamed(context, '/second');

  1. 传递参数
    3.1 简单参数传递
    你可以通过构造函数传递参数。例如:

class SecondPage extends StatelessWidget {
final String message;

SecondPage({required this.message});

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Second Page')),
body: Center(child: Text(message)),
);
}
}

// 使用命名路由传递参数
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => SecondPage(message: 'Hello from Home!'),
),
);

3.2 复杂参数传递
在复杂场景中,参数可以是对象。创建一个数据模型并在页面间传递:

class User {
final String name;
final int age;

User(this.name, this.age);
}

// 在 SecondPage 中接收 User 对象
class SecondPage extends StatelessWidget {
final User user;

SecondPage({required this.user});

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('User Details')),
body: Center(child: Text('Name: ${user.name}, Age: ${user.age}')),
);
}
}

// 使用 Navigator 传递 User 对象
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => SecondPage(user: User('Alice', 30)),
),
);

  1. 返回参数
    从一个页面返回参数可以使用 Navigator.pop,同时传递返回值:

final result = await Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondPage()),
);

// 在 HomePage 中处理返回的结果
print('Received: $result');

  1. 动态路由
    如果路由参数较多或复杂,使用动态路由可以更加灵活。可以在 onGenerateRoute 中定义路由:

MaterialApp(
onGenerateRoute: (settings) {
if (settings.name == '/user') {
final User user = settings.arguments as User;
return MaterialPageRoute(
builder: (context) => UserPage(user: user),
);
}
return null; // 其他路由
},
);

// 使用动态路由
Navigator.pushNamed(
context,
'/user',
arguments: User('Bob', 25),
);

写在最后
Flutter 的路由系统强大且灵活,能够满足从简单到复杂的多种需求。通过命名路由、参数传递和动态路由的结合,你可以构建出清晰、易于维护的导航结构。通过上述示例,你可以根据自己的项目需求灵活运用这些路由技巧。
————————————————

                        版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/lbcyllqj/article/details/143196729

目录
相关文章
|
5月前
|
监控 JavaScript 编译器
从“天书”到源码:HarmonyOS NEXT 崩溃堆栈解析实战指南
本文详解如何利用 hiAppEvent 监控并获取 sourcemap、debug so 等核心产物,剖析了 hstack 工具如何将混淆的 Native 与 ArkTS 堆栈还原为源码,助力开发者掌握异常分析方法,提升应用稳定性。
676 70
|
6月前
|
人工智能 API 网络架构
HarmonyOS Navigation实现导航与路由切换
HarmonyOS Navigation实现导航与路由切换
267 0
HarmonyOS Navigation实现导航与路由切换
|
8月前
|
移动开发 前端开发 JavaScript
鸿蒙NEXT时代你所不知道的全平台跨端框架:CMP、Kuikly、Lynx、uni-app x等
本篇基于当前各大活跃的跨端框架的现状,对比当前它们的情况和未来的可能,帮助你在选择框架时更好理解它们的特点和差异。
864 0
|
6月前
|
存储 缓存 5G
鸿蒙 HarmonyOS NEXT端云一体化开发-云存储篇
本文介绍用户登录后获取昵称、头像的方法,包括通过云端API和AppStorage两种方式,并实现上传头像至云存储及更新用户信息。同时解决图片缓存问题,添加上传进度提示,支持自动登录判断,提升用户体验。
274 1
|
6月前
|
存储 负载均衡 数据库
鸿蒙 HarmonyOS NEXT端云一体化开发-云函数篇
本文介绍基于华为AGC的端云一体化开发流程,涵盖项目创建、云函数开通、应用配置及DevEco集成。重点讲解云函数的编写、部署、调用与传参,并涉及环境变量设置、负载均衡、重试机制与熔断策略等高阶特性,助力开发者高效构建稳定云端服务。
639 1
鸿蒙 HarmonyOS NEXT端云一体化开发-云函数篇
|
6月前
|
存储 JSON 数据建模
鸿蒙 HarmonyOS NEXT端云一体化开发-云数据库篇
云数据库采用存储区、对象类型、对象三级结构,支持灵活的数据建模与权限管理,可通过AGC平台或本地项目初始化,实现数据的增删改查及端侧高效调用。
302 1
|
6月前
|
存储 开发者 容器
鸿蒙 HarmonyOS NEXT星河版APP应用开发-ArkTS面向对象及组件化UI开发使用实例
本文介绍了ArkTS语言中的Class类、泛型、接口、模块化、自定义组件及状态管理等核心概念,并结合代码示例讲解了对象属性、构造方法、继承、静态成员、访问修饰符等内容,同时涵盖了路由管理、生命周期和Stage模型等应用开发关键知识点。
496 1
鸿蒙 HarmonyOS NEXT星河版APP应用开发-ArkTS面向对象及组件化UI开发使用实例
|
6月前
鸿蒙 HarmonyOS NEXT星河版APP应用开发-阶段三
本文介绍了UI开发中的样式复用与组件构建技术,涵盖@Extend、@Styles和@Builder的使用方法,并通过Swiper轮播、Scroll滚动、Tabs导航等常用组件实现典型界面效果,结合生肖抽卡、小米轮播、回顶按钮等案例,展示实际应用技巧。
178 1
|
6月前
鸿蒙 HarmonyOS NEXT星河版APP应用开发-阶段二
本文介绍鸿蒙应用界面开发中的弹性布局(Flex)、绝对定位、层叠布局及ArkTS语法进阶,涵盖字符串拼接、类型转换、数组操作、条件与循环语句,并结合B站视频卡、支付宝首页等案例,深入讲解点击事件、状态管理与界面交互功能。
392 1
鸿蒙 HarmonyOS NEXT星河版APP应用开发-阶段二
|
6月前
|
传感器 监控 安全
HarmonyOS NEXT 5.0 的星闪(NearLink)开发应用案例
V哥分享HarmonyOS NEXT 5.0星闪开发实战,涵盖智能车钥匙无感解锁与工业传感器监控。低延迟、高可靠,代码完整,速来学习!
915 0

热门文章

最新文章