- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我的目标是使用 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/
我正在尝试使用 jquery 获取图像 src,如下所示: HTML Javascript var imageSrc = $('.post_container img').attr('s
我遇到错误,无法完成构建。我搜索了 Stackoverflow 和 Github。我已经尝试了很多方法,但我无法修复。请帮忙。 (1) 在 [src/nullnull/debug, src/debug
我正在尝试使用图像制作一款类似 Match3 的游戏,但我无法进行比较。我正在为固定数量的 atm 执行此操作,只是为了让它正常工作,稍后应该在 foreach 循环中。如果有什么区别的话,该函数位于
我正在使用 jquery 插件 OwlCarousel,在我的一个 View 中使用 ng-repeat 场景,如下所示: 它运行良好,并为轮播中的每个项目输出以下标记: 有没
我的代码如下所示: Bitmap b = BitmapFactory.decodeResource(getResources(), R.drawable.image1); int wi
如果未找到 src,我将使用 Angular 指令作为后备 url 作为名称首字母 指令 (function () { 'use strict'; angular .m
我是构建 chrome 扩展的新手,从一个小项目开始,我需要在弹出窗口中打印“构建版本”。构建版本被附加到 JS/CSS 资源中,如下所示: 需要从脚本 src 值中提取“6.0”。你能帮我看看如何
类型‘AbstractControl’上不存在属性‘Controls’。
这个tutorial演示如何使用指令 ngSrc 而不是 src : 他们要求: Replace the ng-src directive with a pl
我正在创建一个包含多个图像的图库,您可以在其中单击一个小缩略图,然后将打开该图像的更大版本。 打开后,如果您移动光标,图像将在 y 轴上跟随您。类似于 https://www.zara.com/es/
文档[] src.charAt src.length 这三样东西是什么? 我确定 pixState 会给我 1 或 0; var pixState = document[imgName].src.ch
问题背景: 我正在使用这个问题的解决方案:How to update AngularJS view when the value has not changed?所以在我看来我有: 当我更改照片时
我在 html 中有整个页面,在输出之前我想将所有 img src 替换为 data-src我正在使用 return (preg_replace('~]*\K(?=src)~i','data-',
Difference(s): android:src and tools:src? 如果有的话,什么时候使用 tools:src 而不是 android:src 是合适的? 最佳答案 如果您在运行时在
我需要检查每个 script 标签的 src 值,如果匹配,我想更改该脚本标签的 src 属性...像这样: var scripts = document.getElementsByTagName("
使用 img 标签的 data-src 或 src 属性有什么区别和后果(好的和坏的)?我可以使用两者获得相同的结果吗?如果是这样,应该什么时候使用它们? 最佳答案 属性 src 和 data-src
我使用 Vue。我尝试输出图像,当我使用 src 时效果很好,但当我使用 :src 时效果不佳。 作品 不起作用 我试过但没有用 @ 在路径的第一个。 ~ 路径中的第一个。 ./ 在路径的第一个。
在当前项目中我正在使用 jQuery。我只是想知道为什么会这样, $('#homeIcon').hover(function(){ document.getElementById('homeI
我在严格的 Java 环境中。 所以这个问题并不像标题中那么简单,我不是要解决我遇到的问题,它更理论化,以获得更好的知识。 我感兴趣的是用双引号或单引号匹配 src,但如果是双引号,它也必须用双引号结
我有一个 Joomla 2.5.28,现在使用 https 而不是 http。 一些文章(很多)包含来自 Vimeo 的嵌入视频。 最初,这些视频是使用http嵌入的,所以现在我的数据库中有字段int
我是一名优秀的程序员,十分优秀!