【问题标题】:Flutter TextField value always null on ios device?Flutter TextField 值在 ios 设备上始终为空?
【发布时间】:2020-08-15 21:49:05
【问题描述】:

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

【问题讨论】:

    标签: flutter textfield


    【解决方案1】:

    问题似乎来自您的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;
    }
    

    在您的文本字段中:

    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 设备、模拟 iOS 设备和物理 iOS(其他视图)。所以我不太确定这是否正是问题所在
    • 这对我来说似乎是个问题。如果可行,请尝试我的解决方案。每次 TextField 的值发生变化时都运行一个函数确实不好。
    猜你喜欢
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 2022-01-15
    • 2021-09-01
    • 1970-01-01
    • 2021-07-24
    相关资源
    最近更新 更多