Was Ash
Was Ash

Reputation: 43

How to store image in fire base and store url in firestore

i want to send coupon card to fire store that contain ( name - address - coupon ) and i want to make user set an specific image for every single card

that's my FireStoreService file

class FireStoreService {

  FireStoreService._internal();
  static final FireStoreService firestoreService = FireStoreService._internal();
  Firestore db = Firestore.instance ;

  factory FireStoreService() {
    return firestoreService;
  }

  Stream<List<Coupon>> getCoupon() {
    return db.collection('coupon').snapshots().map(
          (snapshot) => snapshot.documents.map(
            (doc) => Coupon.fromMap(doc.data, doc.documentID),
      ).toList(),
    );
  }

  Future<void> addCoupon(Coupon coupon) {
    return db.collection('coupon').add(coupon.toMap());
  }

  Future<void> deleteCoupon(String id) {
    return db.collection('coupon').document(id).delete();
  }

  Future<void> updateCoupon(Coupon coupon) {
    return db.collection('coupon').document(coupon.id).updateData(coupon.toMap());
  }



}

and this is Coupon Model file

class Coupon {
  final String id;
  final String storeName;
  final String storeLink;
  final String couponCode;

  Coupon(
      {this.id, this.storeName, this.storeLink, this.couponCode});

  Coupon.fromMap(Map<String, dynamic> data, String id)
      : storeName = data["storeName"],
        storeLink = data['storeLink'],
        couponCode = data["couponCode"],
        id = id;

  Map<String, dynamic> toMap() {
    return {
      "storeName": storeName,
      'storeLink': storeLink,
      'couponCode': couponCode,
    };
  }
}

and this is Image Picker code and it's work fine and picked up the image

Future getImage() async {
    try {
      File image = await ImagePicker.pickImage(source: ImageSource.gallery);

      setState(() {
        image = image;
      });
    } catch (e) {
      print(e);
    }
  }

any help ?

Upvotes: 0

Views: 80

Answers (1)

Karel Debedts
Karel Debedts

Reputation: 5768

This is a function that asks for an imageFile. If you run your code (getImage function): pass the image variable to the uploadImage function.

String myUrl = await uploadImage(file);

Then you can use setData or updateData to put the url in the database.

  Firestore.instance.collection('books').document()
      .setData({ 'title': 'title', 'url': '$myUrl' })


final StorageReference storageRef = FirebaseStorage.instance.ref();

  Future<String> uploadImage(imageFile) async {
    StorageUploadTask uploadTask =
        storageRef.child("myPath&Name.jpg").putFile(imageFile);
    StorageTaskSnapshot storageSnap = await uploadTask.onComplete;
    String downloadURL = await storageSnap.ref.getDownloadURL();
    return downloadURL;
  }

Upvotes: 1

Related Questions