当用户在文本字段上键入至少一个字符时,我想更改按钮的颜色还想在文本字段为空时更改颜色
所以我试着标记(布尔值(使其成为
onChanged: (value) {
if (value.length == 0) {
setState(() {
_isTimeFilled = false;
});
} else {
setState(() {
_isTimeFilled = true;
});
}
},
...
_isFilled ? Colors.grey : Colors.green
但只有当文本字段未聚焦时,它才会改变颜色
我也试过提供者,但还是一样。我该怎么解决这个问题?
这是我的代码
void _changeButtonColor(int value) {✅✅✅✅
if (value == 0) {
setState(() => _isTimeFilled = false);
} else {
setState(() => _isTimeFilled = true);
}
}
TextFormField TimeTextFormField() {
return TextFormField(
focusNode: timeFocusNode,
autofocus: true,
keyboardType: TextInputType.number,
textInputAction: TextInputAction.next,
onChanged: (value) {
_changeButtonColor(value.length);✅✅✅✅
},
RaisedButton(
focusColor: Colors.white,
splashColor: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(6.0),
),
onPressed: () {},
color: _isTimeFilled ? Colors.greenAccent : Colors.grey, ✅✅✅✅
textColor: Colors.white,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: SizedBox(
width: double.infinity, child: Icon(Icons.check)),
),
),
),
这样做:
onChanged: (value) {
_isTimeFilled = (value != 0);
setState(() { });
},
TextField的onChanged是作为参数的字符串。并且,_isFilled和_isTimeFilled需要统一。
所以,
onChanged: (value) {
if (value.length <= 0) {
setState(() {
_isFilled = false;
});
} else {
setState(() {
_isFilled = true;
});
}
},
找到了解决方案,但不知道确切的原因。刚刚成功。
解决方案:制作一个有状态的小部件并调用它。
floatingActionButton: FloatingActionButton(
onPressed: () {
showCupertinoModalBottomSheet(
context: context,
builder: (context, scrollController) => inputForms(),
);
},
inputForms
是返回表单字段的方法。
解决方案:使表单字段成为有状态的小部件,并将其导入
floatingActionButton: FloatingActionButton(
onPressed: () {
showCupertinoModalBottomSheet(
context: context,
builder: (context, scrollController) => StatefulFormFields(),
);
},