TextField
获得焦点后,将存储一个对象(如果已启用),该对象将发生更改,以使TextField
立即被禁用。当上方的另一个TextField
被聚焦时,也会发生这种情况。
TextField
放在StatefulWidget内,Category
对象包含另一个名为Goal
的对象,该对象包含bool
变量(如果启用或禁用)。此变量还用于启用或禁用TextField
。
TextField(
controller: _goalAmountController,
enabled: widget.category.goal.enabled,
decoration: InputDecoration(
labelText: "Goal Amount",
border: OutlineInputBorder(),
),
onChanged: (value) {
try {
widget.category.goal.amount = double.parse(value);
} on Exception {
//TODO display error message
print("Invalid Goal-Amount");
}
},
),
在switch
下方还有一个TextField
,可通过设置Goal
变量来启用或禁用enabled
。
SwitchListTile(
value: widget.category.goal.enabled,
title: Text("Enable Goal"),
onChanged: (value) {
setState(
() {
widget.category.goal.enabled = value;
},
);
},
),
我发现,点击TextField
似乎可以用新的Goal
作为false
的默认值替换enabled
对象
答案 0 :(得分:0)
尝试改用FocusNodes
:
FocusNode textNode = FocusNode();
TextField(
focusNode: textNode,
controller: _goalAmountController,
enabled: widget.category.goal.enabled,
decoration: InputDecoration(
labelText: "Goal Amount",
border: OutlineInputBorder(),
),
稍后,当用户与另一个小部件交互时,您想禁用此textField时,您可以调用:
textNode.unfocus() ;