flutter - Flutter TextField 值在 ios 设备上始终为空?
问题描述
我目前正在我的 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 正在按预期工作,但错误仍然存在。有什么想法可以解决这个问题吗?
解决方案
问题似乎出onChanged: widget.setValue
在您的TextField
. 您的函数使以前的 TextField 为空。检索 a 值的最佳方法TextField
是使用 a TextEditingController
。为了TextEditingController
在您的自定义 TextField 中使用 a,您必须将其作为参数传递。
class InputTextFields extends StatefulWidget {
InputTextFields({this.title, this.obscureText, this.controller});
final String title;
final bool obscureText;
final TextEditingController controller;
}
在您的文本字段中:
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 的值是否为空。看看这个:https ://flutter.dev/docs/cookbook/forms/validation 。祝你好运!
推荐阅读
- android - 无法将 spatialite android 添加到我的项目中
- scala - Scala 闭包 - 这些闭包如何作为高阶函数的参数工作
- c# - 是否可以在 ASP MVC 中创建一个包含复选框列表的下拉列表?
- visual-studio-code - VSCODE 远程容器 - 避免在重建时重新安装扩展
- flutter - 仅更新 Flutter 上列表视图构建器上的选定位置文本颜色
- python - 排序操作使用的 RAM 超过了最大 33.5 MB
- python - Jupyter:打印所有函数参数
- vue.js - Vue.js 西班牙语字符编码问题
- jsp - jsp动态设置src图片
- typo3 - TYPO3 低级数据库关系始终为空