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

flutter: 用getxservice管理状态

一,安装所需的库:flutter_secure_storage

地址:

https://pub.dev/packages/flutter_secure_storage/install

安装:

dependencies:flutter_secure_storage: ^10.0.0

二,代码

service

import 'package:get/get.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';class AuthService extends GetxService {final storage = FlutterSecureStorage();//是否登录RxBool isLoggedIn = false.obs;//用户tokenRxString userToken = "".obs;//登录Future<void> login(String tokenStr) async {await storage.write(key: 'token', value: tokenStr);isLoggedIn.value = true;userToken.value = tokenStr;}//退出Future<void> logout() async {await storage.delete(key: 'token');isLoggedIn.value = false;userToken.value = "";}//从磁盘读取保存的数据Future<void> getDataFromDisk() async {String? value = await storage.read(key: 'token');if (value == null) {print("数据不存在");isLoggedIn.value = false;userToken.value = "";} else {print("读取到数据"+value);isLoggedIn.value = true;userToken.value = value;}}@overridevoid onInit() {super.onInit();getDataFromDisk();print('AuthService initialized');}

main中初始化

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'services/AuthService.dart';
import 'routes/routes.dart';void main() {Get.put(AuthService());runApp(const MyApp());
}class MyApp extends StatelessWidget {const MyApp({super.key});@overrideWidget build(BuildContext context) {return   GetMaterialApp(debugShowCheckedModeBanner: false, //去除debug图标defaultTransition: Transition.rightToLeft,   //指定动画theme: ThemeData(primarySwatch: Colors.red),initialRoute: "/",    //初始化页面getPages: APPage.routes,   //路由);}}

页面中调用:

import 'package:flutter/material.dart';
import 'package:get/get.dart';import '../services/AuthService.dart';class HomePage extends StatefulWidget {@overrideState<HomePage> createState() => _HomePageState();
}class _HomePageState extends State<HomePage>  {var authServ = Get.find<AuthService>();@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(backgroundColor: Theme.of(context).colorScheme.inversePrimary,title: const Text("home页面"),),body: Center(child:Column(children:[ElevatedButton(child: Text("跳转到detail页面"),onPressed: () {Get.toNamed("/detail",arguments: {"id":20,"name":"苏东坡新传",});},),SizedBox(height: 30,),Obx(() => Text('当前是否登录: ${authServ.isLoggedIn.value}')),Obx(() => Text('当前用户token: ${authServ.userToken.value}')),SizedBox(height: 30,),ElevatedButton(child: Text("登录"),onPressed: () async {authServ.login('老刘123321');},),SizedBox(height: 30,),ElevatedButton(child: Text("退出"),onPressed: () async {authServ.logout();},),],),),);}}

三,测试效果:

imageimage

http://www.jsqmd.com/news/425410/

相关文章:

  • 感受一下谷歌的语义识别能力 和 古老的每个关键词单独做一个站的玩法
  • 2026年诚信的景观灯光护栏厂家优质推荐 - 品牌鉴赏师
  • 【claude】拒绝为美军提供“黑暗版”Claude,Anthropic成首个被五角大楼列入“供应链风险”的美国AI公司
  • 碎碎念
  • 正确理解C++中的值语义:move
  • 2026年防爆声级计制造厂推荐,防爆认证噪声监测专业厂商 - 品牌鉴赏师
  • 华为OD技术面八股文_C++_01
  • 分布式系统高并发:缓存策略与限流方案实践
  • P15546 学习笔记
  • 【二分】BISHI85 【模板】整数域二分
  • 《深度解析!Agentic AI在智能制造潜力,提示工程架构师视角揭秘》
  • AI原生应用开发:Llama模型的10个高级用法
  • SVG Stroke 属性详解
  • 数据仓库监控体系搭建:从ETL到查询全链路监控
  • SQL ROUND() 函数详解
  • 解读大数据领域结构化数据的管理模式
  • 华为OD机考双机位C卷 - Alice的安全旅行 (Java Python JS GO C++ C)
  • 基于双层优化与二阶锥松弛模型的电动汽车时空调度策略:在MATLAB环境中的配电网研究
  • 从MVP到规模化:AI原生应用的成长路径
  • 2026年最受欢迎的三亚海鲜餐厅TOP5推荐,带你畅享鲜美海味盛宴
  • Aspose.Total for .NET 2026全系列来了,官方包
  • day100(3.1)——leetcode面试经典150
  • 2026年三亚湘菜餐厅对比推荐,必尝五大经典美味,让你领略湘味魅力
  • AI赋能,AI应用架构师重塑渠道管理格局
  • COMSOL氩气双层介质阻挡放电模型——利用等离子体模块的探讨
  • 微信小程序 springboot_uniapp的坭兴陶文化传承与创新系统的设计与实现_a8uyn972
  • 微信小程序 springboot_uniapp的大学生兼职推荐系统的设计与实现_ly2blc52
  • 流水线贴膜机:PLC与触摸屏程序详解,适合初学者学习的简单控制工艺及运动控制教程(支持博图V1...
  • 指针核心训练-位操作-随笔
  • HDFS助力大数据领域的数据高效存储