Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
502 views
in Technique[技术] by (71.8m points)

flutter - How to save multiple images to firebase storage and get image urls at once?

I'm trying to save multiple images from a list to firebasestorage and get back references of all these images and then saving it to cloud firestore !

This list is List<menu> menus = []; here.

Multiple objects including paths of images only from phone are being saved from UI in this list(menus) and then I'm uploading images using these paths to firestorage and getting back its references to save it in 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();
                },

This is addUser() function:

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"));
  }

And this is Model class

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,
    };
  }

}

But when the button is pressed, following error is displayed...

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): 

Help please!


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

You have to initialize i:

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...