Flutter本地存储插件wepin_flutter_storage的使用

Flutter本地存储插件wepin_flutter_storage的使用

简介

wepin_flutter_storage 是一个专门为 Flutter 开发的本地存储插件。它适用于 Android 和 iOS 环境。

pub package

安装

在你的 pubspec.yaml 文件中添加 wepin_flutter_storage 依赖:

dependencies:
  wepin_flutter_storage: ^1.0.0

或者运行以下命令:

flutter pub add wepin_flutter_storage

使用示例

以下是完整的示例代码,展示了如何使用 wepin_flutter_storage 插件进行本地存储操作。

示例代码

import 'package:flutter/material.dart';
import 'dart:convert';
import 'package:wepin_flutter_storage/wepin_flutter_storage.dart';

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      debugShowCheckedModeBanner: false,
      home: StorageTestScreen(),
    );
  }
}

class StorageTestScreen extends StatefulWidget {
  const StorageTestScreen({super.key});

  [@override](/user/override)
  State<StorageTestScreen> createState() => _StorageTestScreenState();
}

class _StorageTestScreenState extends State<StorageTestScreen> {
  final WepinStorage wepinStorage = WepinStorage(appId: "testApp");

  String selectedKey = StorageDataType.firebaseWepin; // 默认选择键
  final TextEditingController valueController = TextEditingController();
  String? storedValue;
  Map<String, dynamic>? allData;

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

  Future<void> saveData() async {
    final value = valueController.text;
    if (value.isEmpty) return;

    try {
      final parsedValue = _parseValueForKey(selectedKey, value);
      await wepinStorage.setLocalStorage(selectedKey, parsedValue);
      setState(() {
        storedValue = "✅ 保存成功!";
      });
    } catch (e) {
      setState(() {
        storedValue = "⚠️ 错误: ${e.toString()}";
      });
    }
  }

  Future<void> loadData() async {
    final data = await wepinStorage.getLocalStorage(selectedKey);
    setState(() {
      storedValue = data?.toString() ?? "没有数据!";
    });
  }

  Future<void> loadAllData() async {
    final data = await wepinStorage.getAllLocalStorage();
    setState(() {
      allData = data;
    });
  }

  Future<void> clearData() async {
    await wepinStorage.clearAllLocalStorage();
    setState(() {
      storedValue = "所有数据已删除!";
      allData = null;
    });
  }

  /// 根据StorageDataType解析值
  dynamic _parseValueForKey(String key, String value) {
    switch (key) {
      case StorageDataType.firebaseWepin:
        return IFirebaseWepin.fromJson(jsonDecode(value));
      // case StorageDataType.wepinConnectUser:
      //   return WepinUser.fromJson(jsonDecode(value));
      case StorageDataType.userId:
      case StorageDataType.walletId:
        return value; // 字符串
      // case StorageDataType.userStatus:
      //   return WepinUserStatus.fromJson(jsonDecode(value));
      case StorageDataType.userInfo:
        return jsonDecode(value); // JSON 数据
      case StorageDataType.oauthProviderPending:
        return value.toLowerCase() == "true"; // 转换为布尔值
      default:
        throw ArgumentError("不支持的键!");
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("WepinStorage 测试应用")),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            const Text("📌 选择要保存的键"),
            DropdownButton<String>(
              value: selectedKey,
              items: StorageDataType.all
                  .cast<String>() // List<dynamic> -> List<String> 转换
                  .map<DropdownMenuItem<String>>((key) => DropdownMenuItem<String>(
                value: key,
                child: Text(key),
              ))
                  .toList(),
              onChanged: (key) {
                if (key != null) {
                  setState(() {
                    selectedKey = key;
                  });
                }
              },
            ),
            const SizedBox(height: 10),
            TextField(
              controller: valueController,
              decoration: const InputDecoration(
                labelText: "输入值",
                hintText: "JSON格式或正确数据",
              ),
            ),
            const SizedBox(height: 20),
            Row(
              children: [
                ElevatedButton(
                  onPressed: saveData,
                  child: const Text("保存"),
                ),
                const SizedBox(width: 10),
                ElevatedButton(
                  onPressed: loadData,
                  child: const Text("加载"),
                ),
                const SizedBox(width: 10),
                ElevatedButton(
                  onPressed: clearData,
                  child: const Text("清除所有数据"),
                ),
              ],
            ),
            const SizedBox(height: 20),
            Text("📌 已保存的值: ${storedValue ?? '无'}"),
            const SizedBox(height: 10),
            ElevatedButton(
              onPressed: loadAllData,
              child: const Text("加载所有数据"),
            ),
            const SizedBox(height: 10),
            Text("📌 所有数据: ${allData?.toString() ?? '无'}"),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


wepin_flutter_storage 是一个用于 Flutter 的本地存储插件,提供了简单易用的 API 来进行数据的存储和读取。下面是如何使用 wepin_flutter_storage 插件的基本步骤。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  wepin_flutter_storage: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

2. 导入插件

在需要使用 wepin_flutter_storage 的 Dart 文件中导入插件:

import 'package:wepin_flutter_storage/wepin_flutter_storage.dart';

3. 初始化插件

在应用程序启动时初始化 wepin_flutter_storage 插件:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await WepinFlutterStorage.initialize();
  runApp(MyApp());
}

4. 存储数据

使用 WepinFlutterStorage 提供的 API 来存储数据。例如,存储一个字符串:

await WepinFlutterStorage.setString('key', 'value');

5. 读取数据

使用 WepinFlutterStorage 提供的 API 来读取数据。例如,读取一个字符串:

String value = await WepinFlutterStorage.getString('key');
print(value);  // 输出: value

6. 删除数据

你可以使用 WepinFlutterStorage 提供的 API 来删除数据。例如,删除一个键值对:

await WepinFlutterStorage.remove('key');

7. 清除所有数据

如果你想清除所有存储的数据,可以使用以下方法:

await WepinFlutterStorage.clear();

8. 其他数据类型

wepin_flutter_storage 还支持存储其他数据类型,如 intdoubleboolMap。例如:

// 存储整数
await WepinFlutterStorage.setInt('intKey', 42);

// 读取整数
int intValue = await WepinFlutterStorage.getInt('intKey');

// 存储布尔值
await WepinFlutterStorage.setBool('boolKey', true);

// 读取布尔值
bool boolValue = await WepinFlutterStorage.getBool('boolKey');

// 存储Map
await WepinFlutterStorage.setMap('mapKey', {'name': 'John', 'age': 30});

// 读取Map
Map<String, dynamic> mapValue = await WepinFlutterStorage.getMap('mapKey');

9. 检查键是否存在

你可以检查某个键是否存在:

bool exists = await WepinFlutterStorage.containsKey('key');
print(exists);  // 输出: true 或 false

10. 获取所有键

你可以获取所有存储的键:

List<String> keys = await WepinFlutterStorage.getAllKeys();
print(keys);  // 输出所有存储的键
回到顶部