Flutter偏好设置管理插件sp_util的使用
Flutter偏好设置管理插件sp_util的使用
sp_util
sp_util 是一个用于Flutter项目的共享偏好设置插件,它简化了SharedPreferences的使用,支持获取默认值、保存对象和对象列表。以下是其主要功能和使用方法。
Pub配置
在pubspec.yaml文件中添加依赖:
dependencies:
sp_util: ^2.0.3
API接口
getObj,getObjList,putObject,getObject,putObjectList,getObjectListgetString,putStringgetBool,putBoolgetInt,putIntgetDouble,putDoublegetStringList,putStringListgetDynamichaveKeygetKeysremoveclearreloadisInitialized
示例代码
初始化与基本用法
确保在应用启动前完成SpUtil的初始化。这通常是在main()函数中进行异步等待。
import 'package:flutter/material.dart';
import 'package:sp_util/sp_util.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await SpUtil.getInstance();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
String spLastCounter = 'last_counter';
void _incrementCounter() {
setState(() {
_counter++;
SpUtil.putInt(spLastCounter, _counter);
});
}
@override
void initState() {
super.initState();
// 使用sp读取上次计数
_counter = SpUtil.getInt(spLastCounter, defValue: 0)!;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headline4,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: Icon(Icons.add),
),
);
}
}
对象存储示例
除了简单的数据类型外,sp_util还支持复杂的对象和对象列表的存储与读取。
class City {
String name;
City({required this.name});
factory City.fromJson(Map<String, dynamic> json) => City(name: json['name']);
Map<String, dynamic> toJson() => {'name': name};
}
// 存储单个对象
City city = City(name: "成都市");
SpUtil.putObject("loc_city", city);
// 读取单个对象
City? hisCity = SpUtil.getObj("loc_city", (v) => City.fromJson(v as Map<String, dynamic>));
print("City: " + (hisCity == null ? "null" : hisCity.toString()));
// 存储对象列表
List<City> list = [];
list.add(City(name: "成都市"));
list.add(City(name: "北京市"));
SpUtil.putObjectList("loc_city_list", list);
// 读取对象列表
List<City>? dataList = SpUtil.getObjList("loc_city_list", (v) => City.fromJson(v as Map<String, dynamic>));
print("CityList: " + (dataList == null ? "null" : dataList.toString()));
通过上述内容,您可以轻松地在Flutter项目中集成并使用sp_util来管理和持久化应用程序的数据。此外,如果您需要更多工具类的支持,可以考虑引入common_utils或flustars库。
更多关于Flutter偏好设置管理插件sp_util的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter偏好设置管理插件sp_util的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用sp_util(SharedPreferences的封装插件)来管理偏好设置的代码示例。
首先,确保你已经在pubspec.yaml文件中添加了sp_util依赖:
dependencies:
flutter:
sdk: flutter
sp_util: ^x.y.z # 替换为最新版本号
然后运行flutter pub get来获取依赖。
使用示例
- 初始化并设置偏好设置
import 'package:flutter/material.dart';
import 'package:sp_util/sp_util.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('SP Util Demo'),
),
body: Center(
child: MyHomePage(),
),
),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
String _savedValue = '';
@override
void initState() {
super.initState();
// 初始化时读取偏好设置
_readFromPreferences();
}
Future<void> _readFromPreferences() async {
String? value = await SpUtil.getString('my_key');
setState(() {
_savedValue = value ?? '';
});
}
Future<void> _saveToPreferences(String value) async {
await SpUtil.putString('my_key', value);
setState(() {
_savedValue = value;
});
}
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Saved Value: $_savedValue'),
SizedBox(height: 20),
TextField(
decoration: InputDecoration(labelText: 'Enter a value'),
onChanged: (value) {
// 在这里你也可以实时保存值,或者仅在提交时保存
},
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
final textController = TextEditingController();
// 这里应该使用TextField的controller来获取值,但为了简化,我们使用一个示例值
textController.text = _savedValue; // 这里应该通过某种方式获取TextField的值
_saveToPreferences(textController.text);
},
child: Text('Save'),
),
],
);
}
}
注意:上面的代码示例中,TextField的值获取部分被简化了,实际使用中应该通过TextEditingController或其他方式获取用户输入的值。
- 支持其他类型的数据
sp_util还支持其他类型的数据存储,如整型、布尔型、双精度浮点型、列表和映射。以下是一些示例:
// 保存整型
await SpUtil.putInt('my_int_key', 42);
int? intValue = await SpUtil.getInt('my_int_key');
// 保存布尔型
await SpUtil.putBool('my_bool_key', true);
bool? boolValue = await SpUtil.getBool('my_bool_key');
// 保存双精度浮点型
await SpUtil.putDouble('my_double_key', 3.14);
double? doubleValue = await SpUtil.getDouble('my_double_key');
// 保存列表
await SpUtil.putStringList('my_list_key', ['a', 'b', 'c']);
List<String>? listValue = await SpUtil.getStringList('my_list_key');
// 保存映射
await SpUtil.putMap('my_map_key', {'key1': 'value1', 'key2': 'value2'});
Map<String, String>? mapValue = await SpUtil.getMap<String, String>('my_map_key');
以上代码展示了如何使用sp_util来管理Flutter应用中的偏好设置。通过这些方法,你可以轻松地在应用的不同部分之间共享和存储数据。

