如何解决在iOS设备上,Flutter TextField值始终为空吗?
我目前正在iPhone 8和Android moto G8上测试Flutter应用。
但是,我遇到的问题是,尽管在android moto G8上一切正常,但在iPhone上,似乎每当我更改TextField时,先前TextField中的值都将变为空,即:
flutter: This is in error: 'package:firebase_auth/src/firebase_auth.dart': Failed assertion: line 174 pos 12: 'email != null': is not true.
但是当我在设备上打字时,打印输出是:
flutter: This is in email:test@gmail.com,value: test@gmail.com
这是我的自定义文本字段的代码:
class InputTextFields extends StatefulWidget {
InputTextFields({this.title,this.obscureText,this.setValue});
final String title;
final bool obscureText;
Function setValue;
final TextEditingController _controller = TextEditingController();
@override
_InputTextFieldsState createState() => _InputTextFieldsState();
}
class _InputTextFieldsState extends State<InputTextFields> {
@override
Widget build(BuildContext context) {
String hintText;
return Container(
padding: EdgeInsets.only(bottom: 10,left: 35,right: 35),child: TextField(
obscureText: widget.obscureText,decoration: InputDecoration(
labelText: widget.title,labelStyle: TextStyle(
fontFamily: 'Montserrat',fontWeight: FontWeight.bold,color: Colors.grey),focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(
color: Colors.grey,),hintText: hintText,onChanged: widget.setValue,);
}
}
所以我确定TextField可以按预期工作,但错误仍然存在。有什么想法可以解决这个问题吗?
解决方法
问题似乎出在您的onChanged: widget.setValue
中的TextField
中。您的函数使先前的TextField为空。检索TextField
的值的最佳方法是使用TextEditingController
。为了在自定义TextField中使用TextEditingController
,您必须将其作为参数传递。
class InputTextFields extends StatefulWidget {
InputTextFields({this.title,this.obscureText,this.controller});
final String title;
final bool obscureText;
final TextEditingController controller;
}
在您的TextField中:
controller:widget.controller
这是您使用新的自定义TextField的方式:
final TextEditingController myController=TextEditingController();
InputTextFields(title:"Test",obscureText:false,controller:myController),
我认为您正在尝试验证TextField的值是否为电子邮件。您可以使用RegExp或使用https://pub.dev/packages/email_validator软件包轻松地对其进行检查。您也可以使用TextFormField而不是TextField来检查TextField的值是否为null。看一下:https://flutter.dev/docs/cookbook/forms/validation。祝你好运!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。