Flutter本地存储插件local_shared的使用
Flutter本地存储插件local_shared的使用
local_shared
是一个用于JSON文件存储的SharedPreferences封装库,提供了对本地存储的安全CRUD操作支持。本文将介绍如何在Flutter项目中使用该插件,并提供完整的示例代码。
安装
首先,在你的 pubspec.yaml
文件中添加以下依赖:
dependencies:
local_shared: ^1.0.5
然后运行 flutter pub get
来安装这个包。
初始化
在你的 main
函数中初始化 LocalShared
实例:
import 'package:flutter/material.dart';
import 'package:local_shared/local_shared.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await LocalShared('db').initialize();
runApp(MyApp());
}
你还可以为方便起见创建自定义类型定义:
typedef DB = LocalShared;
集合操作 (Collection)
创建集合
final result = await Shared.col('myCollection').create();
print(result); // SharedMany(success: true, message: '...', data: <JSON>[])
读取集合
final response = await Shared.col('myCollection').read();
print(response); // SharedMany(success: true, message: '...', data: <JSON>[])
更新集合
final response = await Shared.col('myCollection').update('myNewCollection');
print(response); // SharedMany(success: true, message: '...', data: <JSON>[])
删除集合
final response = await Shared.col('myNewCollection').delete();
print(response); // SharedNone(success: true, message: '....')
文档操作 (Document)
创建文档
final result = await Shared.col('myCollection').doc('documentId').create({'key': 'value'});
print(result); // SharedOne(success: true, message: '...', data: JSON)
读取文档
final response = await Shared.col('myCollection').doc('documentId').read();
print(response); // SharedOne(success: true, message: '...', data: JSON)
更新文档
final response = await Shared.col('myCollection').doc('documentId').update({'newKey': 'newValue'});
print(response); // SharedOne(success: true, message: '...', data: JSON)
删除文档
final response = await Shared.col('myCollection').doc('documentId').delete();
print(response); // SharedNone(success: true, message: '...')
多文档操作 (Many Document)
创建多文档
final result = await Shared.col('myCollection').docs(['docId1', 'docId2']).create((index) => {'key': 'value'});
print(result); // SharedMany(success: true, message: '...', data: <JSON>[])
读取多文档
final response = await Shared.col('myCollection').docs(['docId1', 'docId2']).read();
print(response); // SharedMany(success: true, message: '...', data: <JSON>[])
更新多文档
final response = await Shared.col('myCollection').docs(['docId1', 'docId2']).update((index) => {'newKey': 'newValue'});
print(response); // SharedMany(success: true, message: '...', data: <JSON>[])
删除多文档
final response = await Shared.col('myCollection').docs(['docId1', 'docId2']).delete();
print(response); // SharedNone(success: true, message: '...')
数据流监听 (Stream)
LocalShared
提供了JSON数据流来监听集合的变化:
LocalShared.stream.listen(print);
await Shared.col('myCollection').docs(['A','B']).create((index) => {'desc': 'test'});
结果输出:
{id: myCollection,
documents: [
{id: A, data: {desc: test}},
{id: B, data: {desc: test}}
]}
自定义数据流监听
如果你想只监听特定集合的变化,可以这样做:
final controller = StreamController<JSON>.broadcast();
final collection = SharedCollection('myCertainCollection', controller: controller);
controller.stream.listen(print);
await collection.docs(['A','B']).create((index) => {'desc': 'test'});
结果输出:
{id: myCertainCollection,
documents: [
{id: A, data: {desc: test}},
{id: B, data: {desc: test}}
]}
示例应用
下面是一个简单的Flutter应用示例,展示了如何使用 local_shared
进行CRUD操作:
import 'package:flutter/material.dart';
import 'package:local_shared/local_shared.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await LocalShared('MY_DB').initialize();
runApp(const MaterialApp(
title: 'Local Shared CRUD',
home: MyApp(),
));
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Local Shared CRUD')),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: () async {
final result = await Shared.col('example').create();
print('Create Collection: $result');
},
child: const Text('Create Collection'),
),
ElevatedButton(
onPressed: () async {
final result = await Shared.col('example').doc('doc1').create({'key': 'value'});
print('Create Document: $result');
},
child: const Text('Create Document'),
),
],
),
);
}
}
更多关于Flutter本地存储插件local_shared的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter本地存储插件local_shared的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter中使用local_storage
插件进行本地存储的代码示例。local_storage
插件允许你在设备的本地存储中保存和检索数据。需要注意的是,这里提到的local_storage
插件通常指的是flutter_secure_storage
,因为local_shared
并不是一个广为人知的Flutter本地存储插件名称。不过,flutter_secure_storage
提供了类似的功能,并且是一个比较流行的选择。
首先,你需要在pubspec.yaml
文件中添加flutter_secure_storage
依赖:
dependencies:
flutter:
sdk: flutter
flutter_secure_storage: ^5.0.2 # 请检查最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,你可以在你的Flutter应用中使用这个插件来存储和检索数据。下面是一个简单的示例:
import 'package:flutter/material.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: StorageExample(),
);
}
}
class StorageExample extends StatefulWidget {
@override
_StorageExampleState createState() => _StorageExampleState();
}
class _StorageExampleState extends State<StorageExample> {
final FlutterSecureStorage storage = FlutterSecureStorage();
String? retrievedValue;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Local Storage Example'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
TextField(
decoration: InputDecoration(labelText: 'Value to store'),
onChanged: (value) async {
await storage.write(key: 'my_key', value: value);
},
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () async {
String? value = await storage.read(key: 'my_key');
setState(() {
retrievedValue = value;
});
},
child: Text('Retrieve Value'),
),
SizedBox(height: 20),
Text('Retrieved Value: $retrievedValue'),
],
),
),
);
}
}
在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个文本字段和一个按钮。用户可以在文本字段中输入值,该值将被存储到本地存储中。当用户点击“Retrieve Value”按钮时,应用将从本地存储中读取该值并显示在页面上。
FlutterSecureStorage()
实例用于访问本地存储。storage.write(key: 'my_key', value: value)
方法用于将值存储到本地存储中,其中key
是存储项的键,value
是要存储的值。storage.read(key: 'my_key')
方法用于从本地存储中读取与指定键相关联的值。
请注意,flutter_secure_storage
插件提供的是安全的存储,适用于存储敏感信息,如API密钥、用户凭证等。如果你只需要简单的键值存储而不涉及敏感信息,你也可以考虑使用shared_preferences
插件。不过,根据原始帖子的要求,这里我们专注于flutter_secure_storage
的使用。