Flutter数据存储管理插件storage_hub的使用

Flutter数据存储管理插件storage_hub的使用

这个Flutter插件可以将文件存储在设备上,并在触发时分块上传到您的存储。

添加依赖

首先,在项目中添加storage_hub依赖:

$ flutter pub add storage_hub

这将在您的包的pubspec.yaml文件中添加一行(并运行隐式的flutter pub get):

dependencies:
    storage_hub: ^0.0.5

或者,您的编辑器可能支持flutter pub get。查阅您的编辑器文档以了解更多信息。

导入插件

现在可以在Dart代码中导入:

import 'package:storage_hub/storage_hub.dart';

如何使用

初始化插件

在主函数中初始化插件:

void main() {
    if (!StorageHub.isConfigured) {
        StorageHub.configure(
            apiKey: 'YOUR_API_KEY',
            chunkSize: 128 * 1024,
            retryCount: 10,
            baseUrl: 'BASE_URL_OF_YOUR_HUB',
            portUrl: 'PART_URL_OF_YOUR_UPLOAD_REQUEST_TO_OBTAIN_SESSION',
            putUrl: 'PART_URL_FOR_UPLOAD_WITH_SESSION',
        );
    }

    runApp(const MyApp());
}

添加文件

根据需要添加文件:

bool result = await StorageHub.addFile(
        filePath: '/data/0/a_folder/another_folder/',
        fileName: 'my_picture.jpg',
        totalBytes: 25234, // 文件的总字节数
        metadata: {
            "someCustomKey": "someCustomValue",
            "anotherKey": "anotherValue",
        },
    );

获取文件列表

获取已添加的文件列表:

List<FileDefinition> myFiles = StorageHub.fileList; // 返回存储在RAM中的文件列表

或者查询文件列表:

List<FileDefinition> myFiles = await StorageHub.getFileList(); // 返回数据库中的文件列表

删除文件

如果需要删除文件:

bool deleted = await StorageHub.deleteFile(id: 123); // 您可以从FileDefinition列表中获得id

触发同步

最后,您可以触发同步操作:

StorageHub.triggerSync();

这将运行一个进程,依次开始或恢复您的文件列表中的上传任务。

StorageHub会从列表中移除已上传的文件。

StorageHub会更新FileDefinition的状态和已上传的字节数。

StorageHub会排队任何失败的操作以便重试。

定义

  • StorageHub.isSyncing 是一个bool值,当有上传操作时返回true
  • StorageHub.syncingFile 是一个FileDefinition?值,如果存在正在上传的文件,则返回该文件。
  • StorageHub.progress 是一个double值,返回操作的上传进度,范围在0到1之间。
  • StorageHub.fileList 是一个List<FileDefinition>,由您添加的文件组成。

方法

  • StorageHub.addFile() 是一个异步方法,用于添加文件 接受:String filePathString fileNameint totalBytesMap<String,dynamic>? metadataString? time 返回:bool,如果添加操作成功则返回true

  • StorageHub.deleteFile() 是一个异步方法,用于删除文件 接受:String id 返回:bool,如果删除操作成功则返回true

  • StorageHub.getFileList() 是一个异步方法,用于获取您的文件列表 返回:List<FileDefinition>

  • StorageHub.triggerSync() 是一个无返回值的方法,用于触发上传操作。

枚举

  • SyncStatus 是一个枚举,表示文件的状态。

模型

  • FileDefinition 是文件的模型。

示例代码

以下是一个完整的示例代码:

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

void main() {
  if (!StorageHub.isConfigured) {
    StorageHub.configure(
        apiKey: 'YOUR_API_KEY',
        chunkSize: 128 * 1024,
        retryCount: 10,
        baseUrl: 'BASE_URL_OF_YOUR_HUB',
        portUrl: 'PART_URL_OF_YOUR_UPLOAD_REQUEST_TO_OBTAIN_SESSION',
        putUrl: 'PART_URL_FOR_UPLOAD_WITH_SESSION',
    );
  }

  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            const Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用storage_hub插件进行数据存储管理的代码示例。storage_hub是一个强大的Flutter插件,它提供了一个统一的接口来管理多种存储解决方案,包括SharedPreferences、SQLite、Hive等。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  storage_hub: ^最新版本号  # 请替换为实际的最新版本号

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

2. 配置StorageHub

在你的应用程序的入口文件(通常是main.dart)中,你需要配置StorageHub。这里是一个基本的配置示例,使用SharedPreferences作为存储后端:

import 'package:flutter/material.dart';
import 'package:storage_hub/storage_hub.dart';
import 'package:shared_preferences/shared_preferences.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 初始化SharedPreferences
  SharedPreferences sharedPreferences = await SharedPreferences.getInstance();

  // 配置StorageHub
  final storageHub = StorageHub(
    backends: [
      SharedPreferencesBackend(sharedPreferences: sharedPreferences),
    ],
  );

  // 设置全局的StorageHub实例
  StorageHub.instance = storageHub;

  runApp(MyApp());
}

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

3. 使用StorageHub进行数据存储和读取

在你的应用中的其他地方,你可以使用StorageHub实例来存储和读取数据。以下是一个简单的示例:

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

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  final _formKey = GlobalKey<FormState>();
  String _key = 'example_key';
  String _value = '';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('StorageHub Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            Form(
              key: _formKey,
              child: TextFormField(
                decoration: InputDecoration(labelText: 'Value'),
                validator: (value) {
                  if (value == null || value.isEmpty) {
                    return 'Please enter a value.';
                  }
                  return null;
                },
                onSaved: (value) {
                  _value = value!;
                },
              ),
            ),
            SizedBox(height: 16),
            ElevatedButton(
              onPressed: () async {
                if (_formKey.currentState!.validate()) {
                  _formKey.currentState!.save();

                  // 存储数据
                  await StorageHub.instance.write(key: _key, value: _value);

                  // 读取数据
                  String? readValue = await StorageHub.instance.read<String>(key: _key);
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(
                      content: Text('Stored value: $readValue'),
                    ),
                  );
                }
              },
              child: Text('Save and Read'),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的表单,用户可以输入一个值,然后点击按钮来存储这个值,并立即读取它以显示在一个SnackBar中。

总结

以上代码展示了如何在Flutter项目中使用storage_hub插件进行数据存储管理。从配置StorageHub实例到使用它进行数据的存储和读取,这些步骤应该能帮助你在你的项目中有效地管理数据。请根据你的实际需求调整和扩展这些代码。

回到顶部