# Flutter 好用package - shared_preferences 介紹 ## shared_preferences 允許你以key-value格式保存數據,這個套件的好處之一是它不需要任何設置或配置。只要創建一個套件的實例,你就可以取得和保存數據了。**但它只支持保存簡單的屬性**,如strings、numbers和boolean等。 另外,shared_preferences**並不適合儲存敏感數據**(密碼或access tokens等),若有此需求可考慮使用flutter_secure_storage。 ``` flutter pub add shared_preferences ``` [官網](https://pub.dev/packages/shared_preferences) ### 程式範例 * 儲存 ```dart void savePreviousSearches() async { final prefs = await SharedPreferences.getInstance(); prefs.setStringList(prefSearchKey, previousSearches); } ``` * 讀取 ```dart //當用戶重新啟動應用程序時讀值 @override void initState() { super.initState(); getPreviousSearches(); } void getPreviousSearches() async { final prefs = await SharedPreferences.getInstance(); if (prefs.containsKey(prefSearchKey)) { previousSearches = prefs.getStringList(prefSearchKey) ?? <String>[]; } } ``` * 儲存int格式 ```dart void saveCurrentIndex() async { final prefs = await SharedPreferences.getInstance(); prefs.setInt(prefSelectedIndexKey, _selectedIndex); } ``` * 讀取int格式 ```dart void getCurrentIndex() async { final prefs = await SharedPreferences.getInstance(); if (prefs.containsKey(prefSelectedIndexKey)) { setState(() { _selectedIndex = prefs.getInt(prefSelectedIndexKey)!; }); } } ``` * Bool/Double/String..依此類推 ### 統整成工具包 ```dart import 'package:shared_preferences/shared_preferences.dart'; class LocalStorage { LocalStorage._(); static late SharedPreferences prefs; static Future<void> init() async { prefs = await SharedPreferences.getInstance(); } static Future<bool> set(String key, dynamic value) { if (value is String) { return prefs.setString(key, value); } else if (value is int) { return prefs.setInt(key, value); } else if (value is double) { return prefs.setDouble(key, value); } else if (value is bool) { return prefs.setBool(key, value); } return prefs.setStringList(key, value); } static dynamic get(String key) { return prefs.get(key); } static Future<bool> cleanAll() async { return prefs.clear(); } static Future<bool> remove(String key) async { return prefs.remove(key); } static Future<Map<String, String>> getAllPrefs() async { return <String, String>{ for (String key in prefs.getKeys()) ...{key: prefs.get(key).toString()} }; } } ``` ###### tags: `flutter`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up