检查资产是否存在波动

时间:2018-10-20 18:38:02

标签: dart flutter assets

如何检查Flutter中是否存在特定资产,我正在尝试加载一些图像和声音文件,并且需要处理这些资产不存在的情况。

我需要检查是否存在,因为在构建窗口小部件时,我具有从1到1000的数字的音频文件和图像,我使用从1到1000的循环来构建它。并且资产中可能不存在所需文件(当前编号的图像或声音)。

4 个答案:

答案 0 :(得分:2)

我假设您正在使用AssetBundle类通过load的{​​{1}}方法加载数据,并且当您使用此方法时,如果找不到资产。

答案 1 :(得分:1)

如果您使用简单的 Image.asset Widget,您可以尝试我的解决方案:

Image.asset(
'assets/image.jpg',
 errorBuilder: (BuildContext context, Object exception, StackTrace stackTrace) {
                return Image.network('path');})

答案 2 :(得分:0)

根据Raouf的建议,我处理了资产不存在的情况。

图像加载器小部件:

Future<Image> _buildImage() async {
  String path = "assets/images/contents/${content.id}.jpg";
  return rootBundle.load(path).then((value) {
    return Image.memory(value.buffer.asUint8List());
  }).catchError((_) {
    return Image.asset(
      "assets/images/null.png",
      height: 250.0,
    );
  });
}

在我的构建方法中使用Image小部件:

FutureBuilder(
          future: _buildImage(),
          builder: (BuildContext context, AsyncSnapshot<Image> snapshot) {
            if (snapshot.connectionState == ConnectionState.done)
              return snapshot.data;
            else
              return Image.asset("assets/images/null.png");
          },
        ),
      ),

答案 3 :(得分:0)

对于Flutter IO Dev回答由于仍然出现异常而无法工作的人,这对我有用:

Future<Widget> getDevIcon(String path) async {
  try {
    await rootBundle.load(path);
    return Image.asset(path);
  } catch (_) {
    return SizedBox.shrink();
  }
}