【问题标题】:Private Setters in Dart飞镖的私人二传手
【发布时间】:2019-04-20 01:38:59
【问题描述】:

我一直在寻找,但找不到任何关于此的参考。更改私有变量后,我想在 Dart 中创建一个私有 setter 来调用附加函数。

ViewState _state;

ViewState get state => _state;

set _state(value) {
  _state = value;
  notifyListeners();
}

我怎样才能做到这一点?

【问题讨论】:

    标签: dart flutter


    【解决方案1】:

    私有 setter 没有什么问题,只是命名的选择。

    正如你不能使用state 作为变量的名称,因为它是getter 的名称,你不能使用_state 作为变量和setter。

    这有点难看,但使用 __state 作为变量(并相应地更新 getter 和 setter)应该可以完成工作。

    编辑:正如 cmets 中所述,名称 __state 并不重要,它只需要是一个不被 getter/setter 采用的名称。带有 getter state 和 setter _state 的变量 _myState 也可以正常工作。

    【讨论】:

    • 不错的解决方法。双下划线不是我想教的,但你的回答确实解决了这个问题。我想我会坚持使用 _setState() 方法调用。谢谢,这将是有帮助的
    • 您不必使用双下划线。只要您将基础变量命名为其他名称(例如_rawState),它就应该可以工作。也就是说,有一个没有同名 getter 的 setter 是不寻常的,我认为单独的 _setState 方法会更清晰。
    【解决方案2】:

    Dart 不允许私人二传手,这是真的。你可以用你自己的私有函数破解它

    ViewState _state;
    
    ViewState get state => _state;
    
    void _changeState(value) {
      _state = value;
      notifyListeners();
    }
    

    这是我在DartPad 上的示例,您可以在其中进行一些实验。

    【讨论】:

    • 我已经这样做了,但我想使用等号运算符来设置值并执行其他逻辑。上面的答案给出了解决方法
    • 问题是分析器会抱怨这个:使用setter进行从概念上改变属性的操作。dartuse_setters_to_change_properties
    猜你喜欢
    • 2016-08-16
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多