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;
  //用户token
  RxString 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;
    }
  }

  @override
  void 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});

  @override
  Widget 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 {
  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage>  {
  var authServ = Get.find<AuthService>();
  @override
  Widget 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

posted @ 2026-03-01 22:08  刘宏缔的架构森林  阅读(0)  评论(0)    收藏  举报