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

1 回复

更多关于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应用中进行基本的本地存储操作。根据你的需求,你可以进一步扩展这个示例来处理更复杂的数据存储和检索场景。

回到顶部