Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何获得下面给出的代码的相似计数?_Flutter - Fatal编程技术网

Flutter 如何获得下面给出的代码的相似计数?

Flutter 如何获得下面给出的代码的相似计数?,flutter,Flutter,这是一个酿造文件,它组成了一个啤酒并被送到一个酿酒师那里。列表中的每个brew都有一个类似的图标按钮。如何让任何用户喜欢或不喜欢brew。它不必显示喜欢brew的用户的姓名。它只需要显示喜欢的用户总数。此外,用户还必须能够在第二次点击时使用 class Brew { final String id; final String name; final String sugars; final int strength; final int likeCount; Brew(

这是一个酿造文件,它组成了一个啤酒并被送到一个酿酒师那里。列表中的每个brew都有一个类似的图标按钮。如何让任何用户喜欢或不喜欢brew。它不必显示喜欢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);
                        }
                      });
                    },