检查 asset 是否存在于 flutter 中
Check if asset exist in flutter
我如何检查 Flutter 中是否存在特定资产。我正在尝试加载一些图像和声音文件,我需要处理这些资产不存在的情况。
我需要检查是否存在,因为我有从 1 到 1000 的数字的音频文件和图像。当我构建我的小部件时,我使用从 1 到 1000 的循环来构建它。并且资产中可能不存在所需的文件(当前编号的图像或声音)。
我假设您正在使用 AssetBundle
class 使用 load
方法加载数据,该方法需要 ByteData
,并且当您使用此方法时,它如果找不到资产,将抛出异常。
根据 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,
);
});
}
在我的构建方法中使用图像小部件:
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");
},
),
),
对于 Flutter IO Dev 答案无效的人,因为异常仍然出现,这对我有用:
Future<Widget> getDevIcon(String path) async {
try {
await rootBundle.load(path);
return Image.asset(path);
} catch (_) {
return SizedBox.shrink();
}
}
你可以尝试我的解决方案,如果你使用一个简单的 Image.asset 小部件:
Image.asset(
'assets/image.jpg',
errorBuilder: (BuildContext context, Object exception, StackTrace stackTrace) {
return Image.network('path');})
我如何检查 Flutter 中是否存在特定资产。我正在尝试加载一些图像和声音文件,我需要处理这些资产不存在的情况。
我需要检查是否存在,因为我有从 1 到 1000 的数字的音频文件和图像。当我构建我的小部件时,我使用从 1 到 1000 的循环来构建它。并且资产中可能不存在所需的文件(当前编号的图像或声音)。
我假设您正在使用 AssetBundle
class 使用 load
方法加载数据,该方法需要 ByteData
,并且当您使用此方法时,它如果找不到资产,将抛出异常。
根据 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,
);
});
}
在我的构建方法中使用图像小部件:
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");
},
),
),
对于 Flutter IO Dev 答案无效的人,因为异常仍然出现,这对我有用:
Future<Widget> getDevIcon(String path) async {
try {
await rootBundle.load(path);
return Image.asset(path);
} catch (_) {
return SizedBox.shrink();
}
}
你可以尝试我的解决方案,如果你使用一个简单的 Image.asset 小部件:
Image.asset(
'assets/image.jpg',
errorBuilder: (BuildContext context, Object exception, StackTrace stackTrace) {
return Image.network('path');})