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

Posted

技术标签:

【中文标题】Firebase 存储的图像链接返回 null - Flutter【英文标题】:Image link of firebase storage is returning null - Flutter 【发布时间】:2021-01-10 00:42:59 【问题描述】:

显示图像的 fiorebase 存储链接时,我收到此错误 network_image_web.dart:26:16 url != null 不正确

以下是示例。是的,除了图片之外,供应商的所有其他领域都很好

class AddAlreadyExistingProductsView extends StatefulWidget 
  @override
  _AddAlreadyExistingProductsViewState createState() =>
      _AddAlreadyExistingProductsViewState();


class _AddAlreadyExistingProductsViewState
    extends State<AddAlreadyExistingProductsView> 
@override
  Widget build(BuildContext context) 
final _productsList = Provider.of<List<Product>>(context);

return Scaffold(
............
    child: 
       SearchableDropdown.single(
       ............
            items: _productsList.map((value) 
               print("---> pic : " + value.pic.toString()); // <--- NULL HERE
          ..........        
       child: ListTile(
             leading: CircleAvatar(
               backgroundImage: NetworkImage(value.pic),
            ),
           subtitle: Text(value.name)
.............
                                ) 
                             )
                            
class MainDataProvider extends StatelessWidget 
  @override
  Widget build(BuildContext context) 
    return MultiProvider(
      providers: [
       StreamProvider<List<Product>>.value(
        value: DatabaseService().getAllProducts,
........
      ],
      child: MaterialApp(
        home: AddAlreadyExistingProductsView (),
      ),
    );
  

我也尝试打印它,同时打印图像并返回 null。检索所有其他字段很好。我给出了存储在网络图像内的 firebase 数据库中的该图像的静态值,它运行良好。但是在动态获取数据时它不起作用。我不知道为什么。我在移动设备中以相同的方式获取数据并且它可以工作,但对于 Flutter Web 则无法正常工作。

这是产品型号代码

  Stream<List<Product>> get getAllProducts 
    return productCollection.get().asStream().map(_productDataFromSnapshot);
  

  List<Product> _productDataFromSnapshot(QuerySnapshot snapshot) 
    List<Product> productsList = List<Product>();

    for (int i = 0; i < snapshot.docs.length; i++) 
      productsList.add(Product(
        productID: snapshot.docs[i].data()['productID'] ?? "",
        name: snapshot.docs[i].data()['name'] ?? "",
        volume: snapshot.docs[i].data()['volume'] ?? "",
        price: snapshot.docs[i].data()['price'] ?? "",
        quantity: snapshot.docs[i].data()['quantity'] ?? "",
        brand: snapshot.docs[i].data()['brand'] ?? "",
        productAttribute: snapshot.docs[i].data()['productAttribute'] ?? "",
        productCtgName: snapshot.docs[i].data()['productCtgName'] ?? "",
        productSubCtgName: snapshot.docs[i].data()['productSubCtgName'] ?? "",
        productCtgID: snapshot.docs[i].data()['productCtgID'] ?? "",
        productSubCtgID: snapshot.docs[i].data()['productSubCtgID'] ?? "",
      ));
    
    return productsList;
  


class Product 
  String productID;
  String name;
  int price;
  int salePrice;
  DateTime addDate;
  String volume;
  int quantity;
  String productAttribute;
  String productSubCtgID;
  String productCtgID;
  String productSubCtgName;
  String productCtgName;
  String brand;
  String pic;

  Product(
    this.productID,
    this.name,
    this.price,
    this.addDate,
    this.volume,
    this.quantity,
    this.productAttribute,
    this.brand,
    this.productCtgID,
    this.productSubCtgID,
    this.productCtgName,
    this.productSubCtgName,
    this.pic,
    this.salePrice,
  );

【问题讨论】:

分享您的产品型号。 @Siddharthjha 对不起,我的错。我已经更新了问题 【参考方案1】:

在 for 循环的 _productDataFromSnapshot 函数中,您没有初始化 pic 字段。

为防止此类错误,请对此类字段使用@required

【讨论】:

以上是关于Firebase 存储的图像链接返回 null - Flutter的主要内容,如果未能解决你的问题,请参考以下文章

如何在实时数据库firebase android中存储下载图像url

将图像链接从 Firebase 存储存储到 Firebase 数据库时出错

Firebase 存储 - 将图像上传到 Firebase 存储并在实时数据库中创建指向该图像的链接

ios中的Firebase动态短链接返回null但长动态链接有效

如何使用 Firebase 存储“直接链接”到图像

如何从 Firebase 存储下载 URL 中删除查询字符串