由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测试了相同的内容,并且效果也很好。
答案 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; }