Code:
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
var myDocId, numberOfUpVoters;
void addUpVotingField() async {
List<String> emptyList = new List();
await FirebaseFirestore.instance.collection('YourCollection').add({
"OtherField": "OtherValue",
//... more fields
"upVoters":
FieldValue.arrayUnion(emptyList), //to store uid of users who up-voted
}).then((DocumentReference documentReference) {
myDocId = documentReference.id;
});
}
void firestoreTransaction() {
User user = FirebaseAuth.instance.currentUser;
DocumentReference documentReference =
FirebaseFirestore.instance.collection('YourCollection').doc(myDocId);
FirebaseFirestore.instance.runTransaction((transaction) async {
DocumentSnapshot documentSnapshot =
await transaction.get(documentReference);
if (documentSnapshot.data()['upVoters'].contains(user.uid)) {
transaction.update(documentReference, <String, dynamic>{
'upVoters': FieldValue.arrayRemove([user.uid])
});
} else {
transaction.update(documentReference, <String, dynamic>{
'upVoters': FieldValue.arrayUnion([user.uid])
});
}
}).then((value) async {
await FirebaseFirestore.instance
.collection("YourCollection")
.doc(myDocId)
.get()
.then((doc) {
setState(() {// should run inside stateful widget
numberOfUpVoters = doc['upVoters'].length;
});
});
});
}
Comments
Post a Comment