textfield onChanged() {setstate} 在 Flutter 中不起作用



当用户在文本字段上键入至少一个字符时,我想更改按钮的颜色还想在文本字段为空时更改颜色

所以我试着标记(布尔值(使其成为

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(),
);
},

最新更新