如何在Flutter中检查文本字段是否包含字符串?

3
我有一个用Flutter编写的简单计算器,我的问题是我想检查用户在文本字段中输入了一个字符串,然后(如果为真)显示“必须输入有效数字”。我该怎么办?我对Flutter不熟悉,所以有人能帮帮我吗?
我知道可以使用数字键盘类型,但这不是我的任务。我也知道如何进行文本字段验证,但这不是我想要的,我需要使用Text Widget显示错误消息。
以下是我的变量和控制器:
final TextEditingController fController = new TextEditingController();
final TextEditingController sController = new TextEditingController();

String errorMessage = "None";
String result = '0';
double num1, num2;

这是我的addNum。
void addNum() {
setState(() {
  num1 = double.parse(fController.text);
  num2 = double.parse(sController.text);
  result = (num1 + num2).toString();
});
}

这是onPressed(被按下)的内容。
onPressed: () {
       addNum();
        if (result.contains('a') || result.contains('a')) {
          setState(() {
            errorMessage = "Invalid";
          });
        }
      },

这是我展示文本的地方

Text(
  "Output: ${result.toString()}\n"
  "Error: ${errorMessage.toString()}",
),

我遇到了“无效的双精度 a”错误。
3个回答

4

使用 TextEditingController 类,

使用示例:

TextEditingController stringController = new TextEditingController();
String errorMessage;

@override
  Widget build(BuildContext context) {
    return Scaffold(
       body: Column(
         children: [
            TextFormField(
               controller: stringController,
            ),
            FlatButton(
               onPressed: () {
                  String a = stringController.text.trim();

                  if(a.isEmpty) {
                     //Put some code here for if string a is empty.
                     setState(() {
                        errorMessage = "Your error message";
                     });
                  }
               }
            ),
            Text(
               errorMessage, 
            ),
         ]
       ),
    ),
}

尝试更改文本输出

Text(
   "Output: " + result +
   "\nError: " + errorMessage,
),

你好,我提供了一些代码。你能帮忙看一下吗? - Shoji Yamada
编辑@ShojiYamada - Adithaz

0

这是正确的做法,你不需要使用控制器,记得使用最简单和高效的代码。使用stateFulWidget。这段代码会自动生成错误信息。

 String isEmpty(String value){
    return value.isEmpty ? 'Required field' : null;
  }


final _formKey = GlobalKey<FormState>();

 return Form(
      key: _formKey,
      child: TextFormField(
      decoration: InputDecoration(
        hintText: 'Your Place holder here',
      ),
      validator: isEmpty,
      onSaved: (String value) {
        _correctTextValue = value;
      },
    ),
);

在您的按钮onPressed()方法中加入以下代码:
_submit() async {
    if (_formKey.currentState.validate()) {
      _formKey.currentState.save();

      // Your code here

    
    }
  }

0

尝试使用控制器,像这样:

在小部件构建之前:

final _mycontroller = TextEditingController();
 bool _validate = false;

@override
 void dispose() {
   _mycontroller.dispose();
   super.dispose();
 }



On Button:


onPressed(){
setState(){
  _mycontroller2.text.contains("@")
                                 ? _validate = true
                                 : _validate = false;
}}


On TextField:
  TextField(
...
errorText: _validate ? "Insert a valid email": null)

请提供您的答案解释,以便下一个用户知道为什么这个解决方案适用于您。 - Elydasian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接