Flutter Web 不显示 Firebase 存储中的 NetworkImages,但在 android 模拟器上完美运行

Posted

技术标签:

【中文标题】Flutter Web 不显示 Firebase 存储中的 NetworkImages,但在 android 模拟器上完美运行【英文标题】:Flutter Web not displaying NetworkImages from Firebase storage, works perfectly on android emulator however 【发布时间】:2021-06-04 02:58:30 【问题描述】:

如标题所示,我正在将我的应用程序部署到 Flutter Web 并显示来自 Firebase 存储的图片。在 android 模拟器上测试时,它可以完美运行并显示所有图像而没有错误。但是,当我将它部署到我的网络应用程序时,由于某种原因,图像根本不显示。下面我添加了相关代码 sn-p,它显示了我如何显示来自 Firebase 的图片(同样,它在 Android 模拟器上运行良好)以及网络应用程序尝试显示图片时出现的错误。

代码:

void checkImages() async 
    FirebaseFirestore.instance
        .collection("uploads")
        .where('username', isEqualTo: Constants.myName)
        .get()
        .then((querySnapshot) 
      querySnapshot.docs.forEach((result) 
        FirebaseFirestore.instance
            .collection("uploads")
            .doc(result.id)
            .collection("images")
            .get()
            .then((querySnapshot) 
          querySnapshot.docs.forEach((result) async 
            imageCount++;
            final ref =
                FirebaseStorage.instance.ref().child(result.data()['imageid']);
            url = await ref.getDownloadURL();
            setState(() 
              printImages();
            );
          );
        );
      );
    );
  

  printImages() 
    return List.generate(imageCount, (index) 
      return GestureDetector(
        onTap: () 
          print( "hello");
        ,
        child: Container(
          decoration: BoxDecoration(
            borderRadius: BorderRadius.all(
              Radius.circular(10),
            ),
          ),
          child: Image.network(
            url.toString(),
            fit: BoxFit.cover,
          ),
        ),
      );
    );
   

网络控制台出错:

main.dart.js?version=19:3082 Uncaught MissingPluginException(No implementation found for method StorageReference#getDownloadUrl on channel plugins.flutter.io/firebase_storage)
    at Object.a (https://social-io-102b4.firebaseapp.com/main.dart.js?version=19:3082:3)
    at https://social-io-102b4.firebaseapp.com/main.dart.js?version=19:53813:15
    at adv.a (https://social-io-102b4.firebaseapp.com/main.dart.js?version=19:4517:71)
    at adv.$2 (https://social-io-102b4.firebaseapp.com/main.dart.js?version=19:30063:23)
    at acI.$1 (https://social-io-102b4.firebaseapp.com/main.dart.js?version=19:30055:30)
    at No.mY (https://social-io-102b4.firebaseapp.com/main.dart.js?version=19:31072:40)
    at a82.$0 (https://social-io-102b4.firebaseapp.com/main.dart.js?version=19:30474:11)
    at Object.rs (https://social-io-102b4.firebaseapp.com/main.dart.js?version=19:4637:40)
    at a1.nL (https://social-io-102b4.firebaseapp.com/main.dart.js?version=19:30390:3)
    at a7V.$0 (https://social-io-102b4.firebaseapp.com/main.dart.js?version=19:30432:22)

此外,我很确定我已正确安装所有插件,因为它适用于 Android。任何帮助将不胜感激,谢谢。

【问题讨论】:

即使 Flutter Web 发布了稳定版本,仍有一些问题需要修复。即使我面临缺少插件实现的问题。如果你已经正确安装了所有的包,那么很可能它的网络支持还不合适。您应该在涉及开发人员的 github 上查找此问题。 【参考方案1】:

请尝试将此脚本标记添加到您的 index.html,在您使用 Firebase 凭据初始化它之后(在 Firebase 中添加新的网络应用时会得到它们)

//import the Firestore plugin
<script src="https://www.gstatic.com/firebasejs/8.2.10/firebase-firestore.js"></script>

看看这个网站,看看你可能想要导入的所有插件:

https://firebase.google.com/docs/web/setup#expandable-8

【讨论】:

谢谢!所以我确实已经安装了这个插件,但它是一个旧版本;在看到您发布的版本 8.2.10 的链接后,我意识到我的版本已经过时了。此外,阻止图像加载的另一件事是我需要 CORS 许可。

以上是关于Flutter Web 不显示 Firebase 存储中的 NetworkImages,但在 android 模拟器上完美运行的主要内容,如果未能解决你的问题,请参考以下文章

尝试在托管 Web Flutter 应用程序的 Firebase 中部署

如何在 Flutter Web 中显示 Firebase 存储图像。我有图片网址。显示 URL 而不是图像。但另一侧图像链接已完美完成

Firebase 存储的图像链接返回 null - Flutter

在 Flutter Web 中长时间使用 Firebase 后退出

Flutter Web Firebase 错误。未捕获的 ReferenceError:未定义 firebase

Flutter:一个应用程序中有多个firebase项目,但显示的数据不正确