как разрешить пользователю загружать любое количество изображений. поэтому может быть необязательно загружать от 1 до 5 изображений в зависимости от их потребностей. здесь все работает хорошо, если пользователь загружает все 5 изображений, но если вы загружаете менее 5 изображений, он зависает и выдает эту ошибку,
i dont even know what the existsSync is and where it came from, nothing on internet about it too.
and this is how the submitting page looks like so you dont ask why there are 5 functions to upload images.
Скриншот
import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_storage/firebase_storage.dart';
import 'package:flutter/rendering.dart';
import 'dart:io';
import 'package:path/path.dart' as path;
import 'package:image_picker/image_picker.dart';
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;
//String nall;
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 {
//String fileName = path.basename(_image1.path);
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 {
//String fileName = path.basename(_image2.path);
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 {
//String fileName = path.basename(_image3.path);
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 {
// String fileName = path.basename(_image4.path);
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 {
//String fileName = path.basename(_image5.path);
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 {
//image.getImage(source: ImageSource.gallery);
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,
)
// : Icon(Icons.add_a_photo, size: 30),
),
),
SizedBox(width: 5),
InkWell(
onTap: () async {
// image.getImage(source: ImageSource.gallery);
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 {
// image.getImage(source: ImageSource.gallery);
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 {
// image.getImage(source: ImageSource.gallery);
await getImage4();
},
child: Container(
height: 60,
width: 60,
decoration: BoxDecoration(
color: Colors.black26,
borderRadius:
BorderRadius.circular(10)),
child: (_image4 == null)
? Icon(Icons.add_a_photo, size: 30)
: Image.file(
_image4,
fit: BoxFit.fill,
)),
),
SizedBox(width: 5),
InkWell(
onTap: () async {
// image.getImage(source: ImageSource.gallery);
await getImage5();
},
child: Container(
height: 60,
width: 60,
decoration: BoxDecoration(
color: Colors.black26,
borderRadius:
BorderRadius.circular(10)),
child: (_image5 == null)
? Icon(Icons.add_a_photo, size: 30)
: Image.file(
_image5,
fit: BoxFit.fill,
)),
),
SizedBox(width: 5),
],
),
SizedBox(
height: 10,
),
RaisedButton.icon(
color: Colors.teal,
onPressed: () async {
Navigator.pop(
context,
);
switch (_btnselected) {
case 'Car/موتر':
database.collection("car").add({
"item Name": nameText.text,
"item Desc": detailText.text,
"item Price": priceText.text,
"seller Number": cellNoText.text,
"seller add": addText.text,
"image 1 Url":
(await uploadPic() != null)
? await uploadPic()
: null,
"image 2 Url":
(await uploadPic2() != null)
? await uploadPic2()
: null,
"image 3 Url":
(await uploadPic3() != null)
? await uploadPic3()
: null,
"image 4 Url":
(await uploadPic4() != null)
? await uploadPic4()
: null,
"image 5 Url":
(await uploadPic5() != null)
? await uploadPic5()
: null,
});
break;
case 'motorcycle/ موترسایکل':
database.collection("motorcycle").add({
"item Name": nameText.text,
"item Desc": detailText.text,
"item Price": priceText.text,
"seller Number": cellNoText.text,
"seller add": addText.text,
"image 1 Url": _image1.path,
"image 2 Url": _image2.path,
"image 3 Url": _image3.path,
"image 4 Url": _image4.path,
"image 5 Url": _image5.path,
});
break;
case 'electronics/الکترونیک':
database.collection("electronics").add({
"item Name": nameText.text,
"item Desc": detailText.text,
"item Price": priceText.text,
"seller Number": cellNoText.text,
"seller add": addText.text,
"image 1 Url": _image1.path,
"image 2 Url": _image2.path,
"image 3 Url": _image3.path,
"image 4 Url": _image4.path,
"image 5 Url": _image5.path,
});
break;
case 'house/ خانه':
database.collection("house").add({
"item Name": nameText.text,
"item Desc": detailText.text,
"item Price": priceText.text,
"seller Number": cellNoText.text,
"seller add": addText.text,
"image 1 Url": _image1.path,
"image 2 Url": _image2.path,
"image 3 Url": _image3.path,
"image 4 Url": _image4.path,
"image 5 Url": _image5.path,
});
break;
case 'household/لوازم خانه':
database.collection("household").add({
"item Name": nameText.text,
"item Desc": detailText.text,
"item Price": priceText.text,
"seller Number": cellNoText.text,
"seller add": addText.text,
"image 1 Url": _image1.path,
"image 2 Url": _image2.path,
"image 3 Url": _image3.path,
"image 4 Url": _image4.path,
"image 5 Url": _image5.path,
});
break;
case 'mobile/موبایل':
database.collection("mobile").add({
"item Name": nameText.text,
"item Desc": detailText.text,
"item Price": priceText.text,
"seller Number": cellNoText.text,
"seller add": addText.text,
"image 1 Url": _image1.path,
"image 2 Url": _image2.path,
"image 3 Url": _image3.path,
"image 4 Url": _image4.path,
"image 5 Url": _image5.path,
});
break;
}
uploadPic().then((value) {
DocumentReference docRef = Firestore
.instance
.collection("carPics")
.document();
docRef.setData({"image 1 Url": value},
merge: true);
});
//2
uploadPic2().then((value) {
DocumentReference docRef = Firestore
.instance
.collection("carPics")
.document();
docRef.setData({"image 2 Url": value},
merge: true);
});
///3
uploadPic3().then((value) {
DocumentReference docRef = Firestore
.instance
.collection("carPics")
.document();
docRef.setData({"image 3 Url": value},
merge: true);
});
///4
uploadPic4().then((value) {
DocumentReference docRef = Firestore
.instance
.collection("carPics")
.document();
docRef.setData({"image 4 Url": value},
merge: true);
});
///5
uploadPic5().then((value) {
DocumentReference docRef = Firestore
.instance
.collection("carPics")
.document();
docRef.setData({"image 5 Url": value},
merge: true);
});
},
icon: Icon(
Icons.send,
size: 25,
color: Colors.white,
),
label: Text(
'Submit - برو',
style: TextStyle(
fontSize: 20,
color: Colors.white,
fontWeight: FontWeight.bold),
))
],
),
),
],
),
),
),
),
),
));
}
}