Flutter shared_preferences
1.简介
包装特定于平台的持久性存储,以存储简单数据(iOS和macOS上为NSUserDefaults,Android上为SharedPreferences等)。数据可以异步地持久化到磁盘上,并且不能保证在返回后将写操作持久化到磁盘上,因此该插件一定不能用于存储关键数据。
2.依赖
flutter pub add shared_preferences
dependencies:
shared_preferences: ^2.0.5
import 'package:shared_preferences/shared_preferences.dart';
3.使用,与Android sharePreference基本一致
set:
SharedPreferences sp = await SharedPreferences.getInstance();
sp.setInt("themeIndex", position);
get
SharedPreferences sp = await SharedPreferences.getInstance();
int themeIndex = sp.getInt("themeIndex");
set保存:
Future setBool(String key, bool value)
Future setInt(String key, int value)
Future setDouble(String key, double value)
Future setString(String key, String value)
Future setStringList(String key, List value)
get获取
- bool getBool(String key)
- int getInt(String key)
- double getDouble(String key)
- String getString(String key)
- List getStringList(String key)
移除:
Future remove(String key)
移除所有
Future clear()
获取所有key
Set getKeys()
是否包含此key
bool containsKey(String key)
注意,获取值时,有可能时null,所以需要添加默认值
prefs.getInt('counter') ?? 0
4.代码案例
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
// home: CustomScrollViewDemo(),
home: Scaffold(
body: SharePreferenceDemo(),
),
);
}
}
class SharePreferenceDemo extends StatefulWidget {
SharePreferenceDemo({Key key}) : super(key: key);
@override
_SharePreferenceDemoState createState() {
return _SharePreferenceDemoState();
}
}
class _SharePreferenceDemoState extends State<SharePreferenceDemo> {
Future<SharedPreferences> _prefs = SharedPreferences.getInstance();
int _count;
void _incrementCounter() async {
final SharedPreferences pre = await _prefs;
final int counter = (pre.getInt('counter') ?? 0) + 1;
bool success = await pre.setInt('counter', counter);
if (success) {
setState(() {
_count = counter;
});
}
}
void _sub() async {
final SharedPreferences pre = await _prefs;
final int counter = (pre.getInt('counter') ?? 0) - 1;
bool success = await pre.setInt('counter', counter);
if (success) {
setState(() {
_count = counter;
});
}
}
void _clear() async {
final SharedPreferences pre = await _prefs;
pre.clear();
final int counter = (pre.getInt('counter') ?? 0);
setState(() {
_count = counter;
});
}
@override
void initState() {
super.initState();
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return Column(
children: [
SizedBox(
height: 50,
),
Text('数值$_count'),
OutlinedButton(onPressed: _incrementCounter, child: Text('增加')),
OutlinedButton(onPressed: _sub, child: Text('减少')),
OutlinedButton(onPressed: _clear, child: Text('清除')),
],
);
}
}