MST

星途 面试题库

面试题:Flutter中SharedPreferences本地存储数据类型处理

在Flutter使用SharedPreferences进行本地存储时,它支持哪些数据类型的存储?如果要存储一个自定义对象,你会如何实现?
31.8万 热度难度
前端开发Flutter

知识考点

AI 面试

面试题答案

一键面试
  1. 支持的数据类型
    • bool:布尔类型,例如truefalse
    • int:整数类型,如10
    • double:双精度浮点数类型,例如3.14
    • String:字符串类型,比如"hello"
    • StringList:字符串列表类型,例如["item1", "item2"]
  2. 存储自定义对象
    • 步骤
      • 首先将自定义对象转换为JSON格式的字符串。这需要自定义对象实现toJson方法,将对象的属性转换为Map<String, dynamic>,然后使用jsonEncode方法将Map转换为字符串。
      • 使用SharedPreferences存储这个JSON字符串。
      • 读取时,从SharedPreferences中获取字符串,再使用jsonDecode方法将字符串转换回Map<String, dynamic>,最后根据这个Map重建自定义对象。
    • 示例代码
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'dart:convert';

class User {
  String name;
  int age;

  User({required this.name, required this.age});

  Map<String, dynamic> toJson() {
    return {
      'name': name,
      'age': age,
    };
  }

  factory User.fromJson(Map<String, dynamic> json) {
    return User(
      name: json['name'],
      age: json['age'],
    );
  }
}

Future<void> saveUser(User user) async {
  final prefs = await SharedPreferences.getInstance();
  final jsonString = jsonEncode(user.toJson());
  await prefs.setString('user', jsonString);
}

Future<User?> getUser() async {
  final prefs = await SharedPreferences.getInstance();
  final jsonString = prefs.getString('user');
  if (jsonString != null) {
    final jsonMap = jsonDecode(jsonString);
    return User.fromJson(jsonMap);
  }
  return null;
}