Here I want the user to be able to upload up to 5 images. But when one uploads less than 5 images it freezes the app and does not upload the document at all.
class ItemInput extends StatefulWidget {
@override
_ItemInputState createState() => _ItemInputState();
}
class _ItemInputState extends State<ItemInput> {
final Firestore database = Firestore.instance;
//CollectionReference products = Firestore.instance.collection('products');
TextEditingController nameText = TextEditingController();
TextEditingController priceText = TextEditingController();
TextEditingController cellNoText = TextEditingController();
TextEditingController addText = TextEditingController();
TextEditingController detailText = TextEditingController();
TextEditingController pic = TextEditingController();
final _formKey = GlobalKey<FormState>();
File _image1;
File _image2;
File _image3;
File _image4;
File _image5;
static const menuItems = <String>[
'Car/????',
'motorcycle/ ?????????',
'electronics/?????????',
'house/ ????',
'household/????? ????',
'mobile/??????',
'Sellect Category/?????? ???',
];
final List<DropdownMenuItem<String>> _dropDownMenuItems = menuItems
.map((String value) => DropdownMenuItem<String>(
value: value,
child: Text(value),
))
.toList();
String _btnselected = "Sellect Category/?????? ???";
Future getImage1() async {
var firstImage = await ImagePicker.pickImage(source: ImageSource.gallery);
setState(() {
_image1 = firstImage;
});
}
Future getImage2() async {
var secondImage = await ImagePicker.pickImage(source: ImageSource.gallery);
setState(() {
_image2 = secondImage;
});
}
Future getImage3() async {
var thirdImage = await ImagePicker.pickImage(source: ImageSource.gallery);
setState(() {
_image3 = thirdImage;
});
}
Future getImage4() async {
var forthImage = await ImagePicker.pickImage(source: ImageSource.gallery);
setState(() {
_image4 = forthImage;
});
}
Future getImage5() async {
var fifthImage = await ImagePicker.pickImage(source: ImageSource.gallery);
setState(() {
_image5 = fifthImage;
});
}
var imageUrl1;
var imageUrl2;
var imageUrl3;
var imageUrl4;
var imageUrl5;
FirebaseStorage storage = FirebaseStorage.instance;
uploadPic() async {
StorageReference reference = storage.ref().child("images");
StorageUploadTask uploadTask = reference.putFile(_image1);
StorageTaskSnapshot taskSnapshot = await uploadTask.onComplete;
String url = await taskSnapshot.ref.getDownloadURL();
imageUrl1 = url;
return url;
}
/////2
uploadPic2() async {
StorageReference reference = storage.ref().child("images");
StorageUploadTask uploadTask = reference.putFile(_image2);
StorageTaskSnapshot taskSnapshot = await uploadTask.onComplete;
String url = await taskSnapshot.ref.getDownloadURL();
imageUrl2 = url;
return url;
}
////3
uploadPic3() async {
StorageReference reference = storage.ref().child("images");
StorageUploadTask uploadTask = reference.putFile(_image3);
StorageTaskSnapshot taskSnapshot = await uploadTask.onComplete;
String url = await taskSnapshot.ref.getDownloadURL();
imageUrl3 = url;
return url;
}
///4
uploadPic4() async {
StorageReference reference = storage.ref().child("images");
StorageUploadTask uploadTask = reference.putFile(_image4);
StorageTaskSnapshot taskSnapshot = await uploadTask.onComplete;
String url = await taskSnapshot.ref.getDownloadURL();
imageUrl4 = url;
return url;
}
///5
uploadPic5() async {
StorageReference reference = storage.ref().child("images");
StorageUploadTask uploadTask = reference.putFile(_image5);
StorageTaskSnapshot taskSnapshot = await uploadTask.onComplete;
String url = await taskSnapshot.ref.getDownloadURL();
imageUrl5 = url;
return url;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Put AD'),
centerTitle: true,
),
body: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(5.0),
child: Card(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Form(
key: _formKey,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
TextFormField(
controller: nameText,
decoration: const InputDecoration(
icon: const Icon(Icons.directions_car),
hintText: 'Corolla, Mercedes...',
labelText: 'Item Name - ??? ???',
),
),
SizedBox(height: 10),
TextFormField(
controller: detailText,
decoration: const InputDecoration(
icon: const Icon(Icons.description),
hintText: 'Description - ??????',
labelText: 'Description - ??????',
),
),
SizedBox(height: 10),
TextFormField(
controller: priceText,
decoration: const InputDecoration(
icon: const Icon(Icons.attach_money),
hintText: 'Enter your item's price',
labelText: 'Price - ????',
),
),
SizedBox(height: 10),
TextFormField(
controller: cellNoText,
decoration: const InputDecoration(
icon: const Icon(Icons.call),
hintText: '0700-000-000',
labelText: 'Mobile Number - ????? ????',
),
),
SizedBox(height: 10),
TextFormField(
controller: addText,
decoration: const InputDecoration(
icon: const Icon(Icons.location_city),
hintText: 'Enter Your Address',
labelText: 'Address - ????',
),
),
SizedBox(height: 30),
Padding(
padding: const EdgeInsets.all(5.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
//////// dropdown start //////////
DropdownButton(
hint: Text('Sellect Category'),
value: _btnselected,
items: this._dropDownMenuItems,
onChanged: (String newvalue) {
setState(() {
_btnselected = newvalue;
});
},
),
/////// dropdown end //////
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
InkWell(
onTap: () async {
await getImage1();
},
child: Container(
decoration: BoxDecoration(
color: Colors.black26,
borderRadius:
BorderRadius.circular(10)),
height: 60,
width: 60,
child: (_image1 == null)
? Icon(Icons.add_a_photo, size: 30)
: Image.file(
_image1,
fit: BoxFit.cover,
)
),
),
SizedBox(width: 5),
InkWell(
onTap: () async {
await getImage2();
},
child: Container(
height: 60,
width: 60,
decoration: BoxDecoration(
color: Colors.black26,
borderRadius:
BorderRadius.circular(10)),
child: (_image2 == null)
? Icon(Icons.add_a_photo, size: 30)
: Image.file(
_image2,
fit: BoxFit.fill,
)),
),
SizedBox(width: 5),
InkWell(
onTap: () async {
await getImage3();
},
child: Container(
height: 60,
width: 60,
decoration: BoxDecoration(
color: Colors.black26,
borderRadius:
BorderRadius.circular(10)),
child: (_image3 == null)
? Icon(Icons.add_a_photo, size: 30)
: Image.file(
_image3,
fit: BoxFit.fill,
)),
),
SizedBox(width: 5),
InkWell(
onTap: () async {
await getImage4();
},
child: Container(
height: 60,
width: 60,
decoration: BoxDecoration(
color: Colors.black26,
borderRadius: