颤振检查Firebase中是否存在文档,并根据图标返回

时间:2019-04-27 09:28:19

标签: firebase flutter google-cloud-firestore conditional

我想检查Firebase集合中是否存在特定文档。据此,我的应用程序应显示彩色图标或灰色图标。我试图用一种方法解决这个问题,该方法返回布尔值。在我的Build Widget中,我调用该方法并分配正确的图标。

这是我检查文件是否存在的方法:

checkIfLikedOrNot(reference) async{
   DocumentSnapshot ds = await reference.collection("likes").document(currentUser.uid).get();
   print(ds.exists);
   return ds.exists;
}

打印输出在控制台中显示正确的值,但是我的构建小部件似乎忽略了以下事实:布尔值是true,并且始终返回图标,如果集合中没有文档,则应显示该图标。

这是我的构建小部件的一部分:

 GestureDetector(
                  child: checkIfLikedOrNot(list[index].reference) == true

                  ? 
                     Icon(
                      Icons.favorite,
                      color: Colors.red,
                     )
                  : 
                     Icon(
                     FontAwesomeIcons.heart,
                     color: null,
                     ),
    )

此语句在哪里出问题?有什么想法吗?

最诚挚的问候。

1 个答案:

答案 0 :(得分:1)

根据您的用例,您可以使用FutureBuilder,也可以使其简单并创建一个变量来处理逻辑:

在小部件内部:

bool isLiked = false;

从initState()中调用函数:

@override
void initState() {
    super.initState();
    checkIfLikedOrNot();
}

更改逻辑以修改变量,并告诉Flutter重新渲染:

    checkIfLikedOrNot() async{
       DocumentSnapshot ds = await reference.collection("likes").document(currentUser.uid).get();
        this.setState(() {
          isLiked = ds.exists;
        });

    }

绘制相应的图标:

Icon(isLiked?Icons.favorite:FontAwesomeIcons.heart,
     color: isLiked?Colors.red:null)

编辑:由于您显然正在处理值列表,因此将它们封装在Object中或使用FutureBuilder是很有意义的。