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
,getObjectList
getString
,putString
getBool
,putBool
getInt
,putInt
getDouble
,putDouble
getStringList
,putStringList
getDynamic
haveKey
getKeys
remove
clear
reload
isInitialized
示例代码
初始化与基本用法
确保在应用启动前完成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应用中的偏好设置。通过这些方法,你可以轻松地在应用的不同部分之间共享和存储数据。