Flutter Firebase身份验证忽略标头X-Firebase-Locale,因为其值为空

9nvpjoqh  于 2023-01-18  发布在  Flutter
关注(0)|答案(3)|浏览(118)

我试图通过电子邮件和密码注册和登录将Firebase身份验证添加到我的应用程序中。当我测试它时,它没有导航到下一个屏幕,我得到以下消息:
“忽略标头X-Firebase-Locale,因为它为空”
然而,当我转到Firebase时,它显示我输入的信息已存储为新用户。有人能提供一些关于这是怎么回事的见解吗?
下面是我的主要.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(),
    );
  }
}

以下是我注册的部分内容。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),
                        ),
                      ),
                    )
7z5jn7bk

7z5jn7bk1#

准备工作

1.检查您的模拟器是否具有访问internet的权限,并且还连接到。

  1. firebase控制台中的电子邮件/密码登录方法已启用以获得访问权限。

**步骤1:**创建sha1密钥+调试密钥信息+添加firebase。我猜你的sha1密钥可能只有来自release密钥的普通信息?
**第2步:**从console.cloud.google.com激活Android设备验证,并插入firebase自动生成的sha密钥及其匹配的首选项(如package name...)
结论

你的代码看起来不错!一切都设置正确。我想你忘了一些琐碎的设置或正确的sha键。

iecba09b

iecba09b2#

我在Emulator上运行时遇到了同样的错误。
但是当我在真实的的移动终端上运行它时,它工作得非常好。
所以,如果你在一个模拟器上测试它,你必须创建一个新的模拟器。

5sxhfpxr

5sxhfpxr3#

我面临着同样的问题一个星期,我发现的解决方案是改变模拟器,所以我安装了NoxPlayer Android模拟器,它的工作只是伟大的:这是下载它的链接= https://www.bignox.com/
这段视频解释了如何将其与android studio和vscode = https://www.youtube.com/watch?v=mEoGhw4LiNM连接

相关问题