如何在GetxController中读取GetStorage数据并转为User对象
解决方案
首先要确保你的User类具备正确的JSON反序列化能力,再通过以下步骤将存储的字符串转为User对象:
1. 确认User类的序列化/反序列化实现
如果使用json_serializable生成代码,你应该已经有userFromJson(对应User.fromJson)和userToJson方法;如果是手写实现,参考下面的示例:
class User { final int id; final String name; final String? email; User({required this.id, required this.name, this.email}); // 从JSON Map转User对象 factory User.fromJson(Map<String, dynamic> json) { return User( id: json['id'] as int, name: json['name'] as String, email: json['email'] as String?, ); } // User对象转JSON Map Map<String, dynamic> toJson() { return { 'id': id, 'name': name, 'email': email, }; } }
2. 修改UserHomeController实现对象转换
更新控制器中的getter,读取字符串后解析为User对象:
import 'dart:convert'; import 'package:get/get.dart'; import 'package:get_storage/get_storage.dart'; class UserHomeController extends GetxController { final box = GetStorage(); User? get user { final userString = box.read<String?>('user'); if (userString == null || userString.isEmpty) return null; try { // 如果你用json_serializable,替换为userFromJson(jsonDecode(userString)) return User.fromJson(jsonDecode(userString)); } catch (e) { print('解析用户数据失败: $e'); return null; } } @override Future<void> onInit() async { super.onInit(); } }
3. 存储用户数据的正确方式
存入数据时,要先将User对象转为JSON字符串:
// 示例:存储用户数据 final user = User(id: 1, name: "Khalid", email: "khalid@example.com"); box.write('user', jsonEncode(user.toJson()));
内容的提问来源于stack exchange,提问作者Khalid
相关产品推荐
相关产品推荐

