在TextEditingController的初始化程序中,只能访问静态成员

时间:2020-07-21 22:01:51

标签: flutter dart 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');

我尝试将“某些文本”一词更改为“ _currentProditem.price”,但“ _currentProditem”一词出现问题,即“错误:初始化器中只能访问静态成员。”

在下面的代码中可以找到单词“ _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();
  }
}

1 个答案:

答案 0 :(得分:1)

只能在任何方法外部访问静态字段

因此,只需初始化_controller

final _controller = TextEditingController();

在构建时或在initState中设置值

_controller.text = currentPrice;

由于控制器具有名为text的setter,因此易于像按下按钮一样动态地更新值