Flutter中TextFormField输入内容后按钮未自动显示,热重载才出现
解决输入框输入后按钮不自动显示的问题
你现在的代码只在组件首次构建时检查输入框的文本内容,用户输入过程中UI不会自动刷新,所以按钮不会实时显示——热重载相当于重新执行构建逻辑,这时才会检测到文本变化并显示按钮。
下面是两种可行的解决方法:
方法一:给TextEditingController添加监听器
通过监听控制器的文本变化,触发UI重建:
class YourPage extends StatefulWidget { @override _YourPageState createState() => _YourPageState(); } class _YourPageState extends State<YourPage> { final TextEditingController _weight = TextEditingController(); @override void initState() { super.initState(); // 监听文本变化,触发状态更新 _weight.addListener(() { setState(() {}); }); } @override void dispose() { // 销毁控制器,避免内存泄漏 _weight.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( body: Column( children: [ TextFormField( controller: _weight, keyboardType: TextInputType.number, ), // 原有的按钮判断逻辑 if (_weight.text.contains(RegExp(r'[0-9]'))) Padding( padding: const EdgeInsets.only(bottom: 20), child: BMIButton( onpressed: () { Navigator.push( context, PageTransition( type: PageTransitionType.rightToLeft, child: BMIHeight(), inheritTheme: true, ctx: context, ), ); }, ), ), ], ), ); } }
方法二:利用TextFormField的onChanged回调
直接在输入变化时调用setState更新UI:
TextFormField( controller: _weight, keyboardType: TextInputType.number, // 输入变化时触发状态更新 onChanged: (value) { setState(() {}); }, ),
两种方法都能让UI在用户输入时自动重建,从而实时检测文本内容并显示按钮。
内容的提问来源于stack exchange,提问作者ckot
相关产品推荐
相关产品推荐

