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

Flutter中SharedPreferences、FlutterSecureStorage的最佳使用及技术咨询

Flutter开发技术疑问解答

1. FlutterSecureStorage的安全性及加密算法选择

FlutterSecureStorage的安全性完全够用,它底层依赖系统原生的安全存储方案:iOS端用Keychain,Android端用Keystore,这些都是系统级别的安全存储,能避免数据被常规文件读取或root/越狱设备轻易获取。

不过要注意:不要直接加密存储用户密码,正确的做法是存储密码的加盐哈希值。推荐使用PBKDF2或者Argon2算法生成哈希——这两种算法都属于慢哈希,能有效抵御暴力破解。如果确实需要加密存储其他敏感凭证(比如token),优先选AES-256-GCM算法,它不仅加密强度高,还自带消息认证,能防止数据被篡改。

2. 主题等设置的存储方案及实现

主题这类轻量的键值对配置,用SharedPreferences就足够了,SQLite更适合存储结构化的大量数据(比如用户列表、日志),用在设置上属于大材小用。

具体实现步骤:

  • 先在pubspec.yaml中添加shared_preferences依赖,执行flutter pub get安装
  • 封装一个简单的工具类来统一处理设置读写:
import 'package:shared_preferences/shared_preferences.dart';
import 'package:flutter/material.dart';

class SettingsManager {
  static Future<void> saveThemeMode(ThemeMode mode) async {
    final prefs = await SharedPreferences.getInstance();
    await prefs.setString('theme_mode', mode.name);
  }

  static Future<ThemeMode> getThemeMode() async {
    final prefs = await SharedPreferences.getInstance();
    final modeStr = prefs.getString('theme_mode') ?? 'system';
    return ThemeMode.values.firstWhere((e) => e.name == modeStr);
  }
}
  • 在应用启动时调用SettingsManager.getThemeMode()读取配置,设置应用主题;在用户切换主题时调用saveThemeMode()保存变更。

3. 页面间传值的最佳方式

优先用导航参数传递,不要用SharedPreferences。SharedPreferences是持久化存储,用来临时传值会导致数据冗余、状态混乱,而且不符合临时数据的生命周期。

简单值(比如字符串、数字)可以直接通过Navigator.push的arguments参数传递:

// 跳转时传值
Navigator.push(
  context,
  MaterialPageRoute(
    builder: (context) => DetailPage(),
    arguments: '这是传递的参数',
  ),
);

// 接收值
final args = ModalRoute.of(context)!.settings.arguments as String;

如果是复杂对象,可以直接传递实例(注意对象要支持序列化,或者用状态管理工具比如Riverpod、Provider共享状态,但简单场景下直接传对象更高效)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 16:12:47