You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter如何在其他页面读取SharedPreferences存储的登录用户数据

解决方案

步骤1:提前初始化SPUtil

你封装的SPUtil需要先完成初始化才能正常读写数据,建议在应用启动时就完成初始化,修改main.dart的启动逻辑:

void main() async {
  // 确保Flutter框架初始化完成
  WidgetsFlutterBinding.ensureInitialized();
  // 初始化SPUtil
  await SPUtil.getInstance();
  runApp(const MyApp());
}

步骤2:在HomePage中取出并解析用户数据

你存入的是User对象序列化后的JSON字符串,取出时反向解析为User对象即可直接使用id、邮箱、用户名等字段,示例代码如下:

import 'dart:convert';
import 'package:flutter/material.dart';
// 导入你自己的SPUtil和User实体类
import 'sputils.dart';
import 'user.dart';

class HomePage extends StatefulWidget {
  const HomePage({super.key});

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  User? _currentUser;

  @override
  void initState() {
    super.initState();
    _loadUserInfo();
  }

  void _loadUserInfo() {
    // 取出本地存储的用户JSON字符串
    String userStr = SPUtil.getString('user');
    if (userStr.isNotEmpty) {
      // 解析为User对象
      Map<String, dynamic> userMap = jsonDecode(userStr);
      setState(() {
        _currentUser = User.fromJson(userMap);
      });
    } else {
      // 未取到用户信息说明未登录,可自行处理跳转到登录页的逻辑
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("首页")),
      body: _currentUser == null 
        ? const Center(child: Text("请先登录"))
        : Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: [
              Text("用户ID:${_currentUser?.id}"),
              Text("用户名:${_currentUser?.username}"),
              Text("邮箱:${_currentUser?.email}"),
            ],
          ),
    );
  }
}

优化建议

  • 如果多个页面都需要用到用户信息,建议把用户信息抽为全局状态管理(Provider、Riverpod、Bloc均可),避免每个页面重复写读取解析的逻辑
  • 用户退出登录时调用SPUtil.clearString('user')即可清除本地存储的用户数据

内容的提问来源于stack exchange,提问作者Olaniyan Adewale

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 00:15:03