首页 > 解决方案 > 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 正在按预期工作,但错误仍然存​​在。有什么想法可以解决这个问题吗?

标签: fluttertextfield

解决方案


问题似乎出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 。祝你好运!


推荐阅读