【问题标题】:flutter with firebase - detect the url string whether it is image(jpg) or video(avi)flutter with firebase - 检测 url 字符串是图像(jpg)还是视频(avi)
【发布时间】:2020-12-06 06:26:39
【问题描述】:

我是这些 Google 产品的初学者,遇到了“严重”问题。

我将照片和视频上传到 Firebase 存储,并且 Firebase 存储中的照片和视频的 url 会自动生成并存储在 firebase 数据库中。在我的颤振库中,我可以通过自己的代码调用这些 url,并在 avd 屏幕上显示 url 的图像。

Image.network(url) 是显示来自 firebase 的图像 url 的代码。但我也想用单个代码同时显示视频网址的资产。也就是说,视频和照片应该在一个屏幕上!在这种情况下,Image.network(url) 不再起作用..

如果我根据 video_player 插件更改视频格式的 image.network 代码,我将无法再显示图像资源,如果我保持与 Image.network(url) 代码相同,我将无法显示来自 firebase 的视频 url。那么问题来了:

如何使用我的 Flutter 代码检测 Firebase 的 url 字符串是图像还是视频,并使用集成的 Flutter 代码在“单屏”上显示该资产,无论文件格式是什么(至少是视频和照片)?

url example

【问题讨论】:

    标签: firebase flutter firebase-storage


    【解决方案1】:

    这没什么大不了的,因为媒体的类型在 URL 中。您可以将其解析为 Uri 对象然后提取类型。

    import 'dart:core';
    
    enum UrlType { IMAGE, VIDEO, UNKNOWN }
    
    void main() async {
      var imageUrl =
          'https://firebasestorage.googleapis.com/v0/b/myAppCodeNameForFirebase.appspot.com/o/Posts%20Pictures%2Fiufri095620200814.jpg?alt=media&token=89b6c22f-b8dd-4cff-9395-f53fc0808824';
      var videoUrl =
          'https://firebasestorage.googleapis.com/v0/b/myAppCodeNameForFirebase.appspot.com/o/Posts%20Pictures%2Fiufri095620200814.mp4?alt=media&token=89b6c22f-b8dd-4cff-9395-f53fc0808824';
    
      print(getUrlType(imageUrl));
      print(getUrlType(videoUrl));
    }
    
    UrlType getUrlType(String url) {
      Uri uri = Uri.parse(url);
      String typeString = uri.path.substring(uri.path.length - 3).toLowerCase();
      if (typeString == "jpg") {
        return UrlType.IMAGE;
      }
      if (typeString == "mp4") {
        return UrlType.VIDEO;
      } else {
        return UrlType.UNKNOWN;
      }
    }
    

    【讨论】:

      【解决方案2】:

      让我给你一个想法。
      考虑实施此方案。

      var url = 'domain.com/file.jpg?querySegment';
      

      在您的小部件区域中,

      child: url.contains('.mp4?') ? VideoWidget() : ImageWidget()                 
      

      此外,即使有多个条件,

       child: (url.contains('.jpg?') || url.contains('.png?')) ? ImageWidget() : VideoWidget()                
      

      希望这适合你的情况。

      【讨论】:

      • 考虑一个反例,其中url同时包含.mp4.jpg,它可能在查询段中。
      • 是的,你是对的!如果是这样,我们应该这样做吗? url.contains('.jpg?')
      • 一个 URL 可能包含多个问号,所以它仍然是一个问题。正如我在回答中所说,最安全的解决方案是将 URL 解析为 Uri 对象。 Uri 对象的路径变量对应于您的答案中的“/file.jpg”。自己试试Uri
      • 是的。我现在明白了。谢谢!
      猜你喜欢
      • 2021-02-09
      • 2017-07-13
      • 1970-01-01
      • 2017-04-28
      • 1970-01-01
      • 2013-07-11
      • 1970-01-01
      • 1970-01-01
      • 2020-10-26
      相关资源
      最近更新 更多