【问题标题】:Only static members can be accessed in initializers on TextEditingController在 TextEditingController 的初始化程序中只能访问静态成员
【发布时间】:2020-07-21 22:01:51
【问题描述】:

目标:当编辑信息时,它会转到一个初始值等于当前信息的表单。

下面的代码有效,因为它具有属性“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”这个词有问题,它显示“错误:在初始化程序中只能访问静态成员。”

可以在下面的代码中找到“_currentProdiem”这个词作为参考

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();
  }
}

【问题讨论】:

    标签: flutter dart texteditingcontroller


    【解决方案1】:

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

    所以,只需初始化 _controller 为空

    final _controller = TextEditingController();
    

    在构建时或在 initState 中设置值

    _controller.text = currentPrice;
    

    由于控制器有一个名为 text 的 setter,它很容易像按下按钮时那样动态更新值

    【讨论】:

    • 感谢 Neuromancer 的建议!成功了!!!...
    猜你喜欢
    • 2020-01-05
    • 2019-01-23
    • 2018-11-13
    • 1970-01-01
    • 2020-08-31
    • 2020-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多