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
相关产品推荐
相关产品推荐

