Сохранить Url картинки в Firestore
Не получается сохранить Url картинки в Firestore, документ создается, картинка сохраняется в Storage все работает. Может проблема в последовательности?
class ProductService {
Firestore _firestore = Firestore.instance;
void createProduct(_nameproductController, _priceproductController,
_currentCategory, url) async {
_firestore.collection("products").document().setData({
'name': _nameproductController,
'price': _priceproductController,
'category': _currentCategory,
'image': url,
});
}
}
storage
void uploadImg() async {
var timekey = DateTime.now();
fb.StorageReference storageReference =
fb.storage().ref('imgProduct/${timekey.toString()}.jpg');
fb.UploadTaskSnapshot uploadTask = await storageReference
.put(_image1, fb.UploadMetadata(contentType: 'image/jpg'))
.future;
var imageUrl = await uploadTask.ref.getDownloadURL();
url = imageUrl.toString();
print('Image Url' + url);}
submit button
RaisedButton(
onPressed: () async {
if (_formKeyProduct.currentState.validate()) {
uploadImg();
ProductService().addProduct(
_nameproductController.text,
_priceproductController.text,
_currentCategory.categoryname.toString(),
url,
);
_formKeyProduct.currentState.reset();
_nameproductController.clear();
_priceproductController.clear();
}
setState(() {
_currentCategory = null;
});
},
Ответы (1 шт):
Автор решения: MiT
→ Ссылка
Ради интереса сделайте отладку кода, а именно метода uploadImg() по каждой строчке.
Проблема в методе void uploadImg() async {...}, потому что он ничего не возвращает и скорее всего не успевает присваивать переменную url = imageUrl.toString(); из-за асинхронности. Я вам специально в прошлый раз сделал чтобы метод возвращал файл, чтобы можно было его использовать примерно так:
url = await uploadImg();
// или так
_firestore.collection("products").document().setData({
'name': _nameproductController,
'price': _priceproductController,
'category': _currentCategory,
'image': await uploadImg(),
});