Flutter本地数据存储插件stash_shared_preferences的使用
Flutter本地数据存储插件stash_shared_preferences的使用
stash_shared_preferences
stash_shared_preferences
是一个基于 stash
的存储扩展,提供了 shared_preferences
的存储功能。
概述
这个存储扩展为 stash
提供了一个基于 shared_preferences
的存储方式。
开始使用
在 pubspec.yaml
文件中添加以下依赖(或创建此文件),并将 x.x.x
替换为最新的 stash_shared_preferences
版本:
dependencies:
stash_shared_preferences: ^x.x.x
运行以下命令安装依赖:
flutter pub get
最后,在项目中导入库:
import 'package:stash/stash_api.dart';
import 'package:stash_shared_preferences/stash_shared_preferences.dart';
使用示例
下面的示例展示了如何使用 stash_shared_preferences
创建一个存储 vault,并进行基本的数据操作。
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:stash/stash_api.dart';
import 'package:stash_shared_preferences/stash_shared_preferences.dart';
void main() {
runApp(const MyApp());
}
// 定义一个简单的数据模型
class Counter {
final int value;
final DateTime updateTime;
Counter({required this.value, required this.updateTime});
// 从JSON映射创建Counter对象
factory Counter.fromJson(Map<String, dynamic> json) => Counter(
value: json['value'] as int,
updateTime: DateTime.parse(json['timestamp'] as String),
);
// 将Counter对象转换为JSON映射
Map<String, dynamic> toJson() => {
'value': value,
'timestamp': updateTime.toIso8601String(),
};
}
// 主应用类
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Stash Shared Preferences Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const SharedPreferencesDemo(),
);
}
}
// 存储示例
class SharedPreferencesDemo extends StatefulWidget {
const SharedPreferencesDemo({super.key});
[@override](/user/override)
SharedPreferencesDemoState createState() => SharedPreferencesDemoState();
}
class SharedPreferencesDemoState extends State<SharedPreferencesDemo> {
// 创建一个新的共享偏好存储
final Future<Vault<Counter>> _vault = newSharedPreferencesVaultStore().then(
(store) => store.vault<Counter>(
name: 'vault',
fromEncodable: (json) => Counter.fromJson(json),
));
late Future<Counter> _counter;
// 获取计数器值
Future<Counter> _getCounter([Vault<Counter>? vault]) {
final v = vault == null ? _vault : Future.value(vault);
return v.then((vault) => vault.get('counter')).then(
(counter) => counter ?? Counter(value: 0, updateTime: DateTime.now()));
}
// 增加计数器值
Future<void> _incrementCounter() async {
final Vault<Counter> vault = await _vault;
final Counter currentCounter = await _getCounter(vault);
setState(() {
final newCounter =
Counter(value: currentCounter.value + 1, updateTime: DateTime.now());
_counter = vault.put('counter', newCounter).then((value) => newCounter);
});
}
[@override](/user/override)
void initState() {
super.initState();
_counter = _getCounter();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('SharedPreferences Demo'),
),
body: Center(
child: FutureBuilder<Counter>(
future: _counter,
builder: (BuildContext context, AsyncSnapshot<Counter> 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}');
} else {
final count = snapshot.data?.value ?? 0;
final updateTime = snapshot.data?.updateTime;
final lastPressed = updateTime != null
? ' (last pressed on ${DateFormat('dd-MM-yyyy HH:mm:ss').format(updateTime)})'
: '';
return Text(
'Button tapped $count time${count == 1 ? '' : 's'}.\n\n'
'This should persist across restarts$lastPressed.',
);
}
}
},
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: const Icon(Icons.add),
),
);
}
}
更多关于Flutter本地数据存储插件stash_shared_preferences的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter本地数据存储插件stash_shared_preferences的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用stash_shared_preferences
插件进行本地数据存储的示例代码。stash_shared_preferences
是一个用于Flutter的本地存储插件,它结合了stash
库的功能和shared_preferences
的易用性。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加stash
和stash_shared_preferences
的依赖:
dependencies:
flutter:
sdk: flutter
stash: ^3.0.0 # 请检查最新版本号
stash_shared_preferences: ^3.0.0 # 请检查最新版本号
shared_preferences: ^2.0.15 # stash_shared_preferences依赖于shared_preferences
然后运行flutter pub get
来安装这些依赖。
2. 初始化并存储数据
在你的Flutter应用中,你可以使用以下代码来初始化stash_shared_preferences
并存储一些数据:
import 'package:flutter/material.dart';
import 'package:stash/stash_api.dart';
import 'package:stash_shared_preferences/stash_shared_preferences.dart';
import 'package:shared_preferences/shared_preferences.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化SharedPreferences
final SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
// 创建CacheManager并配置为使用SharedPreferences作为存储
final CacheManager cacheManager = CacheManager(
config: CacheConfig(
storage: SharedPreferencesStorage(sharedPreferences),
),
);
// 存储一些数据
await cacheManager.write('key1', 'value1');
await cacheManager.write('key2', 42);
runApp(MyApp(cacheManager: cacheManager));
}
class MyApp extends StatelessWidget {
final CacheManager cacheManager;
MyApp({required this.cacheManager});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('stash_shared_preferences Example'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
// 读取数据
final String? value1 = await cacheManager.read<String>('key1');
final int? value2 = await cacheManager.read<int>('key2');
print('key1: $value1');
print('key2: $value2');
},
child: Text('Read Data'),
),
),
),
);
}
}
3. 运行应用
将上述代码添加到你的Flutter项目中,并运行应用。当你点击按钮时,它将从SharedPreferences
中读取之前存储的数据并打印到控制台。
注意事项
- 确保在调用任何
stash_shared_preferences
或shared_preferences
相关功能之前,SharedPreferences
实例已经被正确初始化。 stash
库提供了丰富的缓存策略和功能,你可以根据需要进一步配置和使用。- 在实际项目中,可能需要对错误处理和缓存的过期策略进行更细致的管理。
这个示例展示了基本的存储和读取操作,但stash
库提供了更多的功能,如缓存失效策略、内存缓存、磁盘缓存等,可以根据你的需求进行进一步配置和使用。