如何将数据从本机异步存储迁移到颤动?

时间:2018-07-24 04:37:04

标签: react-native storage flutter dbmigrate

我希望将React本机应用迁移到扑朔迷离的状态,到目前为止一切都很好。但是我必须迁移存储在响应本机异步存储中的用户数据,我什至不知道从哪里开始。有人可以引导我朝正确的方向前进吗?

2 个答案:

答案 0 :(得分:1)

我做了同样的事情,最终使用flutter_secure_storage创建了一个简单的帮助器类:

import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'dart:async';

class LocalStorage {

  final storage = new FlutterSecureStorage();

  void writeValue(String key, String value) {
    storage.write(key: key, value: value);
  }

  void deleteValue(String key) async {
    await storage.delete(key: key);
  }

  Future readValue(String key) async {
    String value = await storage.read(key: key);
    return value;
  }

}

然后您将在如下屏幕中使用它:

final _storage = new LocalStorage();

Future _getValue() async {
  String _someValue = await _storage.readValue('someKey');
}

答案 1 :(得分:0)

今天遇到同样的问题后,我想出了一个适用于iOS的解决方案。我在 Android 上没有问题,所以很遗憾我也没有针对 Android 的解决方案。 基本上,RN AsyncStorage 包会创建一个包含 manifest.json 的文件夹。此文件夹存储在您的应用程序的 Documents 目录中。我的方法是简单地加载该文件并返回密钥。

Future<String> getReactNativeAsyncStorageValue(String key) async {
  if (!Platform.isIOS) return null;
  try {
    Directory directory = await getApplicationDocumentsDirectory();
    Directory rctStorageDirectory = Directory(directory.path + '/RCTAsyncLocalStorage_V1');
    File manifest = File(rctStorageDirectory.path + "/manifest.json");
    if (await rctStorageDirectory.exists() && await manifest.exists()) {
      try {
        String data = await rootBundle.loadString(manifest.path);
        if (data?.isNotEmpty ?? false) {
          var jsonData = json.decode(data);
          if (jsonData is Map) {
            String value = jsonData[key];
            if (value != null) {
              return value;
            }
          }
        }
      } catch (error) {
        print(error);
      }
    }
  } catch(error){
    print(error);
  }
  return null;
}