gpt4 book ai didi

flutter - _断言错误 ('package:firebase_auth/src/firebase_auth.dart' : Failed assertion: line 95 pos 12: 'email != null' : is not true. )

转载 作者:IT王子 更新时间:2023-10-29 06:55:54 24 4
gpt4 key购买 nike

我的目标是使用 Firebase 在 Flutter 中构建注册。但是,当我按下包含注册功能的按钮时,应用程序停止并且我收到此错误:

异常发生。_AssertionError('package:firebase_auth/src/firebase_auth.dart':断言失败:第 95 行 pos 12:'电子邮件!= null':不正确。)

与 firebase 的集成正在运行,问题可能出在没有获取数据的 textformfield 上......

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:cruke_app/main.dart';
import 'package:cruke_app/ui/login.dart';

class CrukeRegister extends StatelessWidget {

@override
Widget build(BuildContext context) {
return MaterialApp(
home: Register(),
);
}
}

class Register extends StatefulWidget {
@override
_RegisterState createState() => _RegisterState();
}

class _RegisterState extends State<Register> {
String _email, _password, _passwordConfirm, _displayName;
final formKey = new GlobalKey<FormState>();
bool _autoValidate = false;
final FirebaseAuth auth = FirebaseAuth.instance;
bool _loading = false;
final scaffoldKey = new GlobalKey<ScaffoldState>();

@override
void initState() {

super.initState();
}

Widget buildTextField(double width, String text, IconData icon, bool obscureText, String isEmpty, String _saved, bool _autoValidate){

return Container(
margin: EdgeInsets.only(bottom: 15),
width: width * 0.9,
child: TextFormField(
validator: (input) => input.isEmpty ? isEmpty : null,
onSaved: (input) => _saved = input,
autovalidate: _autoValidate,
obscureText: obscureText,
decoration: InputDecoration(
suffixIcon: Padding(
padding: EdgeInsetsDirectional.only(end: 12.0),
child: Icon(icon, color: Colors.red),
),
hintText: text,
hintStyle: TextStyle(color: Colors.redAccent, fontSize: 15.0),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(30.0),
borderSide: BorderSide(
width: 5.0,
color: Colors.redAccent,
),
),
),
),
);
}

@override
Widget build(BuildContext context) {
double width = MediaQuery.of(context).size.width;
double height = MediaQuery.of(context).size.height;

return Scaffold(
key: scaffoldKey,
backgroundColor: Colors.white,
body: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Center(
child: Container(
margin: EdgeInsets.only(top: height * 0.025),
child: Image.asset("images/logo_vertical.png", width: width * 0.5),
),
),
Form(
key: formKey,
autovalidate: _autoValidate,
child: Column(
children: <Widget>[
buildTextField(width, "Digite seu nome", Icons.person, false, "Por favor, digite seu nome!", _displayName, _autoValidate),
buildTextField(width, "Digite seu e-mail", Icons.email, false, "Por favor, digite seu e-mail!", _email, _autoValidate),
buildTextField(width, "Digite sua senha", Icons.lock, true, "Por favor, digite sua senha!", _password, _autoValidate),
buildTextField(width, "Confirme sua senha", Icons.lock, true, "Por favor, confirme sua senha!", _passwordConfirm, _autoValidate),
Container(
height: height * 0.09,
width: width * 0.9,
padding: EdgeInsets.only(top: 10.0),
child: RaisedButton.icon(
onPressed:
_validateSubmitRegister,
//Navigator.push(
//context,
//MaterialPageRoute(builder: (context) => Home()),
//);

label: Text(
'Registrar',
style: TextStyle(fontSize: 15, color: Colors.white),
),
color: Colors.red,
icon: Icon(Icons.account_circle, color: Colors.white),
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(30.0)),

),
),
],
),
),

Container(
margin: EdgeInsets.only(top: 15),
child: Material(
child: InkWell(
onTap: (){
Navigator.push(context, MaterialPageRoute(builder: (context) => CrukeLogin()));
},
child: Text("Já tem uma conta? Faça Login!", style: TextStyle(fontSize: 15, color: Colors.red),),
),

),

),
],
),
),

);
}


void _validateSubmitRegister() async{
final form = formKey.currentState;
if (formKey.currentState.validate()) {
form.save();
AuthResult result = await FirebaseAuth.instance.createUserWithEmailAndPassword(email: _email, password: _password);
FirebaseUser user = result.user;
}

}
}

最佳答案

你可以这样试试:

创建枚举:enum DataType { NAME, EMAIL, PASS, PASS_REPEAT }

然后改变你的方法:

Widget buildTextField(double width, String text, IconData icon, bool obscureText, String isEmpty, DataType type, bool _autoValidate){

return Container(
margin: EdgeInsets.only(bottom: 15),
width: width * 0.9,
child: TextFormField(
validator: (input) => input.isEmpty ? isEmpty : null,
onSaved: (input) {
switch (type) {
case DataType.NAME:
_displayName = input;
break;
case DataType.EMAIL:
_email = input;
break;
case DataType.PASS:
_password = input;
break;
case DataType.PASS_REPEAT:
_passwordConfirm = input;
break;
}
},
autovalidate: _autoValidate,
obscureText: obscureText,
decoration: InputDecoration(
suffixIcon: Padding(
padding: EdgeInsetsDirectional.only(end: 12.0),
child: Icon(icon, color: Colors.red),
),
hintText: text,
hintStyle: TextStyle(color: Colors.redAccent, fontSize: 15.0),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(30.0),
borderSide: BorderSide(
width: 5.0,
color: Colors.redAccent,
),
),
),
),
);
}

关于flutter - _断言错误 ('package:firebase_auth/src/firebase_auth.dart' : Failed assertion: line 95 pos 12: 'email != null' : is not true. ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57431797/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com