我有一个用 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”。
答案 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)