我目前正在iPhone 8和Android moto G8上测试我的Flutter应用程序。
然而,我遇到的问题是,虽然在我的Android moto G8上一切都很好,但在我的iPhone上,似乎每当我更改TextField时,前一个TextField中的值就会变为null,即:
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按预期工作,但错误仍然存在。你知道我该怎么解决这个问题吗?
问题似乎来自TextField
中的onChanged: widget.setValue
。您的函数正在使上一个TextField为null。检索TextField
值的最佳方法是使用TextEditingController
。为了在自定义TextField中使用TextEditingController
,您必须将其作为参数传递。
class InputTextFields extends StatefulWidget {
InputTextFields({this.title, this.obscureText, this.controller});
final String title;
final bool obscureText;
final TextEditingController controller;
}
在您的文本字段中:
controller:widget.controller
这就是你如何使用新的自定义文本字段:
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.祝你好运