在Flutter中设置TextField的onChanged回调后重置字符串

时间:2019-05-22 21:44:58

标签: dart flutter

由TextField onChanged回调设置后,将重置String变量的值。在Button onPressed回调中选中时。但是其他数据类型似乎还可以。

一般来说,我对Flutter和Dart还是陌生的,所以我刚刚尝试了想到的所有荒谬解决方案,例如使用setState(),创建单独的函数来处理它,从上下文中剥离所有其他内容,但似乎都没有工作。

String itemName;
String testVal;
int quantity;
int price;
return Scaffold(
  appBar: AppBar(title: Text("New Item")),
  body: Column(
    children: <Widget>[
      Text("Name"), 
      TextField(onChanged: (val) => itemName = val),
      Text("Test"), 
      TextField(keyboardType: TextInputType.text, onChanged: (val) => testVal = val),
      Text("Quantity"), 
      TextField(keyboardType: TextInputType.number, onChanged: (String val) => quantity = num.tryParse(val)),
      Row(children: <Widget>[Text("Price"), Flexible(child: TextField(maxLines: 1,keyboardType: TextInputType.number, onChanged: (String val) => price = num.tryParse(val)))]),
      Center(child: RaisedButton(child: Text("Submit"), onPressed: () { print("This is NOT working? $itemName"); }))
    ],
  ),
);

onPressed(printing itemName)内部的print语句也应该打印textField更改的任何值,但始终打印为null。 尽管textField的值正在更改(如果有一种调试方法也有帮助,那么使用print语句检查该调试对于回调来说是徒劳的)。

问题与testVal相同,但数量和价格都很好,因为它们是整数。

我还使用DateTime测试了相同的内容,并且效果也很好。

2 个答案:

答案 0 :(得分:0)

问题是因为当键盘显示或关闭小部件的颤振框架调用.split('_')方法时,本地变量全部重新启动。

一种简单的解决方法是使用[0]并将变量定义为小部件状态。

build

答案 1 :(得分:0)

我不确定,但是问题可能出在实现onChanged函数的方式上。您的代码是:

onChanged: (val) => testVal = val

这是简写

onChanged: (val) { return testVal = val; } // I think this is wrong

所以尝试更改为

onChanged: (val) { testVal = val; }