如何检查文本字段是否包含颤振中的字符串?

时间:2021-03-10 01:56:06

标签: android ios flutter dart

我有一个用 Flutter 制作的简单计算器,我的问题是我想检查用户是否在文本字段中输入了一个字符串,然后(如果为真)显示“必须输入有效数字”。我怎样才能做到这一点?我是 flutter 新手,有人可以帮我吗?

我知道将键盘类型用作数字,但这不是我的任务。我也知道文本字段验证,但这不是我想要的,我需要使用文本小部件显示错误消息。

<块引用>

这些是我的变量和控制器

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 个答案:

答案 0 :(得分:2)

使用https://api.flutter.dev/flutter/widgets/TextEditingController-class.html

用法示例:

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,
),

答案 1 :(得分: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

    
    }
  }

答案 2 :(得分:0)

尝试使用 controller ,就像这样

小部件构建之前:

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)