Getx学习笔记之中间件鉴权
目录
前言
一、实现步骤
1.添加依赖
2.创建鉴权中间件
3.定义路由
4.设置初始路由
5.模拟登陆状态
二、Getx鉴权步骤总结
三、本文demo示例
四、参考文章
前言
在 Flutter 中,使用 GetX 可以很方便地实现中间件鉴权(Authentication)。中间件可以在导航之前拦截路由请求,并进行相应的处理,例如检查用户是否已登录。如果未登录,则可以重定向到登录页面。
本文通过一个登陆页面的例子,介绍下Getx如何实现中间件鉴权。
一、实现步骤
我们看一下我们要实现的页面:

图1.鉴权页面
1.添加依赖
在 pubspec.yaml 文件中添加 GetX 依赖:
dependencies:
flutter:
sdk: flutter
get: ^4.6.6shared_preferences: ^2.2.3
2.创建鉴权中间件
创建一个中间件类,用于检查用户的登录状态。
这里是模仿登陆页面,登陆成功之后把登陆成功之后的标记使用SharedPreference保存在本地。中间类从本地读取这个标记,如果没有登陆,重定向到登陆页面。
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../routes.dart';class AuthMiddleware extends GetMiddleware {@overrideRouteSettings? redirect(String? route) {// 检查用户是否已登录// 从 SharedPreferences 中获取登录状态SharedPreferences.getInstance().then((prefs) {bool isLoggedIn = prefs.getBool('isLoggedIn') ?? false;if (!isLoggedIn) {return const RouteSettings(name: Routes.login); // 重定向到登录页面}return null; // 继续导航});return null; // 继续导航}
}
3.定义路由
在路由配置中应用中间件。
这里仅有两个页面,首页和登陆页面。实际开发的过程中可能页面比较多,有些页面即使不登录也可以进入,有些页面必须登陆之后才能进入。
import 'package:get/get.dart';
import 'package:your_app_name/middlewares/auth_middleware.dart';
import 'package:your_app_name/pages/home_page.dart';
import 'package:your_app_name/pages/login_page.dart';class Routes {static const home = '/home';static const login = '/login';static final routes = [GetPage(name: home,page: () => HomePage(),middlewares: [AuthMiddleware()], // 应用鉴权中间件),GetPage(name: login,page: () => LoginPage(),),];
}
4.设置初始路由
在应用程序的入口文件中,设置 GetX 路由。
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:your_app_name/routes/routes.dart';void main() {runApp(MyApp());
}class MyApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return GetMaterialApp(initialRoute: Routes.home,getPages: Routes.routes,);}
}
5.模拟登陆状态
在实际应用中,你可能会从持久存储(如 SharedPreferences)或服务器端获取用户的登录状态。以下是一个简单的示例,这里仅做演示,逻辑比较简单,用户输入用户名和密码之后,默认用户登录,并且把登陆的凭证保存在本地,同时在应用启动时检查登录状态:
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:your_app_name/routes/routes.dart';void main() async {WidgetsFlutterBinding.ensureInitialized();final prefs = await SharedPreferences.getInstance();final isLoggedIn = prefs.getBool('isLoggedIn') ?? false;runApp(MyApp(isLoggedIn: isLoggedIn));
}class MyApp extends StatelessWidget {final bool isLoggedIn;MyApp({required this.isLoggedIn});@overrideWidget build(BuildContext context) {return GetMaterialApp(initialRoute: isLoggedIn ? Routes.home : Routes.login,getPages: Routes.routes,);}
}
二、Getx鉴权步骤总结
1.自定义一个AuthMiddleware类:实现自定义的中间件类 AuthMiddleware,继承 GetMiddleware。在 redirect 方法中检查用户的登录状态,若未登录则重定向到登录页面。
2.Routes:定义应用的路由配置,在需要鉴权的路由上应用 AuthMiddleware。
3.使用 GetMaterialApp 设置路由和初始页面,根据用户的登录状态设置初始路由。
通过上述步骤,你可以在 GetX 中实现中间件鉴权,确保未登录用户无法访问需要鉴权的页面。根据实际需求,你可以进一步完善鉴权逻辑,例如集成第三方认证服务、处理不同类型的用户权限等。
三、本文demo示例
本文的代码在这里。
四、参考文章
1.Getx官方文档
2.Getx路由鉴权
相关文章:
Getx学习笔记之中间件鉴权
目录 前言 一、实现步骤 1.添加依赖 2.创建鉴权中间件 3.定义路由 4.设置初始路由 5.模拟登陆状态 二、Getx鉴权步骤总结 三、本文demo示例 四、参考文章 前言 在 Flutter 中,使用 GetX 可以很方便地实现中间件鉴权(Authentication)…...
介绍 Elasticsearch 中的 Learning to Tank - 学习排名
作者:来自 Elastic Aurlien Foucret 从 Elasticsearch 8.13 开始,我们提供了原生集成到 Elasticsearch 中的学习排名 (learning to rank - LTR) 实现。LTR 使用经过训练的机器学习 (ML) 模型为你的搜索引擎构建排名功能。通常,该模型用作第二…...
2024年计算机软考中级【硬件工程师】面试题目汇总(附答案)
硬件工程师面试题汇总分析 1、解释一下同步电路和异步电路 解题思路 同步电路和异步电路是指同步时序电路和异步时序电路。由于存储电路中触发器的动作特点不同,因此可以把时序电路分为同步时序电路和异步时序电路两种。同步时序电路所有的触发器状态的变化都是在同…...
ThinkPad改安装Windows7系统的操作步骤
ThinkPad:改安装Windows7系统的操作步骤 一、BIOS设置 1、先重新启动计算机,并按下笔记本键盘上“F1”键进入笔记本的BIOS设置界面。 2、进入BIOS设置界面后,按下键盘上“→”键将菜单移动至“Restart“项目,按下键盘上“↓”按键…...
微软Edge浏览器全解析教程
微软Edge浏览器全解析教程 微软Edge浏览器,作为微软公司精心打造的一款现代化网页浏览器,自其首次发布以来,凭借其卓越的性能、出色的用户体验和不断迭代的功能,赢得了广大用户的青睐。本文将全面解析微软Edge浏览器的各个方面&a…...
【过题记录】7.20
前两题一直在打模拟赛,有点忙,就没更 Red Playing Cards 算法:动态规划 其实这就是一个线段覆盖问题,只不过大线段能够包含小线段。 这就启发我们,对于每个大线段分别跑一个dp,合并在他内部的小线段。而后…...
Linux系统学习日记——vim操作手册
Vim编辑器是linux下的一个命令行编辑器,类似于我们windows下的记事本。 目录 打开文件 编辑 保存退出 打开文件 打开 hello.c不存在也可以打开,保存时vim会自动创建。 效果 Vim打开时,处于命令模式,即执行命令的模式&#x…...
【深度学习图片】图片清洗,只留下图像中只有一张人脸的,而且人脸是全的
环境: conda install pytorch torchvision torchaudio pytorch-cuda11.8 -c pytorch -c nvidia -ypip install onnx1.15 onnxruntime-gpu1.17pip install insightface0.7.3pip install opencv-pythonpip install gradio图片清洗,只留下图像中只有一张人脸…...
如何在 PostgreSQL 中处理海量数据的存储和检索?
🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会!📚领书:PostgreSQL 入门到精通.pdf 文章目录 如何在 PostgreSQL 中处理海量数据的存储和检索?一、优化表结构设计二、分区技术三、数据压…...
【中项】系统集成项目管理工程师-第2章 信息技术发展-2.2新一代信息技术及应用-2.2.1物联网与2.2.2云计算
前言:系统集成项目管理工程师专业,现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试,全称为“全国计算机与软件专业技术资格(水平)考试”&…...
Redis集群的主从复制原理-全量复制和增量复制-哨兵机制
Redis集群的主从复制原理-全量复制和增量复制-哨兵机制 作用 数据备份 这一点直观,因为现在有很多节点,每个节点都保存了原始数据的备份. 读写分离 这一点主要是当发生读写的时候,读数据的操作大部分都会进入到从节点,而写数据的操作都会进入到主节点&…...
23年阿里淘天笔试题 | 卡码网模拟
第一题 字典序最小的 01 字符串 解题思路: 模拟,统计遇到的连续的1的个数记为num,直到遇到0,如果k>num,直接将第一个1置为0,将遇到的0置为1,否则将第一个1偏置num-k个位置置为0࿰…...
【SpringBoot】单元测试之测试Service方法
测试Service方法 SpringBootTest public class UserServiceTest{ Autowired private UserService userService; Test public void findOne () throws Exception{ Assert.assertEquals("1002",userService.findOne()); } } 测试Controller接口方法 Runwith(S…...
剪辑师和小白都能用的AI解说神器,一键把短剧变解说视频-手把手教程-2024
为什么短剧、综艺、电影和电视剧需要以解说形式在抖音、快手和TikTok推广? 此类专业影视内容由于时间过长、平台用户的习惯、算法去重需求和版权问题,专业的影视综节目通常需要用解说类型的视频来不断重复的宣发剧集。具体的原因如下: 1. 视…...
我去,怎么http全变https了
项目场景: 在公司做的一个某地可视化项目。 部署采用的是前后端分离部署,图片等静态资源请求一台minio服务器。 项目平台用的是http 图片资源的服务器用的是https 问题描述 在以https请求图片资源时,图片请求成功报200。 【现象1】: 继图…...
IDEA的详细设置
《IDEA破解、配置、使用技巧与实战教程》系列文章目录 第一章 IDEA破解与HelloWorld的实战编写 第二章 IDEA的详细设置 第三章 IDEA的工程与模块管理 第四章 IDEA的常见代码模板的使用 第五章 IDEA中常用的快捷键 第六章 IDEA的断点调试(Debug) 第七章 …...
为什么Spring选择使用容器来管理对象,而不是直接使用new
为什么Spring选择使用容器来管理对象,而不是直接使用new 在Java应用程序开发中,对象的创建和管理是一项基础且关键的任务。传统上,开发者习惯于使用new关键字直接在代码中实例化对象。然而,随着应用程序规模的扩大和复杂度的增加…...
腾讯云发送短信验证码
1、在腾讯云平台中 开通短信服务 2、发送短信 2.1引用jar包 <dependency><groupId>com.tencentcloudapi</groupId><artifactId>tencentcloud-sdk-java-sms</artifactId><version>3.1.1043</version> </dependency>2.2 发送短…...
嵌入式人工智能(13-基于树莓派4B的指纹识别-AS608)
1、指纹识别模块 指纹识别是一种生物识别技术,通过分析人体指纹的纹理特征来进行身份验证。每个人的指纹纹路都是独一无二的,通过将指纹与事先存储的指纹数据库进行比对,可以确定是否为同一人。指纹识别在安全领域得到广泛应用,例…...
【Vue】`v-on` 指令详解:事件绑定与处理的全面指南
文章目录 一、v-on 指令概述缩写语法 二、v-on 的基本用法1. 绑定方法2. 内联处理器 三、v-on 指令的高级用法1. 事件修饰符.stop.prevent.capture.self.once 2. 按键修饰符.enter自定义按键修饰符 3. 系统修饰符 四、v-on 指令的实际应用1. 表单处理模板部分 (<template>…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
