flutter中如何区分网络图片和文件图片?

问题描述 投票:0回答:3

我很难区分网络图像和文件图像。

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”的子类型。 我该如何解决这个问题?

flutter dart
3个回答
1
投票

要检查有效的 URL 字符串,您只需使用 Uri.parse() ,如下所示。

bool _validURL = Uri.parse(_adVertData.webLink).isAbsolute;

0
投票

我相信您会收到字符串 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));
    }
  }

这里,我认为图像将是网络图像或文件路径而不是资产。


0
投票

你可以创建一个像这样的吸气剂:

  bool get isNetworkImage {
    return Uri.tryParse(iconPath)!.host.isNotEmpty;
  }

并在您的小部件中使用它,例如:

isNetworkImage ? SvgPicture.network(path) : SvgPicture.asset(path);

getter 通过检查是否存在任何主机来检查字符串是否是有效的 URL。每个有效的 URL 都应该有一个主机,而相对路径没有主机。

© www.soinside.com 2019 - 2024. All rights reserved.