Flutter本地数据存储插件simple_shared_preferences的使用
Flutter本地数据存储插件simple_shared_preferences的使用
简介
simple_shared_preferences
是一个用于Flutter项目的简单包装器,它基于 shared_preferences
插件。该插件支持以下数据类型:int
、double
、bool
、String
和 List<String>
。
平台支持
平台 | 支持版本 |
---|---|
Android | SDK 16+ |
iOS | 9.0+ |
Linux | 任意 |
macOS | 10.11+ |
Web | 任意 |
Windows | 任意 |
使用方法
要使用此插件,请在 pubspec.yaml
文件中添加 simple_shared_preferences
作为依赖项。
dependencies:
flutter:
sdk: flutter
simple_shared_preferences: ^latest_version
示例代码
以下是一个完整的示例应用程序,展示了如何使用 simple_shared_preferences
插件来存储和读取计数器的值。
import 'package:flutter/material.dart';
import 'package:simple_shared_preferences/simple_shared_preferences.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'SimpleSharedPreferences Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const SimpleSharedPreferencesDemo(
title: 'SimpleSharedPreferences Demo Page',
),
);
}
}
class SimpleSharedPreferencesDemo extends StatefulWidget {
const SimpleSharedPreferencesDemo({
required this.title,
Key? key,
}) : super(key: key);
final String title;
@override
State<SimpleSharedPreferencesDemo> createState() => _SimpleSharedPreferencesDemoState();
}
class _SimpleSharedPreferencesDemoState extends State<SimpleSharedPreferencesDemo> {
// 获取 SimpleSharedPreferences 实例
final Future<SimpleSharedPreferences> _preferences = SimpleSharedPreferences.getInstance();
late Future<int> _counter;
// 增加计数器的值
Future<void> _incrementCounter() async {
final SimpleSharedPreferences preferences = await _preferences;
final int counter = (preferences.get('counter') ?? 0) + 1;
setState(() {
// 更新计数器并保存到本地存储
_counter = preferences.set('counter', counter).then((_) => counter);
});
}
@override
void initState() {
super.initState();
// 初始化计数器的值
_counter = _preferences.then((SimpleSharedPreferences preferences) {
return preferences.get('counter') ?? 0;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: FutureBuilder<int>(
future: _counter,
builder: (BuildContext context, AsyncSnapshot<int> snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.none:
case ConnectionState.waiting:
return const CircularProgressIndicator(); // 加载中显示进度条
case ConnectionState.active:
case ConnectionState.done:
if (snapshot.hasError) {
return Text('Error: ${snapshot.error}'); // 发生错误时显示错误信息
}
return Text(
'You have pushed the button this many times: ${snapshot.data}', // 显示计数器的值
style: Theme.of(context).textTheme.headline4,
);
}
},
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter, // 点击按钮增加计数器
tooltip: 'Increment',
child: const Icon(Icons.add),
),
);
}
}
API 使用示例
写入数据
// 获取 SimpleSharedPreferences 实例
final simplePreference = await SimpleSharedPreferences.getInstance();
// 保存整数值到 'counter' 键
await simplePreference.setValue<int>('counter', 10);
// 保存布尔值到 'repeat' 键
await simplePreference.setValue<bool>('repeat', true);
// 保存浮点数值到 'decimal' 键
await simplePreference.setValue<double>('decimal', 1.5);
// 保存字符串值到 'action' 键
await simplePreference.setValue<String>('action', 'Start');
// 保存字符串列表到 'items' 键
await simplePreference.setValue<List<String>>('items', <String>['Earth', 'Moon', 'Sun']);
// 保存 Map 到 'map' 键
await simplePreference.setValue<Map<String, dynamic>>('map', <String, dynamic>{
'name': 'simple shared preferences',
'age': 1,
'isDeveloper': true,
'height': 1.75,
'list': [1, 2, 3],
});
读取数据
// 尝试从 'counter' 键读取整数值,如果不存在则返回 null
final int? counter = simplePreference.getValue<int>('counter');
// 尝试从 'repeat' 键读取布尔值,如果不存在则返回 null
final bool? repeat = simplePreference.getValue<bool>('repeat');
// 尝试从 'decimal' 键读取浮点数值,如果不存在则返回 null
final double? decimal = simplePreference.getValue<double>('decimal');
// 尝试从 'action' 键读取字符串值,如果不存在则返回 null
final String? action = simplePreference.getValue<String>('action');
// 尝试从 'items' 键读取字符串列表,如果不存在则返回 null
final List<String>? items = simplePreference.getValue<List<String>>('items');
// 尝试从 'map' 键读取 Map,如果不存在则返回 null
final Map<String, dynamic>? map = simplePreference.getValue<Map<String, dynamic>>('map');
删除数据
// 删除 'counter' 键的数据
final success = await simplePreference.remove('counter');
更多关于Flutter本地数据存储插件simple_shared_preferences的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter本地数据存储插件simple_shared_preferences的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用simple_shared_preferences
插件进行本地数据存储的示例代码。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加simple_shared_preferences
依赖:
dependencies:
flutter:
sdk: flutter
simple_shared_preferences: ^2.0.0 # 请检查最新版本号
然后运行flutter pub get
来安装依赖。
2. 导入包
在你的Dart文件中导入simple_shared_preferences
包:
import 'package:simple_shared_preferences/simple_shared_preferences.dart';
3. 初始化SharedPreferences实例
在你的应用启动时(例如在main.dart
中的MyApp
类的initState
方法中),初始化SharedPreferences
实例:
import 'package:flutter/material.dart';
import 'package:simple_shared_preferences/simple_shared_preferences.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final prefs = await SimpleSharedPreferences.getInstance();
runApp(MyApp(prefs: prefs));
}
class MyApp extends StatelessWidget {
final SimpleSharedPreferences prefs;
MyApp({required this.prefs});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomeScreen(prefs: prefs),
);
}
}
4. 使用SharedPreferences进行数据存储和读取
在你的主屏幕或任何需要的地方使用SharedPreferences
进行数据存储和读取:
import 'package:flutter/material.dart';
import 'package:simple_shared_preferences/simple_shared_preferences.dart';
class HomeScreen extends StatefulWidget {
final SimpleSharedPreferences prefs;
HomeScreen({required this.prefs});
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
final _formKey = GlobalKey<FormState>();
String? _name;
void _saveData() async {
if (_formKey.currentState!.validate()) {
_formKey.currentState!.save();
await widget.prefs.setString('name', _name!);
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Data saved')),
);
}
}
void _loadData() async {
setState(() {
_name = await widget.prefs.getString('name') ?? '';
});
}
@override
void initState() {
super.initState();
_loadData();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('SharedPreferences Demo')),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Form(
key: _formKey,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextFormField(
decoration: InputDecoration(labelText: 'Name'),
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter a name';
}
return null;
},
onSaved: (value) {
_name = value;
},
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _saveData,
child: Text('Save'),
),
SizedBox(height: 20),
Text('Loaded Name: $_name'),
],
),
),
),
);
}
}
总结
以上代码展示了如何在Flutter项目中使用simple_shared_preferences
插件进行本地数据存储和读取。包括如何添加依赖、初始化实例、保存数据和加载数据。注意在实际项目中,你可能需要在合适的地方(例如用户登录或应用启动时)进行数据的加载,以及在数据变化时进行相应的UI更新。