Flutter本地存储插件get_storage_plus的使用
Flutter本地存储插件get_storage_plus的使用
get_storage_plus
是一个快速且轻量级的键值内存存储,它在每次操作时都会将数据备份到磁盘。它是用Dart编写的,并且可以轻松集成到Flutter的Get框架中。
支持Android、iOS、Web、Mac、Linux、Fuchsia和Windows平台。它可以存储String、int、double、Map和List类型的数据。
添加到您的pubspec.yaml文件中:
dependencies:
get_storage_plus:
安装
你可以在命令行中安装包:
flutter packages get
导入
现在可以在你的Dart代码中使用:
import 'package:get_storage_plus/get_storage_plus.dart';
初始化存储驱动程序
main() async {
await GetStorage.init();
runApp(App());
}
使用GetStorage
通过实例或直接使用GetStorage().read('key')
final box = GetStorage();
写入信息
box.write('quote', 'GetX是最好的');
读取值
print(box.read('quote'));
// 输出: GetX是最好的
删除键
box.remove('quote');
监听变化
Function? disposeListen;
disposeListen = box.listen(() {
print('盒子已更改');
});
取消订阅事件
disposeListen?.call();
监听特定键的变化
box.listenKey('key', (value) {
print('新的键值为 $value');
});
清除容器
box.erase();
创建不同的容器
你可以给容器命名,这样可以监听特定的容器并删除它们。
GetStorage g = GetStorage('MyStorage');
初始化特定容器
await GetStorage.init('MyStorage');
SharedPreferences实现
class MyPref {
static final _otherBox = () => GetStorage('MyPref');
final username = ''.val('username');
final age = 0.val('age');
final price = 1000.val('price', getBox: _otherBox);
// 或者
final username2 = ReadWriteValue('username', '');
final age2 = ReadWriteValue('age', 0);
final price2 = ReadWriteValue('price', '', _otherBox);
}
...
void updateAge() {
final age = 0.val('age');
// 或者
final age = ReadWriteValue('age', 0, () => box);
// 或者
final age = Get.find<MyPref>().age;
age.val = 1; // 将保存到盒子里
final realAge = age.val; // 将从盒子里读取
}
性能测试结果
GetStorage
不仅仅快,它在内存中进行操作时几乎可以瞬间完成所有操作。每个操作都会在一个单独的容器文件中备份到磁盘上。
什么是GetStorage?
GetStorage 是一个持久化的键值存储,适用于Android、iOS、Web、Linux、Mac和Fuchsia以及Windows平台,它结合了快速内存访问和持久化存储。
GetStorage不是什么?
GetStorage 不是一个数据库。它非常紧凑,以提供超轻量、高速读写存储的同步解决方案。如果你想要在磁盘上持久化存储数据并且立即访问内存,使用它。如果你需要数据库功能,比如索引和特定的磁盘存储工具,那么Hive和Sqflite/Moor这样的解决方案更好。
何时使用GetStorage?
- 简单的Map存储。
- HTTP请求缓存。
- 简单的用户信息存储。
- 简单且持久的状态存储。
- 任何你现在使用sharedPreferences的情况。
何时不使用GetStorage?
- 当你需要索引时。
- 当你需要始终检查文件是否已写入存储磁盘后才能开始另一个操作(内存存储是即时完成的,可以立即使用box.read()读取,而磁盘备份是在后台进行的。为了确保备份完成,你可以使用await,但如果你需要每次都调用await,那么使用内存存储就没有意义)。
您甚至可以用此库作为简单的持久状态管理器,使用Getx SimpleBuilder
import 'package:example/HomePage.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:get_storage_plus/get_storage_plus.dart';
void main() async {
await GetStorage.init();
runApp(App());
}
class App extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
final controller = Get.put(Controller());
return Observer(builder: (_) {
return MaterialApp(
theme: controller.theme,
home: MyHomePage(title: "Get_storage_plus"),
);
});
}
}
更多关于Flutter本地存储插件get_storage_plus的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter本地存储插件get_storage_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用get_storage_plus
插件进行本地存储的示例代码。get_storage_plus
是一个流行的Flutter插件,用于在本地存储键值对数据。
首先,确保你已经在pubspec.yaml
文件中添加了get_storage_plus
依赖:
dependencies:
flutter:
sdk: flutter
get_storage: ^4.0.0 # 请检查最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,你可以在你的Flutter项目中按照以下步骤使用get_storage_plus
。
1. 初始化Storage
在你的应用程序的入口文件(通常是main.dart
)中初始化GetStorage
:
import 'package:flutter/material.dart';
import 'package:get_storage/get_storage.dart';
void main() async {
// 初始化GetStorage
await GetStorage.init();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
2. 存储和读取数据
现在,你可以在任何地方使用GetStorage
来存储和读取数据。以下是一个简单的示例,展示如何在MyHomePage
中进行存储和读取操作:
import 'package:flutter/material.dart';
import 'package:get_storage/get_storage.dart';
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final box = GetStorage();
String? storedValue;
@override
void initState() {
super.initState();
// 从存储中读取数据
readStoredValue();
}
void readStoredValue() async {
storedValue = await box.read('myKey');
setState(() {});
}
void writeStoredValue(String value) async {
await box.write('myKey', value);
setState(() {
storedValue = value; // 更新UI以显示新存储的值
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('GetStorage Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Stored Value: $storedValue',
style: TextStyle(fontSize: 20),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
final newValue = 'New Value at ${DateTime.now()}';
writeStoredValue(newValue);
},
child: Text('Store Value'),
),
],
),
),
);
}
}
3. 运行应用
现在,你可以运行你的Flutter应用。当你点击“Store Value”按钮时,应用会将当前时间戳存储到本地存储中,并在UI上显示存储的值。当你重新启动应用时,它会从本地存储中读取之前存储的值并显示。
这个示例展示了如何使用get_storage_plus
插件在Flutter应用中进行基本的本地存储操作。根据你的需求,你可以进一步扩展这个示例来处理更复杂的数据存储和检索场景。