Проверьте, существует ли актив - PullRequest
0 голосов
/ 04 июня 2018

Есть ли способ проверить, существует ли файл актива в Флаттер , прежде чем пытаться загрузить данные?

На данный момент у меня есть следующее:

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
}

Мне это кажется очень уродливым, но у меня нет лучшей идеи ...

1 Ответ

0 голосов
/ 04 июня 2018

AssetBundle (как возвращено rootBundle) обобщает различные способы загрузки ресурсов (локальный файл, сеть), и нет общего способа проверить, существует ли он.

Вы можете легко обернутьзагрузка кода, чтобы он стал менее «уродливым».

  Future myLoadAsset(String path) async {
    try {
      data = await rootBundle.loadString(path);
    } catch(_) {
      return null;
    }
  } 
var assetPaths = ['file1path', 'file2path', 'file3path'];
var asset;

for(var assetPath in assetPaths) {
  asset = myLoadAsset(assetPath);
  if(asset != null) {
    break; 
  }
}

if(asset == null) {
  throw "Asset and fallback assets couldn't be loaded";
}
...