You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter应用无法向Firebase注册用户,无报错信息求助

Flutter Firebase Auth模拟器注册无响应问题排查与解决

问题现象

  • 调用createUser()函数后能打印日志,确认函数已执行,传入的邮箱、密码参数正常
  • 执行FirebaseAuth.instance.createUserWithEmailAndPassword后无任何反馈:既不抛出异常,Firebase Auth模拟器控制台也无新用户注册记录
  • 控制台持续输出警告:W/System (26859): Ignoring header X-Firebase-Locale because its value was null.(忽略X-Firebase-Locale头,因为其值为null)

环境信息

  • Firebase Auth模拟器运行地址:127.0.0.1:9099
  • 核心代码片段:

main.dart初始化代码

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform,);

  try {
    await FirebaseAuth.instance.useAuthEmulator('localhost', 9099);
  } catch (e) {
    // ignore: avoid_print
    print(e);
  }

  runApp(
    MaterialApp(
      title: "Foo",
      home: buildContent(),
    ),
  );
}

注册函数代码

void createUser() async {
    print("createUser()");
    try {
      final credential = await FirebaseAuth.instance.createUserWithEmailAndPassword(
        email: nameController.text,
        password: passwordController.text,
      );
      //final credential = await FirebaseAuth.instance.createUserWithEmailAndPassword(email: nameController.text, password: passwordController.text);
    } on FirebaseAuthException catch (e) {
      if (e.code == 'weak-password') {
        print('The password provided is too weak.');
      } else if (e.code == 'email-already-in-use') {
        print('The account already exists for that email.');
      }
    } catch (e) {
      print(e);
    }
  }

排查与解决步骤

1. 修复安卓模拟器的主机地址映射问题

安卓模拟器中localhost指向模拟器自身的回环地址,而非运行Firebase模拟器的电脑主机。需要将useAuthEmulator的主机地址改为10.0.2.2(安卓模拟器默认的主机映射地址):

await FirebaseAuth.instance.useAuthEmulator('10.0.2.2', 9099);

2. 验证Firebase Auth模拟器的可用性

直接在电脑浏览器访问http://127.0.0.1:9099,确认能打开Firebase Auth模拟器的管理界面,同时检查本地防火墙是否拦截了9099端口的请求。

3. 增强日志输出,定位执行卡点

在注册函数中添加更详细的日志,确认代码执行到哪一步:

void createUser() async {
    print("createUser() 开始执行,邮箱: ${nameController.text},密码长度: ${passwordController.text.length}");
    try {
      print("准备调用createUserWithEmailAndPassword");
      final credential = await FirebaseAuth.instance.createUserWithEmailAndPassword(
        email: nameController.text,
        password: passwordController.text,
      );
      print("注册成功,用户UID: ${credential.user?.uid}");
    } on FirebaseAuthException catch (e) {
      print('Firebase Auth错误代码: ${e.code},错误信息: ${e.message}');
      if (e.code == 'weak-password') {
        print('密码强度不足');
      } else if (e.code == 'email-already-in-use') {
        print('该邮箱已注册过账号');
      }
    } catch (e) {
      print('未知错误类型: ${e.runtimeType},详细信息: $e');
    }
  }

4. 消除X-Firebase-Locale警告

通过设置Firebase Auth的locale参数,避免空值警告:

// 在Firebase初始化后添加
FirebaseAuth.instance.setSettings(locale: 'zh-CN');

5. 确认Firebase初始化状态

在Firebase.initializeApp后添加日志,确保Firebase已完全初始化:

await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform,);
print("Firebase 初始化完成");

内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 11:45:32