Flutter本地存储插件stored的使用
Flutter本地存储插件stored的使用
stored
是一个用于从远程和本地源加载数据的Dart库。
问题:
- 现代软件需要数据表示形式灵活且始终可用。
- 用户期望他们的UI体验不会因新数据加载而受到影响(阻塞)。无论是社交、新闻还是企业对企业的应用,用户都希望在线和离线时都能获得无缝体验。
- 国际用户期望最小的数据下载量,因为大量下载的数据可能会导致巨额电话账单。
Store
是一个简化应用程序中数据获取、共享、存储和检索的类。Store
类似于仓储模式,并提供了一个基于dart:async构建的API,遵循单向数据流。
Store
在UI元素和数据操作之间提供了抽象层。
概述
Store
负责管理特定的数据请求。当你创建一个Store
的实现时,你需要提供一个Fetcher
,一个定义如何通过网络获取数据的函数。你还可以定义你的Store
如何在内存和磁盘上缓存数据。由于Store
返回的数据是一个Flow
,线程处理变得非常简单!一旦构建好Store
,它将处理围绕数据流的逻辑,允许你的视图使用最佳数据源,并确保最新的数据总是可用于离线使用。
Store
利用多重请求节流来防止对网络和磁盘缓存进行过多调用。通过使用Store
,你可以消除向网络发送相同请求的可能性,同时添加两层缓存(内存和磁盘),并且能够将磁盘作为事实来源,在不经过Store
的情况下直接修改磁盘(与可以提供可观察源的数据库如hive、sqflite或Realm一起使用效果最佳)。
示例代码
import 'package:flutter/material.dart';
import 'package:stored/stored.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Stored Demo')),
body: Center(child: MyStoreWidget()),
),
);
}
}
class MyStoreWidget extends StatefulWidget {
[@override](/user/override)
_MyStoreWidgetState createState() => _MyStoreWidgetState();
}
class _MyStoreWidgetState extends State<MyStoreWidget> {
// 初始化Store实例
final store = Store<int>(
fetcher: () async {
// 模拟网络请求
await Future.delayed(Duration(seconds: 2));
return 42;
},
inMemoryCache: true,
onDiskCache: true,
);
[@override](/user/override)
void initState() {
super.initState();
// 订阅Store的数据变化
store.flow.listen((data) {
print('Received data: $data');
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () {
// 触发数据获取
store.fetch();
},
child: Text('Fetch Data'),
),
SizedBox(height: 20),
Text('Data: ${store.data}'),
],
);
}
}
代码解释
-
导入库:
import 'package:flutter/material.dart'; import 'package:stored/stored.dart';
-
初始化应用:
void main() { runApp(MyApp()); }
-
创建应用界面:
class MyApp extends StatelessWidget { [@override](/user/override) Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar(title: Text('Stored Demo')), body: Center(child: MyStoreWidget()), ), ); } }
-
创建Store实例:
class _MyStoreWidgetState extends State<MyStoreWidget> { final store = Store<int>( fetcher: () async { await Future.delayed(Duration(seconds: 2)); return 42; }, inMemoryCache: true, onDiskCache: true, );
-
订阅Store的数据变化:
[@override](/user/override) void initState() { super.initState(); store.flow.listen((data) { print('Received data: $data'); }); }
-
触发数据获取:
ElevatedButton( onPressed: () { store.fetch(); }, child: Text('Fetch Data'), )
-
展示数据:
Text('Data: ${store.data}')
更多关于Flutter本地存储插件stored的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter本地存储插件stored的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
stored
是一个用于 Flutter 的本地存储插件,它提供了一种简单的方式来存储和检索数据。以下是如何使用 stored
插件的基本步骤:
1. 添加依赖
首先,在你的 pubspec.yaml
文件中添加 stored
插件的依赖:
dependencies:
flutter:
sdk: flutter
stored: ^0.1.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 初始化存储
在你的 Dart 文件中导入 stored
插件并初始化存储:
import 'package:stored/stored.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化存储
await stored.init();
runApp(MyApp());
}
3. 存储数据
你可以使用 stored
来存储不同类型的数据,如字符串、整数、布尔值、列表和映射。
// 存储字符串
await stored.setString('key1', 'Hello, stored!');
// 存储整数
await stored.setInt('key2', 42);
// 存储布尔值
await stored.setBool('key3', true);
// 存储列表
await stored.setList('key4', [1, 2, 3]);
// 存储映射
await stored.setMap('key5', {'name': 'Flutter', 'version': '2.5'});
4. 检索数据
你可以使用 stored
来检索存储的数据:
// 检索字符串
String stringValue = await stored.getString('key1');
// 检索整数
int intValue = await stored.getInt('key2');
// 检索布尔值
bool boolValue = await stored.getBool('key3');
// 检索列表
List<dynamic> listValue = await stored.getList('key4');
// 检索映射
Map<dynamic, dynamic> mapValue = await stored.getMap('key5');
5. 删除数据
你可以使用 stored
来删除存储的数据:
// 删除单个键值对
await stored.remove('key1');
// 清除所有存储数据
await stored.clear();
6. 检查数据是否存在
你可以检查某个键是否存在:
bool exists = await stored.containsKey('key1');
7. 获取所有键
你可以获取所有存储的键:
List<String> keys = await stored.getKeys();
8. 使用示例
以下是一个完整的示例,展示了如何使用 stored
来存储和检索数据:
import 'package:flutter/material.dart';
import 'package:stored/stored.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await stored.init();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Stored Example')),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () async {
await stored.setString('key1', 'Hello, stored!');
print('Data stored');
},
child: Text('Store Data'),
),
ElevatedButton(
onPressed: () async {
String value = await stored.getString('key1');
print('Retrieved value: $value');
},
child: Text('Retrieve Data'),
),
ElevatedButton(
onPressed: () async {
await stored.remove('key1');
print('Data removed');
},
child: Text('Remove Data'),
),
],
),
),
),
);
}
}