firebase_storage/未找到对象。所需参考处不存在对象

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

我正在尝试从 firebase 存储中获取图像并将其显示在我的 flutter 应用程序中,但我收到错误“所需参考处不存在对象”。所有图像都存储在根目录中。我还更改了 firebase 规则以允许在无需身份验证的情况下进行读写。 这是我的代码。

import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:firebase_storage/firebase_storage.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Wallpaper App',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: WallpaperScreen(),
    );
  }
}

class WallpaperScreen extends StatefulWidget {
  @override
  _WallpaperScreenState createState() => _WallpaperScreenState();
}

class _WallpaperScreenState extends State<WallpaperScreen> {
  List<String> imageUrls = []; // Store fetched image URLs

  @override
  void initState() {
    super.initState();
    fetchImages();
  }

  Future<void> fetchImages() async {
    try {
      final storageRef = FirebaseStorage.instance.ref();
      final result = await storageRef.listAll();

      for (var item in result.items) {
        try {
          final url = await item.getDownloadURL();
          setState(() {
            imageUrls.add(url);
          });
        } catch (error) {
          print("Error fetching URL");
        }
      }
    } catch (e) {
      print("Error fetching images: $e");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Wallpapers'),
      ),
      body: GridView.builder(
        itemCount: imageUrls.length,
        gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
          crossAxisCount: 2,
          crossAxisSpacing: 4.0,
          mainAxisSpacing: 4.0,
        ),
        itemBuilder: (BuildContext context, int index) {
          return Image.network(
            imageUrls[index], // Load image from URL
            fit: BoxFit.cover,
          );
        },
      ),
    );
  }
}
flutter firebase firebase-storage
1个回答
0
投票

Firebase Storage 中的错误“所需引用处不存在对象”通常表示您提供的路径与存储桶中的任何对象不对应。以下是一些需要检查和排除故障的事项:

  1. 检查 Firebase 存储路径:确保您提供给

    FirebaseStorage.instance.ref()
    的路径与 Firebase 存储中存储图像的路径匹配。你提到你的图像存储在根目录中,所以路径确实应该是正确的。

  2. 验证 Firebase 存储规则:尽管您提到您已将 Firebase 存储规则设置为允许在无需身份验证的情况下进行读写,但最好仔细检查它们以确保它们配置正确。以下是允许公共读取所有文件的规则示例:

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read;
      allow write: if false; // or any other conditions for write operations
    }
  }
}
  1. 检查 URL 获取中的错误:虽然您有一个 catch 块来处理获取 URL 时的错误,但您可能希望打印出特定的错误消息以帮助排除故障。像这样修改
    fetchImages()
    中的 catch 块:
        } catch (error) {
          print("Error fetching URL: $error");
        }

这样,如果获取下载 URL 时出现任何问题,您可以看到确切的错误消息。

  1. 验证 Firebase 初始化:确保 Firebase 在您的应用中正确初始化。您已经在
    main()
    函数中完成了此操作,但最好仔细检查一下。

如果您已验证上述所有内容但仍然遇到问题,请尝试检查 Firebase 控制台是否有任何错误日志或可能有助于查明问题的其他信息。另外,请确保您的 Firebase 项目已正确设置并链接到您的 Flutter 应用。

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