Firebase 与 Flutter 中的唯一用户名

2024-02-26

我正在尝试为我的应用程序上的每个用户创建一个唯一的用户名。注册时,我将该用户名值存储在单独的集合(“用户名”)中,以便在检查用户名是否唯一时更轻松地遍历它们,而不是遍历每个用户及其字段。

在我的 signup.dart 上,我有一个文本字段验证器:

TextFormField(
  style: TextStyle(fontSize: 16.0, color: Colors.white),
  decoration: buildSignInInputDecoration("Username"),
  validator: (value) {
    if (value.length < 2 || value.isEmpty) {
      return "Username is too short.";
      } else if (value.length > 12) {
        return "Username is too long.";
        } else {
        return null;
        },
        onSaved: (value) => _username = value.trim(),
        ),
  }

我做了一个函数来检查用户名是否已经在集合中:(_username 是存储用户输入的字符串)

Future<bool> usernameCheck() async {
    final snapShot = await usernamesRef.document(_username).get();
    if (snapShot == null || !snapShot.exists) {
      return true; //username is unique.
    } else {
      return false; //username exists.
    }
  }

我的问题是,如何调用 usernameCheck 并使用验证器验证它?提前致谢!

更新: 我实现了下面给出的答案,但不知何故,有效总是返回 false,即使用户名不存在。

Future<bool> usernameCheck(String _username) async {
    final result =
        await usersRef.where("username", isEqualTo: _username).getDocuments();
    return result.documents.isEmpty;
  }

//Gets called on sign up button pressed.
Future<void> validateAndSubmit() async {
    final valid = await usernameCheck(_username);
    if (!valid) {
      print("Username Exists.");
    } else if (validateAndSave()) {
      try {
// Signs up and save data.

您不能在验证器函数内执行异步操作。 你能做的就是打电话checkUsername()在调用验证器之前,假设您有一个按钮,当用户点击它时,您调用验证器,您将看到类似这样的内容。

onPressed: () async {
    final valid = await usernameCheck();
    if (!valid) {
        // username exists
    }
    else if (_formKey.currentState.validate()) {
         // save the username or something
    }
}

另外,您不必将用户名存储在单独的集合中,您可以仅将它们存储在主集合中,比方说users,然后编辑您的checkUsername()像这样:

 Future<bool> usernameCheck(String username) async {
    final result = await Firestore.instance
        .collection('users')
        .where('username', isEqualTo: username)
        .getDocuments();
    return result.documents.isEmpty;
  }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Firebase 与 Flutter 中的唯一用户名 的相关文章

  • 如何在列表视图中滚动添加更多项目?

    这里的代码当前加载了存储在 Firestore 集合中的所有啤酒 我如何最初只加载 10 个啤酒 然后当用户向下滚动并到达 10 个啤酒列表的末尾时 它应该加载最后一次酿造后还有 10 杯 并且酿造应根据时间戳进行排序 class Brew
  • 在将图像上传到 firebase 之前调整图像大小

    Firebase 存储看起来非常酷且易于使用 但我想知道是否有一种方法可以在将图像上传到 Firebase 存储之前调整图像大小 例如 在服务器中使用 ImageMagick 运行一个进程 然后使用 Firebase SDK 运行上传过程
  • Firebase 远程配置 - 初始获取返回本地默认值

    我正在使用 Firebase 远程配置来获取远程数据 并且我的应用程序需要首次启动时的最新数据 我正在我的应用程序中进行获取和更新onCreate mFirebaseRemoteConfig fetch cacheExpiration ad
  • Firebase,只得到新的孩子[重复]

    这个问题在这里已经有答案了 var firebase new Firebase firebaseRef on child added function snapshot 这将接收所有元素 有没有办法在创建新的 Firebase 引用时不接收
  • 如何在 Firebase 控制台中使用 Apple 新的 APN .p8 证书

    随着最近 Apple 开发者帐户的升级 我面临着一个困难 在尝试创建推送通知证书时 它为我提供了 p8 证书 而不是可以导出到 p12 的 APNs 证书 Firebase 控制台仅接受 p12 证书 那么我如何从这些新的 p8 证书中获取
  • 如何在父视图和子视图中使用组件两次(DI 是共享的,comp 是单例)

    我有一个按钮组件 具有应用程序特定行为 我打算在应用程序中广泛使用它 问题是 当我有一个使用此按钮的父 子视图时 单击父按钮会触发子视图按钮的 操作 如果不这样做 您自然不会明白发生了什么有多年的面向对象编程经验 让年轻的学校新手使用 da
  • Cloud Functions for Firebase - 通过 Nodejs/Cloud Function 将多个 PDF 合并为一个

    我遇到了一个问题 我试图通过云功能合并一堆 PDF 然后将合并的 PDF 下载到用户的计算机上 我的提供程序中有一个函数 它调用云函数并传递指向 pdf 的 URL 数组 如下所示 mergePDFs pdfs Create array o
  • GeoFire Swift 3 - 保存和更新坐标

    我正在尝试使用 GeoFire 将坐标存储到 Firebase 数据库中 我不确定如何更新新坐标 因为它们每秒都会更改 更新 随着childByAutoId 它正在为每辆自行车生成一个新的唯一 ID 如何引用这个唯一的自行车 ID 例如 用
  • 如何在 Android 模块中使用 FirebaseAuth

    我正在开发一个聊天库 我想在其中显示登录用户的对话 制作该库的原因是我想将其集成到多个项目中 我现在面临的问题是FirebaseAuth表示用户尚未登录 FirebaseAuth getInstance mFirebaseApp getCu
  • Firebase 身份验证问题 - 通过电子邮件地址检查用户是否存在

    我在 Firebase 上创建了一个帐户 它有效 但现在我想阻止人们使用已存在的电子邮件地址创建帐户 这是代码 DatabaseManager shared userExists with email completion weak sel
  • Android Studio Flutter 项目错误:内存不足

    我在 Android Studio 上运行任何 flutter 项目 都会抛出内存不足错误 控制台中显示的消息如下所示 e b build slave windows engine build src third party dart ru
  • 模块中的类无法加载

    我正在开发一个 2D Unity android 游戏 其中我最近添加了 Firebase Beta SDK 但添加后FirebaseAnalytics unitypackage我面临的错误是 无法加载模块中的类 当我删除文件夹时Fireb
  • 类型“Future”不是类型转换中“List”类型的子类型

    我试图从我的 Firestore 中获取确定集合中的所有文档 之后 我想将它们设置在文档列表中 列表的每个位置代表一个文档 但是 当我编写代码时 我收到此错误 类型 Future 不是类型转换中类型 List 的子类型 import pac
  • 使用workmanager时Firestore脱机持久性错误

    我正在使用一个WorkManger定期从我的中检索信息Firestore当应用程序处于后台和前台时的数据库 此信息用于根据状态更新 UI 因此不同的状态会添加或删除 UI 的不同部分 第一次运行时效果很好 但是 一旦应用程序处于后台并且Wo
  • Firestore - 从文档中获取特定字段

    我需要的 我想在 Firestore 中保存文章或注释及其各自的字段 Title 内容 文本或段落 创建日期 所有者 与其他人分享该文章 人和谁可以编辑它们 例如 https firebase google com docs firesto
  • 有没有办法在 Firebase 中等待查询完成?

    我正在使用 TableView 在 Viewcontroller 中的 iOS 应用程序中进行查询 我想确保在继续加载 TableView 之前我的查询已经返回 有没有办法保证查询已经完成 None
  • 无法访问 com.google.android.gms.internal.zzbfm 的 zzbfm 类文件未找到

    我正在将我的 Android 应用程序项目从GCM to FCM 为此 我使用 Android Studio 中的 Firebase 助手工具 并遵循 Google 开发人员指南中的说明 一切都很顺利 并将我的应用程序代码更改为FCM根据助
  • Flutter 使用 RichText 填空

    我几乎完成了我的应用程序的填空实现 但不幸的是我不断遇到布局问题 然而 当我不断解决问题时 我几乎已经完成了 这是到目前为止的代码 RichText text TextSpan text dummy style TextStyle colo
  • AppLifeCycleState.detached 未被调用

    import package flutter material dart void main gt runApp MyApp class MyApp extends StatelessWidget override Widget build
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef

随机推荐