Reputation: 2500
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!
Upvotes: 0
Views: 228
Reputation: 80904
You have to initialize i
:
for (var i = 0; i < menus.length; i++) {
Upvotes: 1