在尝试加载数据之前,有什么方法可以检查 Flutter中 是否存在资产文件?
现在,我有以下内容:
String data; try { data = await rootBundle .loadString('path/to/file.json'); } catch (Exception) { print('file not found'); }
问题是,我必须检查文件1,如果没有退出,我必须检查后备文件(文件2),如果也不存在,我将加载第三个文件。
我完整的代码如下所示:
try{ //load file 1 } catch (..) { //file 1 not found //load file 2 } catch (...) { //file 2 not found //load file 3 }
在我看来,这很丑陋,但是我没有更好的主意…
AssetBundle(由返回rootBundle)通过不同的方式加载资产(本地文件,网络)的抽象方式,并且没有检查该资产是否存在的通用方法。
AssetBundle
rootBundle
您可以轻松地包装您的加载代码,以使其变得不那么“丑陋”。
Future myLoadAsset(String path) async { try { return await rootBundle.loadString(path); } catch(_) { return null; } } var assetPaths = ['file1path', 'file2path', 'file3path']; var asset; for(var assetPath in assetPaths) { asset = await myLoadAsset(assetPath); if(asset != null) { break; } } if(asset == null) { throw "Asset and fallback assets couldn't be loaded"; }