You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter TextFormField未编辑时onChanged返回null如何获取初始值

问题原因

onChanged 回调仅在用户手动修改输入框内容时才会触发,未做编辑操作时回调不会执行。你代码里的_input变量声明时没有赋初始值,默认就是null,所以直接点按钮打印结果为null,只有用户修改输入内容触发onChanged后,_input才会被赋值为输入框的实际内容。

解决方法

两种常用方案都能满足需求,选一种即可:

方案1:初始化变量时直接绑定初始值

把输入框的初始值抽成统一常量,声明_input的时候直接赋值,避免硬写两份导致初始值不一致,示例代码:

// 统一定义输入框初始值,后续修改只需要改这一处
const _inputInitialValue = 'initial value ';

class _HomeState extends State<Home> {
  // 声明变量时直接赋初始值,不要留空
  var _input = _inputInitialValue;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('hello')),
      body: Column(
        children: [
          TextFormField(
            initialValue: _inputInitialValue,
            onChanged: (text) {
              // 不需要实时刷新UI的话这里可以不用setState,直接赋值即可
              _input = text;
            },
          ),
          RaisedButton(
            onPressed: () {
              print(_input);
            },
            child: Text('Press me'),
          )
        ],
      ),
    );
  }
}

方案2:使用TextEditingController管理输入内容(官方推荐)

这是Flutter官方推荐的输入框内容管控方式,不需要依赖onChanged回调,随时可以通过控制器拿到输入框的实时内容,也不会出现初始值不同步的问题,示例代码:

class _HomeState extends State<Home> {
  // 初始化输入控制器,直接传入初始值
  final _inputController = TextEditingController(text: 'initial value ');

  @override
  void dispose() {
    // 页面销毁时释放控制器,避免内存泄漏
    _inputController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('hello')),
      body: Column(
        children: [
          TextFormField(
            // 绑定控制器,注意不要和initialValue同时设置,否则会报错
            controller: _inputController,
          ),
          RaisedButton(
            onPressed: () {
              // 直接读取控制器的text属性,不管用户有没有编辑都能拿到正确值
              print(_inputController.text);
            },
            child: Text('Press me'),
          )
        ],
      ),
    );
  }
}

注意:使用controller属性时,不要再给TextFormField设置initialValue,两个属性互斥,同时使用会抛出运行时异常。

内容的提问来源于stack exchange,提问作者tr1via

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 10:27:49