Flutter本地存储插件tiny_storage的使用

Flutter本地存储插件tiny_storage的使用

tiny_storage 是一个基于JSON文件的简单键值对存储库。它非常小巧,易于理解其工作原理。本文将详细介绍如何在Flutter项目中使用这个插件。

特性

  • 键值对存储
  • 以JSON格式输出文件
  • 快速
    • 使用Isolate进行文件I/O的并行处理。
    • 同一事件循环中不会执行多次写操作。
  • 即使对于大数据量也能保证写入顺序

入门指南

首先,在你的Flutter项目中添加tiny_storage依赖:

dependencies:
  tiny_storage: ^latest_version

然后,使用以下代码初始化存储,并执行基本的操作如设置和获取数据。

初始化

指定要保存的文件名来初始化存储。如果文件已存在,则会加载该文件。对于Flutter应用,还需要使用path_provider包来指定目标路径。

import 'package:path_provider/path_provider.dart';
import 'package:tiny_storage/tiny_storage.dart';

void main() async {
  final directory = await getApplicationDocumentsDirectory();
  final storage = await TinyStorage.init('test.txt', path: directory.path);
  
  // 继续其他操作...
}

如果你不想在打开多个文件时增加线程数,可以通过union参数共享一个TinyStorage对象,这样它们将在同一线程上工作。

final storage2 = await TinyStorage.init('another_test.txt', path: './tmp', union: storage);

注册与检索

使用字符串作为键注册和检索对象。值会被立即保存在内存中,并在下一个事件循环之前写入磁盘。

storage.set('key_1', 'value_1');
final value = storage.get('key_1');
print(value); // 输出: value_1

清除数据

可以使用clear()方法丢弃所有数据以及文件。

storage.clear();

销毁实例

当不再需要存储实例时,请调用dispose()方法销毁它。

await storage.dispose();

注意事项

目前,web版本尚未实现此功能。

示例Demo

下面是一个完整的示例,展示了如何在Flutter应用中使用tiny_storage插件。

import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
import 'package:tiny_storage/tiny_storage.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatefulWidget {
  [@override](/user/override)
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  late TinyStorage storage;

  [@override](/user/override)
  void initState() {
    super.initState();
    initStorage();
  }

  Future<void> initStorage() async {
    final directory = await getApplicationDocumentsDirectory();
    storage = await TinyStorage.init('app_data.txt', path: directory.path);
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("Tiny Storage Demo")),
      body: Center(
        child: ElevatedButton(
          onPressed: () async {
            storage.set('greeting', 'Hello, World!');
            final greeting = storage.get('greeting');
            print(greeting); // 应该打印 "Hello, World!"
            await storage.dispose();
          },
          child: Text('Set and Get Data'),
        ),
      ),
    );
  }
}

更多关于Flutter本地存储插件tiny_storage的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter本地存储插件tiny_storage的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用tiny_storage插件进行本地存储的示例代码。tiny_storage是一个轻量级的本地存储库,可以方便地用于存储和检索键值对数据。

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加tiny_storage依赖:

dependencies:
  flutter:
    sdk: flutter
  tiny_storage: ^x.y.z  # 请将x.y.z替换为最新版本号

然后运行flutter pub get来获取依赖。

2. 导入插件

在你的Dart文件中导入tiny_storage插件:

import 'package:tiny_storage/tiny_storage.dart';

3. 使用tiny_storage进行存储和检索

以下是一个完整的示例,展示如何使用tiny_storage插件存储和检索数据:

import 'package:flutter/material.dart';
import 'package:tiny_storage/tiny_storage.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Tiny Storage Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  TinyStorage? storage;

  @override
  void initState() {
    super.initState();
    storage = TinyStorage();
  }

  void _saveData() async {
    String key = "example_key";
    String value = "Hello, Flutter!";

    await storage!.setString(key, value);
    print("Data saved: $key -> $value");
  }

  void _retrieveData() async {
    String key = "example_key";
    String? value = await storage!.getString(key);

    if (value != null) {
      print("Data retrieved: $key -> $value");
      // You can update your UI here, for example:
      // setState(() {
      //   retrievedData = value;
      // });
    } else {
      print("No data found for key: $key");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Tiny Storage Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You can use the buttons below to save and retrieve data.',
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _saveData,
              child: Text('Save Data'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _retrieveData,
              child: Text('Retrieve Data'),
            ),
          ],
        ),
      ),
    );
  }
}

解释

  1. 依赖添加:在pubspec.yaml中添加tiny_storage依赖。
  2. 导入插件:在Dart文件中导入tiny_storage
  3. 初始化存储:在initState方法中初始化TinyStorage实例。
  4. 存储数据:使用setString方法存储字符串数据。
  5. 检索数据:使用getString方法检索字符串数据。

注意事项

  • 确保你使用的是最新版本的tiny_storage插件。
  • tiny_storage支持多种数据类型(如字符串、整数、布尔值等),你可以根据需要选择合适的方法进行存储和检索。
  • 在实际应用中,你可能需要在UI中显示或处理检索到的数据,这时可以在检索数据后调用setState方法来更新UI。

希望这个示例对你有所帮助!

回到顶部