无法在 Flutter 中使用 Firebase Auth 进行注册

2024-02-15

我正在为我的应用程序使用 Firebase,我已正确设置所有内容,并且 Firebase Firestore 工作正常,没有任何问题,我能够在那里读取和写入数据,但是当我尝试在 Firebase 中创建用户时,我在调试控制台中收到此消息:

I/BiChannelGoogleApi( 2228): [FirebaseAuth: ] getGoogleApiForMethod() returned Gms: com.google.firebase.auth.api.internal.zzaq@fc008c3
W/DynamiteModule( 2228): Local module descriptor class for com.google.firebase.auth not found.
I/FirebaseAuth( 2228): [FirebaseAuth:] Preparing to create service connection to gms implementation
I/lutter_firebase( 2228): type=1400 audit(0.0:1201): avc: denied { sendto } for path="/dev/socket/logdw" scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:r:init:s0 tclass=unix_dgram_socket permissive=1
E/GmsClientSupervisor( 2228): Timeout waiting for ServiceConnection callback com.google.firebase.auth.api.gms.service.START
E/GmsClientSupervisor( 2228): java.lang.Exception
E/GmsClientSupervisor( 2228):   at com.google.android.gms.common.internal.zze.handleMessage(Unknown Source:53)
E/GmsClientSupervisor( 2228):   at android.os.Handler.dispatchMessage(Handler.java:101)
E/GmsClientSupervisor( 2228):   at com.google.android.gms.internal.common.zze.dispatchMessage(Unknown Source:8)
E/GmsClientSupervisor( 2228):   at android.os.Looper.loop(Looper.java:164)
E/GmsClientSupervisor( 2228):   at android.app.ActivityThread.main(ActivityThread.java:6541)
E/GmsClientSupervisor( 2228):   at java.lang.reflect.Method.invoke(Native Method)
E/GmsClientSupervisor( 2228):   at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
E/GmsClientSupervisor( 2228):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
W/DynamiteModule( 2228): Local module descriptor class for com.google.firebase.auth not found.
I/FirebaseAuth( 2228): [FirebaseAuth:] Preparing to create service connection to gms implementation

这里是pubspec.yaml file:

name: chat_app_flutter_firebase
description: A new Flutter project.

version: 1.0.0+1

environment:
  sdk: ">=2.3.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter
  cupertino_icons: ^0.1.2
  cloud_firestore: ^0.13.5
  firebase_auth: ^0.16.0


dev_dependencies:
  flutter_test:
    sdk: flutter

flutter:

  uses-material-design: true

auth_screen.dart

import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/services.dart';
import 'package:cloud_firestore/cloud_firestore.dart';

import '../widgets/auth/auth_form.dart';

class AuthScreen extends StatefulWidget {
  @override
  _AuthScreenState createState() => _AuthScreenState();
}

class _AuthScreenState extends State<AuthScreen> {
  final _auth = FirebaseAuth.instance;
  var _isLoading = false;

  void _submitAuthForm(
    String email,
    String password,
    String username,
    bool isLogin,
    BuildContext ctx,
  ) async {
    AuthResult authResult;

    try {
      setState(() {
        _isLoading = true;
      });
      if (isLogin) {
        authResult = await _auth.signInWithEmailAndPassword(
          email: email,
          password: password,
        );
      } else {
        authResult = await _auth.createUserWithEmailAndPassword(
          email: email,
          password: password,
        );
        await Firestore.instance
            .collection('users')
            .document(authResult.user.uid)
            .setData({
          'username': username,
          'email': email,
        });
      }
    } on PlatformException catch (err) {
      var message = 'An error occurred, pelase check your credentials!';

      if (err.message != null) {
        message = err.message;
      }

      Scaffold.of(ctx).showSnackBar(
        SnackBar(
          content: Text(message),
          backgroundColor: Theme.of(ctx).errorColor,
        ),
      );
      setState(() {
        _isLoading = false;
      });
    } catch (err) {
      print(err);
      setState(() {
        _isLoading = false;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Theme.of(context).primaryColor,
      body: AuthForm(
        _submitAuthForm,
        _isLoading,
      ),
    );
  }
}

auth_form.dart

import 'package:flutter/material.dart';

class AuthForm extends StatefulWidget {
  AuthForm(
    this.submitFn,
    this.isLoading,
  );

  final bool isLoading;
  final void Function(
    String email,
    String password,
    String userName,
    bool isLogin,
    BuildContext ctx,
  ) submitFn;

  @override
  _AuthFormState createState() => _AuthFormState();
}

class _AuthFormState extends State<AuthForm> {
  final _formKey = GlobalKey<FormState>();
  var _isLogin = true;
  var _userEmail = '';
  var _userName = '';
  var _userPassword = '';

  void _trySubmit() {
    final isValid = _formKey.currentState.validate();
    FocusScope.of(context).unfocus();

    if (isValid) {
      _formKey.currentState.save();
      widget.submitFn(_userEmail.trim(), _userPassword.trim(), _userName.trim(),
          _isLogin, context);
    }
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Card(
        margin: EdgeInsets.all(20),
        child: SingleChildScrollView(
          child: Padding(
            padding: EdgeInsets.all(16),
            child: Form(
              key: _formKey,
              child: Column(
                mainAxisSize: MainAxisSize.min,
                children: <Widget>[
                  TextFormField(
                    key: ValueKey('email'),
                    validator: (value) {
                      if (value.isEmpty || !value.contains('@')) {
                        return 'Please enter a valid email address.';
                      }
                      return null;
                    },
                    keyboardType: TextInputType.emailAddress,
                    decoration: InputDecoration(
                      labelText: 'Email address',
                    ),
                    onSaved: (value) {
                      _userEmail = value;
                    },
                  ),
                  if (!_isLogin)
                    TextFormField(
                      key: ValueKey('username'),
                      validator: (value) {
                        if (value.isEmpty || value.length < 4) {
                          return 'Please enter at least 4 characters';
                        }
                        return null;
                      },
                      decoration: InputDecoration(labelText: 'Username'),
                      onSaved: (value) {
                        _userName = value;
                      },
                    ),
                  TextFormField(
                    key: ValueKey('password'),
                    validator: (value) {
                      if (value.isEmpty || value.length < 7) {
                        return 'Password must be at least 7 characters long.';
                      }
                      return null;
                    },
                    decoration: InputDecoration(labelText: 'Password'),
                    obscureText: true,
                    onSaved: (value) {
                      _userPassword = value;
                    },
                  ),
                  SizedBox(height: 12),
                  if (widget.isLoading) CircularProgressIndicator(),
                  if (!widget.isLoading)
                    RaisedButton(
                      child: Text(_isLogin ? 'Login' : 'Signup'),
                      onPressed: _trySubmit,
                    ),
                  if (!widget.isLoading)
                    FlatButton(
                      textColor: Theme.of(context).primaryColor,
                      child: Text(_isLogin
                          ? 'Create new account'
                          : 'I already have an account'),
                      onPressed: () {
                        setState(() {
                          _isLogin = !_isLogin;
                        });
                      },
                    )
                ],
              ),
            ),
          ),
        ),
      ),
    );
  }
}

我之前曾使用较旧的 Flutter SDK 开发过一个类似的应用程序,一切都运行良好。

当前 Flutter SDK 信息:

Flutter 1.17.0 • 通道稳定 •https://github.com/flutter/flutter.git https://github.com/flutter/flutter.git
框架 • 修订版 e6b34c2b5c(9 天前) • 2020-05-02 11:39:18 -0700 , 发动机 • 修订版 540786dd51 工具•Dart 2.8.1

GitHub 仓库 : GitHub 存储库 https://github.com/TheKetan2/chat_app_flutter_firebase

任何帮助将不胜感激????


问题出在我的模拟器上,在物理设备上运行它并且它可以工作。

我使用的是 Genymotion 模拟器,但它没有安装 Play Store,所以我使用 GApps 安装它们,这也解决了模拟器的问题。

此外,使用具有 Play Store 服务的 Android Studio 模拟器也能达到目的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法在 Flutter 中使用 Firebase Auth 进行注册 的相关文章

随机推荐

  • Drupal 7 Forms API - AJAX Forms 错误:检测到非法选择。请联系网站管理员

    我设置了一个表单 用户可以从下拉列表中选择一个项目 一旦选择该项目 就会填充另一个下拉列表 然后 根据从第二个下拉列表中选择的值 可能会或可能不会显示字段集 如果显示字段集 则有一个字段和一个按钮 通过单击该按钮 您可以添加同一字段的另一个
  • 如何使用 String ReplaceAll 在出现某些字符时不进行替换

    我需要替换文本中的一些单词 但我需要在替换策略中添加条件 如下所示 我想更换word1 with word2 String word1 word1 String word2 word2 但我不想更换word1如果它前面是word3这是 St
  • ${authAdminUrl} 从哪里来以及如何操作它?

    我正在尝试设置一个 dockerized keycloak 实例 但成功登录后 其 安全管理控制台 不断将我重定向到内部 URL 而不是我在 dns 中设置的 URL 查看设置 其根 URL 设置为 authAdminUrl 我可以用实际的
  • List 或 ArrayList 有什么用

    我想知道有什么用List
  • 将 const char* 返回到 char*,然后更改数据

    我对以下代码感到困惑 string str SDFDFSD char pStr char str data for int i 0 i lt iSize i pStr i tolower pStr i here str data 回报con
  • ZeroMQ 多线程:按需创建套接字还是使用套接字对象池?

    我正在利用 ZeroMQ N to N 发布 订阅模型构建一个 POC 在我们的应用服务器中 当处理 http 请求时 如果线程从数据库中提取数据 它就会使用该数据更新本地 memcache 实例 为了同步应用程序服务器集群中的其他 mem
  • Haskell N 叉树遍历

    我对 Haskell 还很陌生 我正在尝试找出如何遍历 n 叉树 作为输出 我希望获得叶值列表 因为分支没有值 因此对于 testtree 这将是 4 5 到目前为止我的定义是 data Tree a Leaf a Branch Tree
  • 替换 Fragment 时出现 IllegalStateException

    它是使用兼容性包的小型 Android 2 2 测试应用程序 这是我在收到点击时尝试替换片段的 当然是错误的 方法 我试图用同一 Fragment 类的新 不同 实例替换它 正如我将解释的那样 它无法按预期工作 我需要帮助 public c
  • 两个类里面的代码几乎重复

    此时此刻 我有两节课 UserHibernateDao and TicketHibernateDao import java util List import org springframework orm hibernate3 suppo
  • 如何转义 SQLite FTS 查询的字符串

    我正在尝试使用不受信任的用户输入执行 SQLite FTS 查询 我不想让用户访问查询语法 也就是说他们将无法执行类似的匹配查询foo OR bar AND cats 如果他们尝试使用该字符串进行查询 我想将其解释为更像是foo OR ba
  • Android 网络提供商,需要互联网吗?

    我正在使用网络提供商进行位置更新 我的手机需要联网吗 这是我的代码 LocationMngr LocationManager getSystemService Context LOCATION SERVICE LocationMngr re
  • 使用 pojo 自动完成 primefaces

    我读过一些关于同一组件的质量检查 但我觉得我错过了一些东西 因为我落后了一步 当我使用 primefaces 自动完成组件时 我什至无法打开页面 它的片段是
  • JavaScript 中的 Splat 运算符相当于 Python 中的 *args 和 **kwargs?

    我经常使用 Python 而且我现在正在快速学习 JavaScript 或者我应该说重新学习 所以我想问一下 相当于什么 args and kwargs在 JavaScript 中 ES6 在 JavaScript 中添加了扩展运算符 fu
  • 如何从 CMake 命令行更改 C++ 标准?

    目前我有一个需要 C 17 的项目 因此在CMakeLists txt我很早就有这条线 set CMAKE CXX STANDARD 17 从命令行 cmake 偶尔我想测试该项目是否也可以使用 C 20 进行编译 以避免意外 如何选择从命
  • 我的应用或其依赖项是否违反了 Android 广告 ID 政策?

    我刚刚收到来自 Google Play 的这条消息 但我没有收集广告 ID 警告原因 违反Android广告ID使用 政策和开发者分发协议第 4 8 条 Google Play 要求开发者在以下情况下提供有效的隐私政策 应用程序请求或处理敏
  • 如何在运行时修改 web.config appSettings?

    我对如何在运行时修改 web config appSettings 值感到困惑 例如 我有这个 appSettings 部分
  • 为什么 Haskell 不能正确排序这些 IO 操作?

    我的一个朋友问我为什么要学习 Haskell 为了展示 Haskell 的强大功能 我编写了一个小程序来显示素数列表 main do putStr Enter the number of prime numbers to display n
  • 在 VB.NET 表单之间传递数据

    我有一个带有按钮的表单 单击时会弹出一个对话框表单 在此对话框中 用户需要选择一些数据 完成后单击 确定 按钮 一旦他们单击 确定 按钮 它需要将一个整数返回到之前的形式 我创建了一个对话框表单并尝试通过以下代码调用它 Dim intRes
  • JsTree 与 jquery.validate 冲突

    我有一个 Jstree 填充项目列表 当我单击一个节点时 会使用 ajax 加载部分节点 一切正常 直到我包含 jquery validate 脚本来验证我的表单
  • 无法在 Flutter 中使用 Firebase Auth 进行注册

    我正在为我的应用程序使用 Firebase 我已正确设置所有内容 并且 Firebase Firestore 工作正常 没有任何问题 我能够在那里读取和写入数据 但是当我尝试在 Firebase 中创建用户时 我在调试控制台中收到此消息 I