flutter 路由配置

get用法

  • 进入新页面
    Get.to(NextScreen());
  • back回退操作

使用场景: 关闭Dialogs、SnackBars或者退出当前页面

Get.back();

  • off类似于replace操作

它会替拿当新页面换掉当前页面,并且新页面左上角没有返回按钮,

Get.off(NextScreen());

  • offAll清空历史路由

该方法会清空我们之前打开过的页面,只留下新的页面

Get.offAll(NextScreen());

  • 接收新返回信息
    var data = await Get.to(Payment());

别名路由导航

// toNamed 导航到下一个页面
Get.toNamed(“/NextScreen”);

// 浏览并删除前一个页面
Get.offNamed(“/NextScreen”);

// 浏览并删除所有以前的页面
Get.offAllNamed(“/NextScreen”)

别名路由需要配置

这里的配置下方的动态路由配置类似,如果麻烦可以用下方的动态路由

目录 router/index.dart
import 'package:flutter/material.dart';
import 'package:shuiagechen/pages/login/index.dart';
import 'package:shuiagechen/pages/toolbar.dart';
import 'package:shuiagechen/splash.dart';
// 路由
class GlobalRouter{/// 路由/// 从非toolbar页面(子页面)跳转到toolbar页面(主页)实现:/// pushName到对应的路由,因为Toolbar是单例模式,所以只会创建一个/// pushName之后,在ToolBar,initState中获取当前的路由,实现切换页面static final _routes={// 过渡页"/":(BuildContext context,{Object? args})=>const SplashPage(),/// 主页面'/home': (BuildContext context, { Object? args}) => const Toolbar(),// 登录页'/login':(BuildContext context,{Object? args})=> login(),};static GlobalRouter? _singleton;GlobalRouter._internal();factory GlobalRouter() {return _singleton??GlobalRouter._internal();}/// 监听routeRoute? getRoutes(RouteSettings settings) {String? routeName = settings.name;final Function builder = GlobalRouter._routes[routeName] as Function;return MaterialPageRoute(settings: settings,builder: (BuildContext context) => builder(context, args: settings.arguments));}
}mian.dart中引入
GetMaterialApp(key: navigatorKey,title: 'APP模板',// 不显示debug标签debugShowCheckedModeBanner: false,initialRoute: '/',onGenerateRoute: router.getRoutes,)这样就可以在使用的页面使用别名路由跳转页面了Get.offNamed("/login"); //跳转到登录页

路由传参数

  • arguments传参
  • 问号传参(跟URL地址一样)
  • 动态路由(/:xxx)

发送任何参数都可以接收,不论是什么类型!甚至是类的实例!

Get.toNamed(“/NextScreen”, arguments: ‘这是一个字符串参数’);

  • 接收参数
    print(Get.arguments); // out: 这是一个字符串参数

问号参数

  • 只能接收字符串
    Get.offAllNamed(“/NextScreen?device=phone&id=111&name=liang”);
  • 通过Get.parameters获取值
    print(Get.parameters[‘id’]); // out: 111

动态路由

咱们在配置表中配置动态路由,他是通过Get.parameters接收

void main() {runApp(GetMaterialApp(initialRoute: '/',getPages: [GetPage(name: '/',page: () => MyHomePage(),),GetPage(name: '/profile/', // 没值匹配就写 / 在后面page: () => MyProfile(),),GetPage(name: '/profile/:user', // 如果有值 /:xxx 在后面page: () => UserProfile(),),GetPage(name: '/third',page: () => Third(),transition: Transition.cupertino  ),],));
}
  • 发送别名路由数据:
Get.toNamed("/profile/34954");// 在第二个页面上,通过参数获取数据
print(Get.parameters['user']);
// out: 34954

混合发送参数:

Get.toNamed("/profile/34954?flag=true");// 在第二个页面上,通过参数获取数据
print(Get.parameters['user']);
print(Get.parameters['flag']);
// out: 34954 true

中间件

  • 触发路由事件的时候,会回调GetMaterialApp里的一个回调方法routingCallback
GetMaterialApp(routingCallback: (routing) {if(routing.current == '/user') {openAds();}}
)
  • 如果没有使用GetMaterialApp,那么可以使用API来附加Middleware观察器。
void main() {runApp(MaterialApp(onGenerateRoute: Router.generateRoute,initialRoute: "/",navigatorKey: Get.key,navigatorObservers: [ // 基于这个来观察路由变化GetObserver(MiddleWare.observer), // HERE !!!],),);
}

三、免context导航

final snackBar = SnackBar(content: Text('Hi!'),action: SnackBarAction(label: 'I am a old and ugly snackbar :(',onPressed: (){}),
);
// 在小组件树中找到脚手架并使用它显示一个SnackBars。
Scaffold.of(context).showSnackBar(snackBar);
Get.snackbar('Hi', 'i am a modern snackbar');// 定制你的需求,随处可使用
Get.snackbar("Hey i'm a Get SnackBar!", // title"It's unbelievable! I'm using SnackBar without context, without boilerplate, without Scaffold, it is something truly amazing!", // messageicon: Icon(Icons.alarm),shouldIconPulse: true,onTap:(){},barBlur: 20,isDismissible: true,duration: Duration(seconds: 3),
);
// 定制一个 Dialog
Get.dialog(YourDialogWidget());

Get的路由嵌套非常简单,不需要context而是通过id寻找导航栈

Navigator(key: Get.nestedKey(1), // 创建一个keyinitialRoute: '/',onGenerateRoute: (settings) {if (settings.name == '/') {return GetPageRoute(page: () => Scaffold(appBar: AppBar(title: Text("Main"),),body: Center(child: TextButton(color: Colors.blue,onPressed: () {Get.toNamed('/second', id:1); // 按照key以及路由来路径来导航,如果没找到会报错},child: Text("Go to second"),),),),);} else if (settings.name == '/second') {return GetPageRoute(page: () => Center(child: Scaffold(appBar: AppBar(title: Text("Main"),),body: Center(child:  Text("second")),),),);}}
),

GetMaterialApp的常用配置

void main() {runApp(GetMaterialApp(// 初始路径initialRoute: '/',// 404页面unknownRoute: GetPage(name: '/notfound', page: () => UnknownRoutePage()),// 中间件routingCallback: (routing) {if(routing.current == '/user') {openAds();}},// 路由配置表getPages: [GetPage(name: '/', page: () => MyHomePage()),GetPage(name: '/second', page: () => Second()),],));
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/239493.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Day68力扣打卡

打卡记录 得到山形数组的最少删除次数&#xff08;线性DP 前后缀分解&#xff09; 链接 class Solution:def minimumMountainRemovals(self, nums: List[int]) -> int:n len(nums)pre, suf [1] * n, [1] * nfor i in range(n):for j in range(i):if nums[j] < nums[…

Go 随机密码

一.Go实现随机密码 随机密码 package mainimport ("fmt""math/rand""os""strconv""time" )func RandomPassword(num int) {length : numif len(os.Args) > 1 {arg : os.Args[1]i, err : strconv.ParseInt(arg, 10, 6…

HarmonyOS - macOS 上搭建 鸿蒙开发环境

文章目录 安装 DevEco第一个 App1、工程基本信息设置2、安装设备3、运行工程 安装 DevEco 软件下载地址&#xff1a; https://developer.harmonyos.com/cn/develop/deveco-studio 今天我下载 DevEco Studio 3.1.1 Release - Mac 版本 解压后是一个 dmg 文件&#xff08;也不必…

【数据分析】数据指标的分类及应用场景

数据分析之数据指标的分类 数据分析离不开对关键指标的分析与跟踪&#xff0c;这些指标通常与具体的业务直接相关。好的指标能够促进业务的健康发展&#xff0c;因为指标与业务目标是一致的&#xff0c;此时指标就能反映业务变化&#xff0c;指标发生变化&#xff0c;行动也发…

Grafana高可用-LDAP

一. grafana高可用 1. 迁移之前的 grafana sqlitedump.sh #!/bin/bash DB$1 TABLES$(sqlite3 $DB .tables | sed -r s/(\S)\s(\S)/\1\n\2/g | grep -v migration_log) for t in $TABLES; doecho "TRUNCATE TABLE $t;" done for t in $TABLES; doecho -e ".mode…

在centos上安装python人脸库face_recognition

前段时间看了看python和face_recognition&#xff0c;用来识别人脸和对比人脸&#xff0c;发现在centos上安装face_recognition还是费了点小劲挖了点小坑的&#xff0c;曲曲折折东拼西凑到处查资料终于鼓捣好了&#xff0c;特记录一下&#xff1b; 在centos上安装face_recogni…

高效接口测试:Python自动化框架设计与实现

引言 在软件开发过程中&#xff0c;接口测试是非常重要的一环。它可以帮助我们确保系统的各个模块之间的交互是否正常&#xff0c;从而提高软件的质量和稳定性。本文将介绍如何使用Python编写一个自动化接口测试框架&#xff0c;包括框架搭建、工具选择、目录结构、配置等内容…

Linux中vim中进行替换/批量替换

Linux中vim中进行替换/批量替换 一:在 Vim 中进行文本替换的操作是通过使用 :s&#xff08;substitute&#xff09;命令来实现的。这里是一些基本的替换命令 替换当前行的第一个匹配项: :s/old/new/这将替换当前行中第一个出现的 “old” 为 “new”。 替换当前行的所有匹配项…

大模型重构云计算:AI原生或将改变格局

摘要&#xff1a;随着AI技术的快速发展&#xff0c;大模型正逐渐改变云计算的格局。本文将深入探讨大模型如何重构云计算&#xff0c;并分析其对云计算的影响。 一、开篇引言 近年来&#xff0c;人工智能技术的飞速发展&#xff0c;特别是大模型的崛起&#xff0c;正在对云计算…

Linux ContOS7 日志管理(rsyslog)

目录 01. rsyslog 记录日志程序 02.日志文件 03.日志等级 Linux 日志文件是记录 Linux 系统运行信息的文件。它们类似于人类的日记&#xff0c;记录了系统的各种活动&#xff0c;如用户登录、进程启动、错误消息等。 Linux 日志文件通常存储在 /var/log/ 目录中。该目录包含…

Linux应用程序管理(rpm yum 源码安装)

一.Linux应用程序基础 当我们主机安装Linux操作系统时候&#xff0c;也会同时安装一些软件或网络服务等等&#xff0c;但是随着系统一起安装的软件包毕竟他是少数的&#xff0c;能够实现的功能也是有限的&#xff0c;如果需要实现更丰富的功能&#xff0c;那就需要安装应用程序…

构建数字化金融生态系统:云原生的创新方法

内容来自演讲&#xff1a;曾祥龙 | DaoCloud | 解决方案架构师 摘要 本文探讨了金融企业在实施云原生体系时面临的挑战&#xff0c;包括复杂性、安全、数据持久化、服务网格使用和高可用容灾架构等。针对网络管理复杂性&#xff0c;文章提出了Spiderpool开源项目&#xff0c;…

The Cherno C++笔记 03

目录 Part 07 How the C Linker Works 1.链接 2.编译链接过程中出现的错误 2.1 缺少入口函数 注意:如何区分编译错误还是链接错误 注意&#xff1a;入口点可以自己设置 2.2 找不到自定义函数 2.2.1缺少声明 2.2.2自定义函数与引用函数不一致 2.3 在头文件中放入定义 …

JDK1.8新特性Lambda表达式简化if-else里都有for循环的优化方式

在日常开发过程当中&#xff0c;能把代码写出来&#xff0c;不一定就意味着能把代码写好&#xff0c;说不准&#xff0c;所写的代码在他人看来&#xff0c;其实就是一坨乱七八糟的翔&#xff0c;因此&#xff0c;代码简化尤其重要&#xff0c;我曾经遇到过这样一个类型的代码&a…

git入门以及如何推送代码到云端

Gitee&#xff08;码云&#xff09;是开源中国于2013年推出的基于Git的代码托管平台、企业级研发效能平台&#xff0c;提供中国本土化的代码托管服务。 地址&#xff1a; Gitee - 基于 Git 的代码托管和研发协作平台 步骤1&#xff1a;创建远程仓库 在Gitee上创建一个新的远…

c# OpenCV 检测(斑点检测、边缘检测、轮廓检测)(五)

在C#中使用OpenCV进行图像处理时&#xff0c;可以使用不同的算法和函数来实现斑点检测、边缘检测和轮廓检测。 斑点检测边缘检测轮廓检测 一、斑点检测&#xff08;Blob&#xff09; 斑点检测是指在图像中找到明亮或暗的小区域&#xff08;通常表示为斑点&#xff09;&#…

java类和对象的思想概述

0.面向对象Object OOP——名人名言&#xff1a;类是写出来的&#xff0c;对象是new出来的 **> 学习面向对象的三条路线 java类以及类成员&#xff1a;&#xff08;重点&#xff09;类成员——属性、方法、构造器、&#xff08;熟悉&#xff09;代码块、内部类面向对象特征&…

【论文解读】CNN-Based Fast HEVC Quantization Parameter Mode Decision

时间&#xff1a;2019 年 级别&#xff1a;SCI 机构&#xff1a;南京信息工程大学 摘要 随着多媒体呈现技术、图像采集技术和互联网行业的发展&#xff0c;远程通信的方式已经从以前的书信、音频转变为现在的音频/视频。和 视频在工作、学习和娱乐中的比例不断提高&#xff0…

bugku-misc-这是一张单纯的图片

附件&#xff1a;图片 1、查看属性 2、010 whex打开看看 可以看到html编码&#xff0c;将文件后缀&#xff0c;改成html&#xff0c;打开 即可

JavaScript--明明白白Promise (Park One)

明明白白Promise (Park One) Promise是一种用于处理异步操作的特殊对象。它代表了一个尚未完成但最终会完成的操作&#xff0c;并可以在操作完成后返回结果或错误。 Promise有三种状态&#xff1a;pending&#xff08;进行中&#xff09;、fulfilled&#xff08;已完成&#…