[英]Why is Firebase email verification giving me a http 400 error?
[英]Email verification cause error on flutter? why?
我正在为此开发一个食品订购应用程序,我想通过 email 验证用户。为此,我正在使用 email 验证。 我正在使用 firebase 电子邮件验证。 说到我的观点,我在验证 email 错误是基于 flutter 之后验证了 email。我是在 flutter 上开发应用程序的。请提供一些步骤以避免错误。 我在下面附上了错误消息
E/flutter ( 9906): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: Null check operator used on a null value
E/flutter ( 9906): #0 _verifiyState.checkmail (package:datafound/vvvv.dart:31:44)
E/flutter ( 9906): #1 _verifiyState.initState.<anonymous closure> (package:datafound/vvvv.dart:26:55)
E/flutter ( 9906): #2 _rootRunUnary (dart:async/zone.dart:1436:47)
E/flutter ( 9906): #3 _CustomZone.runUnary (dart:async/zone.dart:1335:19)
E/flutter ( 9906): #4 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1244:7)
E/flutter ( 9906): #5 _CustomZone.bindUnaryCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1281:26)
E/flutter ( 9906): #6 _rootRunUnary (dart:async/zone.dart:1444:13)
E/flutter ( 9906): #7 _CustomZone.runUnary (dart:async/zone.dart:1335:19)
E/flutter ( 9906): #8 _CustomZone.bindUnaryCallback.<anonymous closure> (dart:async/zone.dart:1265:26)
E/flutter ( 9906): #9 _Timer._runTimers (dart:isolate-patch/timer_impl.dart:395:19)
E/flutter ( 9906): #10 _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:426:5)
E/flutter ( 9906): #11 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12)
E/flutter ( 9906):
这个错误是在 email 验证后显示的,这里是我的代码
import 'package:datafound/vvvv.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
class Emailver extends StatefulWidget {
const Emailver({Key? key}) : super(key: key);
@override
_EmailverState createState() => _EmailverState();
}
class _EmailverState extends State<Emailver> {
TextEditingController emailCtrl = TextEditingController();
TextEditingController passCtrl = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("email verification"),
),
body: Center(
child: Column(
children: [
const SizedBox(
height: 10.0,
),
TextFormField(
controller: emailCtrl,
keyboardType: TextInputType.emailAddress,
decoration: InputDecoration(
border:OutlineInputBorder(
borderSide: const BorderSide(width: 1, color: Colors.black),
borderRadius: BorderRadius.circular(10),
),
),
),
const SizedBox(
height: 10.0,
),
TextFormField(
controller: passCtrl,
keyboardType: TextInputType.number,
decoration: InputDecoration(
border:OutlineInputBorder(
borderSide: const BorderSide(width: 1, color: Colors.black),
borderRadius: BorderRadius.circular(10),
),
),
),
const SizedBox(
height: 10.0,
),
ElevatedButton(onPressed: (){
signup();
},
child: const Text("Sign Up"))
],
),
),
);
}
Future signup() async{
await FirebaseAuth.instance.createUserWithEmailAndPassword(email: emailCtrl.text, password: passCtrl.text).then((_){
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const verifiy()),
);
});
}
}
上面的代码用于从用户那里获取 email
import 'dart:async';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
class verifiy extends StatefulWidget {
const verifiy({Key? key}) : super(key: key);
@override
_verifiyState createState() => _verifiyState();
}
class _verifiyState extends State<verifiy> {
bool isvv = false;
Timer? timer;
@override
void initState() {
isvv = FirebaseAuth.instance.currentUser!.emailVerified;
!isvv ? sendnotfy() : null;
Timer.periodic(const Duration(seconds: 3), (_) => checkmail(),);
super.initState();
}
Future checkmail() async{
await FirebaseAuth.instance.currentUser!.reload();
setState(() {
isvv = FirebaseAuth.instance.currentUser!.emailVerified;
});
if(isvv) timer?.cancel();
}
Future sendnotfy() async{
final user = FirebaseAuth.instance.currentUser!;
await user.sendEmailVerification();
}
@override
void dispose() {
timer?.cancel();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("verify"),
),
body: isvv ? Column(
children: [
const Text("verifiy your email"),
ElevatedButton(
onPressed: (){
FirebaseAuth.instance.signOut().then((_){
Navigator.pop(context);
});
},
child: const Text("sign out"),
)
],
) : Center(
child: Container(
color: Colors.red,
child: const Text("Check Your Mail and click it"),
),
) ,
);
}
}
以上为email验证请尽快提供解决方案。 谢谢
如果您的语句可为空,您应该检查 null。 可空表达式 "." 如果你使用它,你会得到这个错误。
import 'dart:async';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
class verifiy extends StatefulWidget {
const verifiy({Key? key}) : super(key: key);
@override
_verifiyState createState() => _verifiyState();
}
class _verifiyState extends State<verifiy> {
bool isvv = false;
Timer? timer;
@override
void initState() {
final currentUser = FirebaseAuth.instance.currentUser;
if (currentUser != null) {
final isEmailVerifed = currentUser!.emailVerified;
if (!isEmailVerifed) {
sendnotfy()
}
}
Timer.periodic(const Duration(seconds: 3), (_) => checkmail(),);
super.initState();
}
Future checkmail() async {
final currentUser = FirebaseAuth.instance.currentUser;
var isvv = false;
if (currentUser != null) {
await currentUser.reload();
setState(() {
isvv = currentUser.emailVerified;
});
}
if (isvv) timer?.cancel();
}
Future sendnotfy() async {
final currentUser = FirebaseAuth.instance.currentUser;
if (currentUser != null) {
await currentUser.sendEmailVerification();
}
}
@override
void dispose() {
timer?.cancel();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("verify"),
),
body: isvv ? Column(
children: [
const Text("verifiy your email"),
ElevatedButton(
onPressed: (){
FirebaseAuth.instance.signOut().then((_){
Navigator.pop(context);
});
},
child: const Text("sign out"),
)
],
) : Center(
child: Container(
color: Colors.red,
child: const Text("Check Your Mail and click it"),
),
) ,
);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.