Android studio 无法使用TextFormField和FlatButton验证输入
我目前正在开发一个颤振应用程序。我尝试使用TextFormField获取用户输入,并使用Navigator按钮将其传递到下一页。但由于某些原因,它并没有像我期望的那样工作 代码如下:Android studio 无法使用TextFormField和FlatButton验证输入,android-studio,flutter,dart,flutter-layout,Android Studio,Flutter,Dart,Flutter Layout,我目前正在开发一个颤振应用程序。我尝试使用TextFormField获取用户输入,并使用Navigator按钮将其传递到下一页。但由于某些原因,它并没有像我期望的那样工作 代码如下: TextFormField( decoration: InputDecoration( enabledBorder: OutlineInputBorder( borderRadius: BorderRad
TextFormField(
decoration: InputDecoration(
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(8)),
borderSide: BorderSide(color: Colors.grey[200])),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(8)),
borderSide: BorderSide(color: Colors.grey[300])),
filled: true,
fillColor: Colors.grey[100],
errorBorder: InputBorder.none,
focusedErrorBorder: InputBorder.none,
errorStyle: Theme.of(context).textTheme.caption,
hintText: 'Phone Number',
),
keyboardType: TextInputType.phone,
controller: _phoneController,
maxLength: 10,
validator: (value) {
print(value);
return isPhoneValid(value)
? 'Continue'
: "Input : 98XXXXXXXX";
},
),
FlatButton(
child: Text('Enter'),
textColor: Colors.white,
disabledColor: Colors.grey,
padding: EdgeInsets.all(16),
onPressed: (isPhoneValid(_phoneController.text))
? () {
Navigator.push(context, MaterialPageRoute(builder,(context)=>HomeScreen));
}
: null,
color: Colors.blue,
),
这些都在构建功能之外
final _phoneController = TextEditingController();
bool isPhoneValid(String value) {
print('Function');
print(value);
return value.trim().length == 10;
}
由于某些原因,FlatButton中的onPressed始终映射为null。请在这方面指导我
提前谢谢
注:TextFormField中的验证器似乎也不起作用。不清楚您以这种方式构建
onPressed
的原因,它不会以您期望的方式工作。将onPressed方法更改为此
onPressed: () {
if (isPhoneValid(_phoneController.text)) {
Navigator.push(context, MaterialPageRoute(builder,(context)=>HomeScreen));
}
}
编辑
要禁用按钮直到文本字段有效,您必须侦听文本更改
bool _canPressButton = false;
@override
void initState() {
_phoneController.addListener(_checkIfCanPressButton);
super.initState();
}
void _checkIfCanPressButton() {
var canPressButton = isPhoneValid(_phoneController.text);
if (canPressButton != _canPressButton) {
setState(() => _canPressButton = canPressButton);
}
}
那你就可以做了
onPressed: _canPressButton ?
? () => Navigator.push(context, MaterialPageRoute(builder: (context) => HomeScreen))
: null,
非常感谢。这是可行的,但我想按钮被禁用时,条件是不真实的。谢谢你的工作。你能帮我处理验证器部分吗?@MANOJKUMAR:什么不起作用了?对我来说似乎没问题。我看不到任何验证程序消息。