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