当前位置: 首页 > news >正文

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

✅近期推荐:求职神器

https://bbs.csdn.net/topics/619384540


🔥欢迎大家订阅系列专栏:flutter_鸿蒙next
💬淼学派语录:只有不断的否认自己和肯定自己,才能走出弯曲不平的泥泞路,因为平坦的大路,太tm无趣了!

 写在前面

1. 基本路由

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

import 'package:flutter/material.dart';class HomePage extends StatelessWidget {@overrideWidget 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 {@overrideWidget 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'),),),);}
}
2. 命名路由

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

import 'package:flutter/material.dart';void main() {runApp(MyApp());
}class MyApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return MaterialApp(title: 'Named Routes Example',initialRoute: '/',routes: {'/': (context) => HomePage(),'/second': (context) => SecondPage(),},);}
}

导航到命名路由:

Navigator.pushNamed(context, '/second');
3. 传递参数
3.1 简单参数传递

你可以通过构造函数传递参数。例如:

class SecondPage extends StatelessWidget {final String message;SecondPage({required this.message});@overrideWidget 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});@overrideWidget 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)),),
);
4. 返回参数

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

final result = await Navigator.push(context,MaterialPageRoute(builder: (context) => SecondPage()),
);// 在 HomePage 中处理返回的结果
print('Received: $result');
5. 动态路由

如果路由参数较多或复杂,使用动态路由可以更加灵活。可以在 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 的路由系统强大且灵活,能够满足从简单到复杂的多种需求。通过命名路由、参数传递和动态路由的结合,你可以构建出清晰、易于维护的导航结构。通过上述示例,你可以根据自己的项目需求灵活运用这些路由技巧。

http://www.lryc.cn/news/470782.html

相关文章:

  • 基于SSM+小程序民宿短租管理系统(民宿1)
  • SQL LIKE 操作符
  • 七款主流图纸加密软件强力推荐|2024年CAD图纸加密保护指南
  • 【STM32】单片机ADC原理详解及应用编程
  • C# 委托简述
  • 瑞吉外卖项目
  • Docker:4、龙晰(Anolis OS 8.8)宝塔面板安装
  • 多端项目开发全流程详解 - 从需求分析到多端部署
  • 4.5KB原生html+js+css实现图片打印位置的坐标和尺寸获取
  • 智诊小助手-记录模式选择
  • JDBC: Java数据库连接的桥梁
  • 英伟达GPU算力【自用】
  • 「C/C++」C++11 之 智能指针
  • 算法面试小抄
  • 当有违法数据时,浏览器不解析,返回了undefined,导致数据不解析
  • 在MySQL中ORDER BY使用的那种排序算法
  • 学习threejs,使用粒子实现雨滴特效
  • 分布式-单元化架构1
  • C++模板、STL
  • 计算机视觉中的点算子:从零开始构建
  • 国际中文教育知识图谱问答
  • 酒店大板轻触开关与传统的开关有什么区别
  • 【蓝桥杯选拔赛真题78】python电话号码 第十五届青少年组蓝桥杯python选拔赛真题 算法思维真题解析
  • 对比两个json串的diff,支持map的深度递归
  • 【我的创作纪念日1024】
  • 萤石设备视频接入平台EasyCVR私有化视频平台变电站如何实现远程集中监控?
  • 什么是多线程?请描述 Java 中实现多线程的基本方式?
  • Dynamic Sparse No Training: Training-Free Fine-tuning for Sparse LLMs
  • 解决n+1查询数据库问题
  • DICOM 基础知识:深入理解DICOM数据结构与标签说明