Ric*_*itz 3 firebase flutter google-cloud-firestore
我正在尝试详细说明一个函数,当按下图标时,firebase 数字会增加 1,当再次按下图标时,它会增加 -1 并且它会显示总喜欢返回为“Text()”。 toString()”。我正在尝试使用“FieldValue.increment”,但不幸的是,firebase 上的数字没有增加。我究竟做错了什么?在此先感谢您的帮助!
class LanchonetesContact extends StatefulWidget {
final DocumentSnapshot lanchonetes;
LanchonetesContact(this.lanchonetes);
@override
_LanchonetesContactState createState() =>
_LanchonetesContactState();
}
class _LanchonetesContactState extends State<LanchonetesContact> {
bool liked = false;
_pressed() {
setState(() {
liked = !liked;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
leading: IconButton(
icon: Icon(Icons.arrow_back),
onPressed: () {
Navigator.pop(context);
}),
title: Text("Lanchonetes"),
centerTitle: true,
backgroundColor: Colors.purple[900],
actions: <Widget>[
IconButton(
icon: Icon(
liked ? Icons.favorite : Icons.favorite_border,
color: Colors.white,) ,
onPressed: () {
_pressed();
if(liked){
Firestore.instance.collection('lanchonetes')
.document("")
.updateData({"likes": FieldValue.increment(1)});
}else {
Firestore.instance.collection('lanchonetes')
.document("")
.updateData({"likes": FieldValue.increment(-1)});
}
}
)],
),
Padding(
padding: EdgeInsets.only(top: 3.0),
child: Card(
elevation: 1.0,
child: GestureDetector(
child: Container(
height: 100.0,
width: 500.0,
color: Colors.white,
child: Padding(
padding: EdgeInsets.symmetric(
vertical: 30.0, horizontal: 15.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Icon(Icons.favorite, color: Colors.black,),
Text(widget.lanchonetes.data["likes"].toString()),
],
),
),
),
onTap: () {
},
)),
),
Run Code Online (Sandbox Code Playgroud)
Loo*_*oii 12
我看不到您要更新的文档。您需要文档参考。
更新:FieldValue.increment工作得很好,是最短的方法。
// Get document reference
final DocumentReference docRef = Firestore.instance.collection("lanchonetes").document(REPLACE_WITH_ID);
docRef.updateData({"likes": FieldValue.increment(1)});
Run Code Online (Sandbox Code Playgroud)
另一种方法是为它创建一个事务:
final TransactionHandler transactionHandler = (Transaction tran) {
tran.get(docRef).then((DocumentSnapshot snap) {
if (snap.exists) {
tran.update(docRef, <String, dynamic>{'likes': snap.data['likes'] + 1});
// update state by calling _pressed() or anything else you like
}
});
};
Firestore.instance.runTransaction(transactionHandler);
Run Code Online (Sandbox Code Playgroud)
这将是您的like()方法,因为dislike()您显然替换snap.data['likes'] + 1为snap.data['likes'] - 1
| 归档时间: |
|
| 查看次数: |
2569 次 |
| 最近记录: |