如何将多个图像保存到 firebase 存储并一次获取图像网址?

时间:2020-12-31 08:59:55

标签: firebase flutter firebase-storage

我正在尝试将列表中的多个图像保存到 firebasestorage 并取回所有这些图像的引用,然后将其保存到 cloud firestore !

此列表位于 List<menu> menus = []; 此处。

多个对象仅包括来自手机的图像路径 正在从此列表(菜单)中的 UI 中保存,然后我使用这些路径将图像上传到 firestorage 和取回其引用以将其保存在 Firestore 中:

onPressed: () async {
                  for (var i; i <= menus.length; i++) {
                    Reference ref = storage.ref().child(
                        "${this.widget.rr.name}'s ${menus[i].itemName} Price ${menus[i].itemPrice}" +
                            DateTime.now().toString());
                    if (menus[i].imageFile.toString() == '') {
                      //Some code
                    } else {
                      UploadTask uploadTask = ref.putFile(menus[i].imageFile);
                      uploadTask.then((res) async {
                        menus[i].imageUrl = await res.ref.getDownloadURL();
                      });
                    }
                  }
                  await addUser();
                },

这是 addUser() 函数:

Future<void> addUser() {
    return users
        .add({
      'name': this.widget.rr.name,
      'email': this.widget.rr.email,
      'password': this.widget.rr.password,
      'logoUrl': this.widget.rr.logo,
      'categories': this.widget.rr.categories,
      'menu': menus.map((i) => i.toMap()).toList(),
    })
        .then((value) => print("User Added"))
        .catchError((error) => print("Failed to add user: $error"));
  }

这是模型类

class menu{
  int id;
  String itemName;
  String itemPrice;
  String itemDescription;
  File imageFile;
  String imageUrl;
  menu(this.id,this.itemName,this.itemPrice,this.itemDescription,this.imageFile,{this.imageUrl});
  Map<String, dynamic> toMap() {
    return {
      'id': this.id,
      'itemName': this.itemName,
      'itemPrice': this.itemPrice,
      'itemDesc': this.itemDescription,
      'imageUrl':this.imageUrl,
    };
  }

}

但是当按下按钮时,显示以下错误...

E/flutter (12025): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: NoSuchMethodError: The method '<=' was called on null.
E/flutter (12025): Receiver: null
E/flutter (12025): Tried calling: <=(2)
E/flutter (12025): #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
E/flutter (12025): #1      _addMenuState.build.<anonymous closure> (package:ad_tello/UI/Restaurants/addMenu.dart:418:33)
E/flutter (12025): #2      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:993:19)
E/flutter (12025): #3      _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:1111:38)
E/flutter (12025): #4      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:183:24)
E/flutter (12025): #5      TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:598:11)
E/flutter (12025): #6      BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:287:5)
E/flutter (12025): #7      BaseTapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:259:7)
E/flutter (12025): #8      GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:157:27)
E/flutter (12025): #9      GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:362:20)
E/flutter (12025): #10     GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:338:22)
E/flutter (12025): #11     RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:267:11)
E/flutter (12025): #12     GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:295:7)
E/flutter (12025): #13     GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:240:7)
E/flutter (12025): #14     GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:213:7)
E/flutter (12025): #15     _rootRunUnary (dart:async/zone.dart:1206:13)
E/flutter (12025): #16     _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter (12025): #17     _CustomZone.runUnaryGuarded (dart:async/zone.dart:1005:7)
E/flutter (12025): #18     _invoke1 (dart:ui/hooks.dart:265:10)
E/flutter (12025): #19     _dispatchPointerDataPacket (dart:ui/hooks.dart:174:5)
E/flutter (12025): 

请帮忙!

1 个答案:

答案 0 :(得分:1)

您必须初始化i

 for (var i = 0; i < menus.length; i++) {