Flutter Firebase认证Ignoring header X-Firebase-Locale because it was null

回答 3 浏览 2435 2022-09-08

我正试图通过电子邮件和密码注册和登录的方式将Firebase认证添加到我的应用程序中。当我测试的时候,它没有导航到下一个屏幕,我得到了以下信息。

"Ignoring header X-Firebase-Locale because it was null"

然而,当我进入Firebase时,它显示我输入的信息已被存储为一个新用户。谁能提供一些关于发生了什么的见解?

这是我的main.dart。

int? isViewed;
Future <void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  
  final prefs = await SharedPreferences.getInstance();
  final showLogin = prefs.getBool('showLogin') ?? false;
  Paint.enableDithering = true;
  
// This is for our onboarding screen
isViewed = prefs.getInt('onboard');

  runApp(MyApp(showLogin: showLogin));
}

class MyApp extends StatelessWidget {
  final bool showLogin;
  
  const MyApp({Key? key,
  required this.showLogin}) : super(key: key);


  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Strength',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        appBarTheme: const AppBarTheme(color: Color(0xffe0eff5),
        elevation: 0,
        brightness: Brightness.light,
        iconTheme: IconThemeData(color: Colors.black),
        textTheme: TextTheme(headline6: TextStyle(color: Color(0xff888888), fontSize: 18),
        )
      ),),
      home: const SplashScreen(),
    );
  }
}

这里是我的signup.dart的大块内容。

class SignUpScreen extends StatefulWidget {
  const SignUpScreen({Key? key}) : super(key: key);

  @override
  _SignUpScreenState createState() => _SignUpScreenState();

}

class _SignUpScreenState extends State<SignUpScreen> {
  TextEditingController _passwordTextController = TextEditingController();
  bool showPassword = false;
  bool _isPasswordEightLetters = false;
  bool _OneNumberPassword = false;
  TextEditingController _emailTextController = TextEditingController();

  OnPasswordChanged(String password) {
    
    final numericRegex = RegExp(r'[0-9;]');

    setState(() {

      _isPasswordEightLetters = false;
      if (password.length >= 8) {
        _isPasswordEightLetters = true;
      }

      _OneNumberPassword = false;
      if(numericRegex.hasMatch(password)) {
        _OneNumberPassword = true;
      }
    });
  }
.
.
.

Container(
                        child: TextFormField(
                          controller: _emailTextController,
                          style: const TextStyle(color: Colors.black),
                          keyboardType: TextInputType.emailAddress,
                          // inputFormatters: <TextInputFormatter>[
                          //   FilteringTextInputFormatter.allow(RegExp(r'[0-9]'))
                          // ],
                          decoration: InputDecoration(
                            hintText: "Enter Your Email Address",
                            hintStyle: const TextStyle(color: Color(0xff31708c),
                            fontSize: 15.5),
                            prefixIcon: const Icon(Icons.email_sharp,
                            color: Color(0xff31708c)),
                            focusedBorder: OutlineInputBorder(
                              borderRadius: BorderRadius.circular(10),
                              borderSide: const BorderSide(color: Color(0x6630728c))),
                              enabledBorder: OutlineInputBorder(
                                borderRadius: BorderRadius.circular(10),
                                borderSide: const BorderSide(color: Color(0x6630728c),
                              ),
                          ),
                        ),
                        autofillHints: const [AutofillHints.email]
                        ),
                        decoration: BoxDecoration(color: Colors.blueGrey.withOpacity(0.08),
                        borderRadius: BorderRadius.circular(10)),
                      )
.
.
.
ButtonTheme(
                      minWidth: MediaQuery.of(context).size.width,
                      height: 55,
                      buttonColor: const Color(0xff31708c),
                      child: RaisedButton(
                        onPressed: () {
                          FirebaseAuth.instance.createUserWithEmailAndPassword(
                            email: _emailTextController.text, 
                            password: _passwordTextController.text).then((_) {
                              print('New Account Created');
                          Navigator.of(context).
                          pushReplacement(MaterialPageRoute(builder: (context) => Dashboard()));
                          }
                      ).onError((error, stackTrace) {
                        print('Error');
                      });
                      },
                        shape: RoundedRectangleBorder(
                          borderRadius: BorderRadius.circular(20),
                        ),
                        child: const Text("Sign Up",
                        style: TextStyle(color: Colors.white,
                        fontSize: 18,
                        fontWeight: FontWeight.bold),
                        ),
                      ),
                    )
Ta-Ty 提问于2022-09-08
3 个回答
#1楼 已采纳
得票数 1

筹备工作

  1. 检查你的模拟器是否有访问互联网的权限,并且也连接到了互联网。
  2. 你的firebase控制台中的电子邮件/密码登录方法已被启用,以获得访问权。

步骤1:创建sha1密钥+调试密钥信息+添加firebase。我猜你的sha1密钥可能只有发布密钥的正常信息?

步骤2:console.cloud.google.com激活Android设备验证,并插入由firebase自动生成的sha钥匙及其匹配的首选项(如package name......)。

结论

你的代码在我看来是好的!一切设置都是正确的。我认为你忘记了一些琐碎的设置或正确的sha键。

Gwhyyy 提问于2022-09-08
#2楼
得票数 1

我在模拟器上运行时,也有同样的错误。

但是,当我在真正的移动设备上运行时,它却能完全正常地工作。

因此,如果你在模拟器上测试它,你必须创建一个新的模拟器。

57 Abbas 提问于2022-09-13
#3楼
得票数 0

我面对同样的问题已经有一个星期了,我发现的解决方案是更换模拟器,所以我安装了NoxPlayer安卓模拟器,它的效果非常好:这是下载它的链接=https://www.bignox.com/.

这是一个解释如何将其与android studio和vscode连接的视频 = https://www.youtube.com/watch?v=mEoGhw4LiNM

SomeOne 提问于2022-09-27