首页 > 解决方案 > onChange TextField 如何将数据传递到按钮的 onPressed 属性中

问题描述

我正在尝试将数据从TextField属性onChange传递到onPressed按钮。

如果我输入我的字符串如下:

String newTextTitle;

然后我得到错误print(newTextTitle);

必须先分配不可为空的局部变量“newTextTitle”,然后才能使用它。尝试给它一个初始化表达式,或者确保在每个执行路径上都分配了它。

所以我把它改成

String? newTextTitle;

那么错误就不会再出现了。但是数据不会传递TextField给我的按钮,实际上是通过null.

如果我分配了一些字符串,那么它总是打印我分配的内容,而不管TextField.

我的TextField代码:

TextField(
 autofocus: true,
 textAlign: TextAlign.center,
 onChanged: (newValue) {
  newTextTitle = newValue;
 },
),

我的button代码:

TextButton(
 onPressed: () {
  print('Passing Test $newTextTitle');
 },
),

我的输出控制台:

I/flutter (23788):通过测试 null

这段代码在旧的颤振中工作得很好。但现在我用了Flutter 2.5.2,有些东西已经改变了。

标签: flutterdart

解决方案


使用 aTextEditingController是 Fl​​utter 推荐的做你想做的事情的方法。见(https://flutter.dev/docs/cookbook/forms/text-field-changes

// Setup your controller
final TextEditingController _controller = TextEditingController();

// Add controller to your TextField
TextField(
   controller: _controller,
),

// Get the text via controller.
TextButton(
  onPressed: () {
     print(_controller.text);
  },
  child: const Text('click')
)

推荐阅读