我很难区分网络图像和文件图像。
putImage(image){
if(image.runtimeType == String){
// if(image.contains('http')){
imageInProfile = NetworkImage(image);
return imageInProfile;
} else{
imageInProfile = FileImage(File(image));
return imageInProfile;
}
}
我使用了'image.runtimeType == String',但是网络图像和文件图像都是字符串类型。 然后我尝试了 contains 方法,因为大多数网络图像都有“http”或“https”,但它不起作用并导致错误,即类型“_File”不是类型“String”的子类型。 我该如何解决这个问题?
要检查有效的 URL 字符串,您只需使用 Uri.parse() ,如下所示。
bool _validURL = Uri.parse(_adVertData.webLink).isAbsolute;
我相信您会收到字符串 URL,其中一个是网络图像,另一个是文件。
如果是,您可以检查文件类型,
if(image is String)
这将检查图像对象的类型。如果是 String,则应检查 url 是否为 http url,
Uri.parse(_adVertData.webLink).isAbsolute
如果是 Http url,则返回 true。
如果这不适合您,请告诉我
更新:
Widget getImageBasedonType(String image){
if(image.contains("http://") ||image.contains("https://")){
return Image.network(image);
}else{
return Image.file(File(image));
}
}
这里,我认为图像将是网络图像或文件路径而不是资产。
你可以创建一个像这样的吸气剂:
bool get isNetworkImage {
return Uri.tryParse(iconPath)!.host.isNotEmpty;
}
并在您的小部件中使用它,例如:
isNetworkImage ? SvgPicture.network(path) : SvgPicture.asset(path);
getter 通过检查是否存在任何主机来检查字符串是否是有效的 URL。每个有效的 URL 都应该有一个主机,而相对路径没有主机。