【问题标题】:Can't create a Flutter/Firebase non-authenticated user favorite list in ListTile无法在 ListTile 中创建 Flutter/Firebase 未经身份验证的用户收藏列表
【发布时间】:2020-05-28 15:14:29
【问题描述】:

我正在尝试创建一个未经身份验证的用户图标“选择收藏夹”选项,如果单击一个图标(在 Firestore 数据(书名)的 ListView 中的标题列表上),它会保存要路由到的数据一个新的收藏页面。我在 Firestore 文档中找不到有关如何执行此操作的信息,但我找到了一个 youtube 教程,该教程为流行的颤振 WordPair 应用程序执行此操作。这是用于存储他们的 WordPair 数据的字符串:

final _randomWordPairs = <WordPair>[];

另一个用于检查 WordPair 列表是否已保存的变量是:

final _savedWordPairs = Set<WordPair>[];

如果我的 Firebase 数据字符串是

Firestore.instance.collection("titles").snapshots()

什么是上述 WordPair 变量的等价物,所以我可以用我的标题列表创建这个收藏夹列表

snapshot.data.documents[index]['title']

没有任何作用。仍在试图弄清楚:变量:

final savedDb = Firestore.instance.collection("books").document('title');

final alreadySaved = Firestore.instance.collection("books").document('title');

调用它的ListTile代码:

trailing: Icon( alreadySaved ?  Icons.favorite :
                        Icons.favorite_border,
                        color: alreadySaved ? Colors.red : null),

                          onTap: () {
                          setState(() {
                            if(alreadySaved) {
                              savedDb.remove('title');
                            }else{
                              savedDb.add('title');
                            }
                          });
                        }

我试过了,但现在它只是让那个页面崩溃;

final alreadySaved = Firestore.instance.collection("books").where((item) => item.contains("title"));

List<String> savedDb = ['Firestore.instance.collection("books").document(title)'];

                              trailing: Icon( alreadySaved == null ?  Icons.favorite :
                          Icons.favorite_border,
                              color: alreadySaved != null ? Colors.red : null),

                          onTap: () {
                            setState(() {
                              savedDb.add('title');
                            });
                          },

最后一次尝试:

bool alreadySaved = false;

savedDb() async{
    DocumentSnapshot ds = await         
Firestore.instance.collection("books").document('title').get();
    this.setState(() {
      alreadySaved = ds.exists;
    });
  }

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

onTap 说 .remove 和 .add 没有为 Function 类型定义,我的图标甚至不会改变颜色。这是不可能的

                            onTap: () {
                          setState(() {
                            if(alreadySaved) {
                              savedDb.remove('Firestore.instance.collection("books")');
                            }else{
                              savedDb.add(Firestore.instance.collection("books"));
                            }
                          });
                        },

返回 .remove 和 .add 没有为 Function 类型定义

【问题讨论】:

  • 您能否添加更多有关它的内容,因为很难理解您的问题,我不知道您想要实现什么。可以分享一下教程的链接吗? “等价”是什么意思?
  • 是的,在 youtube.com/… 的颤振教程中,在 44:40 时,他展示了他如何使用心形图标编写一个“收藏夹”列表,用户可以在其中单击心形图标,然后它会将 listtile 保存到新的页面路由。我一直在尝试向我的项目添加一个类似的“收藏夹列表”,但无法弄清楚如何使用我的 Firestore 数据来执行此操作。

标签: firebase flutter dart google-cloud-firestore staggered-gridview


【解决方案1】:

您可以在 in this doc 找到有关 Firestore 中数据类型的所有信息。

对于实际上是一个数组的_randomWordPairs - 您可以使用相同的类型。数组是 Firestore 中支持的字段类型之一。所以应该没有问题。

_savedWordPairs 更复杂,因为这是一个集合,这意味着它不能包含重复值。因此,在更新包含此列表的字段期间,您必须添加逻辑,该逻辑将在添加到列表之前检查特定值是否已经存在。

当然,没有自定义类型 WordPair 可以存储在 Firestore 中,但是您可以存储它的字符串对象,并且有很多可能性可以做到这一点:作为列表、映射或只是作为字符串,甚至作为一些嵌套目的。 Firestore 通常是基于文档的 NoSQL 数据库,因此您可以在那里做任何事情。如果您需要有关 Firestore 数据模型的更多信息,请查看 here。或者只是看一下“基于文档数据库的 NoSQL”的一般参考,因为 Firestore 实现了这些数据库类型的所有标准概念。

希望对你有帮助!

【讨论】:

  • 我无法理解这一点。这些文档中的任何内容对我来说都不清楚如何添加逻辑以查看值是否已经存在。 '.contains','.exists',没有任何作用。我更新了上面的代码以包含我的 firestore 变量和方法,错误是“条件必须具有特定类型的 bool”和“方法 .add 未定义”。我也尝试过.set 和.get。我看了dart.dev/tools/diagnostic-messages#non_bool_condition,但我就是想不通。这远远超出了我的技能水平,但是那个视频对于单词对来说是如此简单。
  • 有谁知道我在哪里可以找到 firestore 中的颤振专家来帮助我解决这个问题,以便我理解它?
  • 你用哪个包来连接firebase?
  • 你的意思是数据库内容吗?还有什么是包?
  • 我的意思是你的项目的导入语句中有什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-10
  • 1970-01-01
  • 2021-04-11
  • 2020-09-15
  • 2021-03-07
  • 2013-03-29
  • 2021-07-30
相关资源
最近更新 更多