在 TextEditingController 的初始化器中只能访问静态成员
Only static members can be accessed in initializers on TextEditingController
目标:编辑信息时进入一个初始值等于当前信息的表单。
下面的代码有效,因为它有 属性 'initialValue'
TextFormField(
maxLines: 1,
autofocus: true,
initialValue: _currentProditem.producttitle,
style: TextStyle(
color: Colors.black87,
fontWeight: FontWeight.w400,
fontSize: 18.0,
fontFamily:'Cabin',
),
但下面的代码不起作用,因为属性 'initialValue' 和 'controller' 有冲突。这就是我在下面的代码中注释 属性 'initialValue' 的原因。但是我想把 initialValue 放在某个地方,这样我就可以实现上述目标。
TextFormField(
controller: _controller,
maxLines: 1,
autofocus: true,
// initialValue: _currentProditem.price,
keyboardType: TextInputType.number,
onChanged: (string) {
string = '${_formatNumber(string.replaceAll(',', ''))}';
_controller.text = string;
Timer(Duration(milliseconds: 1), () {
_controller.selection = TextSelection.fromPosition(TextPosition(offset: string.length));
});
},
于是研究了下IntialValue怎么放,发现需要添加下面的代码
final _controller = TextEditingController(text: 'some text');
我尝试将单词 'some text' 更改为“_currentProditem.price”,但单词“_currentProditem”有问题,它说 'error: Only static members can be accessed in initializers.'
作为参考,可以在下面的代码中找到单词“_currentProditem”
class ItemNotifier with ChangeNotifier {
List<Proditem> _itemList = [];
Proditem _currentProditem;
UnmodifiableListView<Proditem> get itemList => UnmodifiableListView(_itemList);
Proditem get currentProditem => _currentProditem;
set itemList(List<Proditem> itemList) {
_itemList = itemList;
notifyListeners();
}
set currentProditem(Proditem proditem) {
_currentProditem = proditem;
notifyListeners();
}
}
在任何方法之外只能访问静态字段
所以,只需将 _controller
初始化为空
final _controller = TextEditingController();
在构建时或在 initState 中设置值
_controller.text = currentPrice;
因为控制器有一个 setter 命名文本,所以很容易像按下按钮时那样动态更新值
目标:编辑信息时进入一个初始值等于当前信息的表单。
下面的代码有效,因为它有 属性 'initialValue'
TextFormField(
maxLines: 1,
autofocus: true,
initialValue: _currentProditem.producttitle,
style: TextStyle(
color: Colors.black87,
fontWeight: FontWeight.w400,
fontSize: 18.0,
fontFamily:'Cabin',
),
但下面的代码不起作用,因为属性 'initialValue' 和 'controller' 有冲突。这就是我在下面的代码中注释 属性 'initialValue' 的原因。但是我想把 initialValue 放在某个地方,这样我就可以实现上述目标。
TextFormField(
controller: _controller,
maxLines: 1,
autofocus: true,
// initialValue: _currentProditem.price,
keyboardType: TextInputType.number,
onChanged: (string) {
string = '${_formatNumber(string.replaceAll(',', ''))}';
_controller.text = string;
Timer(Duration(milliseconds: 1), () {
_controller.selection = TextSelection.fromPosition(TextPosition(offset: string.length));
});
},
于是研究了下IntialValue怎么放,发现需要添加下面的代码
final _controller = TextEditingController(text: 'some text');
我尝试将单词 'some text' 更改为“_currentProditem.price”,但单词“_currentProditem”有问题,它说 'error: Only static members can be accessed in initializers.'
作为参考,可以在下面的代码中找到单词“_currentProditem”
class ItemNotifier with ChangeNotifier {
List<Proditem> _itemList = [];
Proditem _currentProditem;
UnmodifiableListView<Proditem> get itemList => UnmodifiableListView(_itemList);
Proditem get currentProditem => _currentProditem;
set itemList(List<Proditem> itemList) {
_itemList = itemList;
notifyListeners();
}
set currentProditem(Proditem proditem) {
_currentProditem = proditem;
notifyListeners();
}
}
在任何方法之外只能访问静态字段
所以,只需将 _controller
初始化为空
final _controller = TextEditingController();
在构建时或在 initState 中设置值
_controller.text = currentPrice;
因为控制器有一个 setter 命名文本,所以很容易像按下按钮时那样动态更新值