Flutter 如何获得下面给出的代码的相似计数?
这是一个酿造文件,它组成了一个啤酒并被送到一个酿酒师那里。列表中的每个brew都有一个类似的图标按钮。如何让任何用户喜欢或不喜欢brew。它不必显示喜欢brew的用户的姓名。它只需要显示喜欢的用户总数。此外,用户还必须能够在第二次点击时使用Flutter 如何获得下面给出的代码的相似计数?,flutter,Flutter,这是一个酿造文件,它组成了一个啤酒并被送到一个酿酒师那里。列表中的每个brew都有一个类似的图标按钮。如何让任何用户喜欢或不喜欢brew。它不必显示喜欢brew的用户的姓名。它只需要显示喜欢的用户总数。此外,用户还必须能够在第二次点击时使用 class Brew { final String id; final String name; final String sugars; final int strength; final int likeCount; Brew(
class Brew {
final String id;
final String name;
final String sugars;
final int strength;
final int likeCount;
Brew({this.id, this.name, this.sugars, this.strength,
this.likeCount});
}
class BrewData {
final String id;
final String name;
final String sugars;
final int strength;
final int likeCount;
BrewData({this.id, this.name, this.sugars, this.strength,
this.likeCount});
factory BrewData.fromDoc(DocumentSnapshot doc) {
return BrewData(
id: doc.documentID,
name: doc['name'],
sugars: doc['sugars'],
strength: doc['strength'],
likeCount: doc['likeCount'],
);
}
}
class BrewTile extends StatefulWidget {
final Brew brew;
BrewTile({ this.brew});
@override
_BrewTileState createState() => _BrewTileState();
}
class _BrewTileState extends State<BrewTile> {
int _likeCount = 0;
bool _isLiked = false;
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
Padding(
padding: const EdgeInsets.only(top: 8.0),
child: Card(
margin: EdgeInsets.fromLTRB(20.0, 6.0, 20.0, 0.0),
child: ListTile(
leading: CircleAvatar(
radius: 25.0,
backgroundColor: Colors.brown[brew.strength],
backgroundImage:
AssetImage('assets/coffee_icon.png'),
),
title: Text(brew.name),
subtitle: Text('Takes ${brew.sugars} sugar(s)'),
),
),
),
Padding(
padding: EdgeInsets.symmetric(horizontal: 8.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Row(
children: <Widget>[
IconButton(
icon: _isLiked
? Icon(
Icons.favorite,
color: Colors.blue,
)
: Icon(Icons.favorite_border),
iconSize: 30.0,
onPressed: () {
if (_isLiked) {
_likeCount++;
_isLiked = false;
print(_likeCount);
DatabaseService()
.updateLikes(id: widget.brew.id, value:
1);
} else {
print(true);
_likeCount--;
_isLiked = true;
DatabaseService()
.updateLikes(id: widget.brew.id, value:
-1);
print(_likeCount);
}
});
},
),
Padding(
padding: EdgeInsets.symmetric(horizontal:
12.0),
child: Text(
'${_likeCount.toString()} likes',
style: TextStyle(
fontSize: 16.0,
fontWeight: FontWeight.bold,
),
),
),
],
)
],
),
)
],
);
}
}
List<Brew> _brewListFromSnapshot(QuerySnapshot snapshot) {
return snapshot.documents.map((doc) {
//print(doc.data);
return Brew(
id: doc.documentID ?? '',
name: doc.data['name'] ?? '',
strength: doc.data['strength'] ?? 0,
sugars: doc.data['sugars'] ?? '0',
likeCount: doc.data['likeCount'] ?? 0,);
}).toList();
}
Future<void> updateLikesCount({String id int value}) async {
return await brewCollection
.document(id)
.updateData({'likeCount': FieldValue.increment(value)});
}
Future<void> updateBrewData(String sugars, String name, int strength, int likeCount) async {
return await brewCollection.document(uid).setData({
'sugars': sugars,
'name': name,
'strength': strength,
'likeCount': likeCount,
});
}
Stream<BrewData> get brewData {
return brewCollection.document(uid).snapshots().map(_brewDataFromSnapshot);
}
class-Brew{
最终字符串id;
最后的字符串名;
最后一串糖;
最终强度;
最终的整数类计数;
Brew({this.id,this.name,this.sugars,this.strength,
这个。likeCount});
}
短数据类{
最终字符串id;
最后的字符串名;
最后一串糖;
最终强度;
最终的整数类计数;
BrewData({this.id,this.name,this.sugars,this.strength,
这个。likeCount});
工厂BrewData.fromDoc(文档快照文档){
返回数据(
id:doc.documentID,
名称:doc['name'],
糖:doc['sugars'],
强度:doc[“强度”],
likeCount:doc['likeCount'],
);
}
}
类BrewTile扩展StatefulWidget{
最终酿造;
BrewTile({this.brew});
@凌驾
_BrewTileState createState();
}
类_BrewTileState扩展了状态{
int_likeCount=0;
bool_isLiked=false;
@凌驾
小部件构建(构建上下文){
返回列(
儿童:[
填充物(
填充:仅限常量边集(顶部:8.0),
孩子:卡片(
边距:LTRB(20.0,6.0,20.0,0.0)中的边距集,
孩子:ListTile(
领先:CircleAvatar(
半径:25.0,
背景颜色:颜色.棕色[酿造.强度],
背景图片:
AssetImage('assets/coffee_icon.png'),
),
标题:文本(brew.name),
字幕:文本('Takes${brew.sugars}sugar(s)'),
),
),
),
填充物(
填充:边缘组。对称(水平:8.0),
子:列(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
划船(
儿童:[
图标按钮(
图标:_islike
?图标(
我的最爱,
颜色:颜色,蓝色,
)
:图标(图标。收藏夹边框),
iconSize:30.0,
已按下:(){
如果(_islike){
_likeCount++;
_isLiked=假;
打印(_likeCount);
数据库服务()
.updateLikes(id:widget.brew.id,值:
1);
}否则{
打印(真实);
_像计数--;
_isLiked=true;
数据库服务()
.updateLikes(id:widget.brew.id,值:
-1);
打印(_likeCount);
}
});
},
),
填充物(
填充:边设置。对称(水平:
12.0),
子:文本(
“${u likeCount.toString()}喜欢”,
样式:TextStyle(
字体大小:16.0,
fontWeight:fontWeight.bold,
),
),
),
],
)
],
),
)
],
);
}
}
列表_brewlistfromsapshot(QuerySnapshot快照){
返回snapshot.documents.map((doc){
//打印(单据数据);
返酿(
id:doc.documentID???“”,
名称:文件数据['name']??“,
强度:文件数据['strength']??0,
糖类:文档数据['sugars']??“0”,
likeCount:doc.data['likeCount']?0,);
}).toList();
}
未来的UpdateLikeCount({String id int value})异步{
返回等待重新收集
.文件(id)
.updateData({'likeCount':FieldValue.increment(value)});
}
Future updateBrewData(字符串sugars、字符串名称、int-strength、int-likeCount)异步{
return wait brewCollection.document(uid).setData({
“糖”:糖,
“名称”:名称,
"实力":实力,,
“likeCount”:likeCount,
});
}
流获取brewData{
返回brewCollection.document(uid).snapshots().map(_brewdatafromsapshot);
}
它在控制台中给出此错误
flutter: true
flutter: -1
[VERBOSE-2:ui_dart_state.cc(157)] Unhandled Exception: type 'MethodChannelFieldValue' is not a subtype of type 'FieldValuePlatform'
#0 FieldValue.increment
package:cloud_firestore/src/field_value.dart:51
#1 DatabaseService.updateLikesCount
package:myblogprofile/services/database.dart:75
#2 _BrewTileState.build.<anonymous closure>.<anonymous closure>
package:myblogprofile/…/home/brew_tile.dart:77
#3 State.setState
package:flutter/…/widgets/framework.dart:1148
#4 _BrewTileState.build.<anonymous closure>
package:myblogprofile/…/home/brew_tile.dart:65
#5 _InkResponseState._handleTap
package:flutter/…/material/ink_well.dart:706
#6 _InkResponseState.build.<anonymous closure>
package:flutter/…/material/ink_well.dart:789
#7 GestureRecognizer.invokeCallback
package:flutter/…/gestures/recognizer.dart:182
#8 TapGestureRecognizer.handleTapUp
package:flutter/…/gestures/tap.dart:486
#9 BaseTapGestur<…>
flatter:true
颤振:-1
[VERBOSE-2:ui\u dart\u state.cc(157)]未处理的异常:类型“MethodChannelFieldValue”不是类型“FieldValuePlatform”的子类型
#0字段值。增量
包:cloud\u firestore/src/field\u value.dart:51
#1 DatabaseService.updateLikesCount
包:myblogprofile/services/database.dart:75
#2_BrewTileState.构建。。
软件包:myblogprofile/../home/brew\u tile.dart:77
#3.State.setState
包:flatter/../widgets/framework.dart:1148
#4_BrewTileState.build。
软件包:myblogprofile/../home/brew\u tile.dart:65
#5 Inkressestate.handleTap
包装:颤振/../材料/墨水井。省道:706
#6_inkrestate.build。
包装:颤振/../material/ink\u井。省道:789
#7 GestureRecognitor.invokeCallback
包装:颤振/../g
setState(() {
if (_isLiked) {
_likeCount = _likeCount--;
_isLiked = false;
} else {
_likeCount = _likeCount++;
_isLiked = true;
}
});
class Brew {
final String id;
final String name;
final String sugars;
final int strength;
Brew({this.id, this.name, this.sugars, this.strength});
}
//database.dart
List<Brew> _brewListFromSnapshot(QuerySnapshot snapshot) {
return snapshot.documents.map((doc) {
//print(doc.data);
return Brew(
id: doc.documentID ?? '',
name: doc.data['name'] ?? '',
strength: doc.data['strength'] ?? 0,
sugars: doc.data['sugars'] ?? '0');
}).toList();
}
//This is different from last time very important changes
Future<void> updateLikes({String id, int value}) async {
return await brewCollection
.document(id)
.updateData({'likes': FieldValue.increment(value)});
}
//brew_tile.dart
onPressed: () async {
setState(() {
if (_isLiked) {
print(true);
_likeCount--;
_isLiked = false;
DatabaseService()
.updateLikesCount(id: widget.brew.id, value: -1);
print(_likeCount);
} else {
_likeCount++;
_isLiked = true;
print(_likeCount);
DatabaseService()
.updateLikesCount(id: widget.brew.id, value: 1);
}
});
},