android-studio - 无法使用 TextFormField 和 FlatButton 验证输入
问题描述
我目前正在开发一个颤振应用程序。我正在尝试使用 TextFormField 获取用户输入,并使用 FlatButton 内的导航器将其传递到下一页。但由于某种原因,它并没有像我预期的那样工作。
这是代码:
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。请在这方面指导我。
提前致谢。
PS: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,
推荐阅读
- python - 如何在 django 中执行异步任务?
- c# - 如何使用 AjaxFileUpload 获取上传图像的最后一个 ID?
- c# - 反序列化一些类
- python - 计算文本文件中每个句子的单词和每个段落的句子
- angular - Angular 7、Ngrx、Rxjs 6 - 在延迟加载的模块之间访问状态
- python - 如何在 TensorFlow Probability 中创建不同内核对象的总和?
- java - 使用 XStream 反序列化顺序和动态元素
- ios - 使用导航栏或创建自定义类在 swift 中为每个视图添加自定义工具栏?
- javascript - 调整网站的整个宽度,我该怎么做?
- php - 无法使用 PHP 将多个文件上传到服务器