如何使用异步变量初始化类,以便在使用该类之前设置它们?我的类当前只是调用一个async init函数,但我必须单独调用该函数才能等待它完成:
class Storage {
String imageDirectory;
String jsonDirectory;
SharedPreferences instance;
String uuid;
init() async {
imageDirectory = '${(await getApplicationDocumentsDirectory()).path}/image_cache/';
jsonDirectory = '${(await getApplicationDocumentsDirectory()).path}/json_cache/';
instance = await SharedPreferences.getInstance();
uuid = instance.getString("UUID");
}
}
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?
您可能希望拥有异步工厂构造函数,但它们是不允许的。
因此,一种解决方案是static getInstance(),例如:
class Storage {
static Future<Storage> getInstance() async {
String docsFolder = (await getApplicationDocumentsDirectory()).path;
return new Storage(
docsFolder + '/image_cache/',
docsFolder + '/json_cache/',
(await SharedPreferences.getInstance()).getString('UUID'));
}
String imageDirectory;
String jsonDirectory;
String uuid;
Storage(this.imageDirectory, this.jsonDirectory, this.uuid);
}
Run Code Online (Sandbox Code Playgroud)
您可以getInstance根据需要将参数传递到构造函数中。使用以下命令调用上面的内容:
Storage s = await Storage.getInstance();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3617 次 |
| 最近记录: |