在 Flutter 中,要实时监控 TextEditingController.text 是否为空,你可以通过监听控制器的变化 (addListener) 来实现。下面是几种常用方式 👇
✅ 方法 1:用 addListener()
最直接、推荐的做法。
final TextEditingController inputController = TextEditingController();
@override
void initState() {
super.initState();
inputController.addListener(() {
final text = inputController.text;
if (text.isNotEmpty) {
print(“文本不为空: $text”);
} else {
print(“文本为空”);
}
});
}
@override
void dispose() {
inputController.dispose();
super.dispose();
}
✅ 方法 2:用 onChanged 回调
如果只是想在输入时立即判断,可以在 TextFormField 中加上 onChanged:
TextFormField(
autofocus: true,
controller: inputController,
keyboardType: TextInputType.text,
decoration: const InputDecoration(
labelText: “输入指令”,
),
onChanged: (value) {
if (value.isNotEmpty) {
print(“文本不为空: $value”);
} else {
print(“文本为空”);
}
},
)
✅ 方法 3:与 UI 绑定(例如控制按钮启用状态)
比如你想让“发送”按钮只有在文本不为空时可用,可以用 ValueNotifier 或 setState:
bool isNotEmpty = false;
TextFormField(
controller: inputController,
onChanged: (value) {
setState(() {
isNotEmpty = value.isNotEmpty;
});
},
),
ElevatedButton(
onPressed: isNotEmpty ? () => print(“发送: ${inputController.text}”) : null,
child: const Text(“发送”),
)
✅ 方法 4(更优雅):用 ValueListenableBuilder
TextEditingController 本身实现了 ValueListenable,可以直接监听:
ValueListenableBuilder(
valueListenable: inputController,
builder: (context, value, child) {
final text = value.text;
return ElevatedButton(
onPressed: text.isNotEmpty ? () => print(“发送: $text”) : null,
child: const Text(“发送”),
);
},
)
🧠 总结推荐:
如果只是打印或逻辑判断 → addListener() ✅
如果和 UI 状态绑定 → onChanged 或 ValueListenableBuilder ✅✅(推荐)
评论(0)
暂无评论