【问题标题】:How do you write a setter for a single item in a list (not the whole list)?您如何为列表中的单个项目(而不是整个列表)编写设置器?
【发布时间】:2019-06-15 16:45:44
【问题描述】:

我的模型中有一个包含 bool 列表的类。在我的 UI 中,我想通过 setter 在列表中的单个项目中设置布尔状态(这样我也可以保存它)。我无法弄清楚语法(或者这是否是一个有效的做法)。

   ///This is OK
   set notificationDismissed(bool notificationDismissed){
     _notificationDismissed = notificationDismissed;
     saveParameterBoolean(_notificationDismissedKey, 
  _notificationDismissed);
    }
  bool get notificationDismissed => _notificationDismissed;


  ///This is OK too
  List<bool> get questionsAnswered => _questionsAnswered;
  set questionsAnswered(List<bool> questionsAnswered){
    _questionsAnswered = questionsAnswered;
    for(int i=0; i<_questionAnsweredParamKeys.length; i++ ){
      saveParameterBoolean(_questionAnsweredParamKeys[i], 
  _questionsAnswered[i]);
    }
    updateState();
  }

  ///This is not OK !!!! but should show what I want to do
  List<bool> get questionsAnswered[index] => _questionsAnswered[index];
  set questionsAnswered[index](bool questionsAnswered[index]){
    _questionsAnswered[index] = questionsAnswered[index];
    saveParameterBoolean(_questionAnsweredParamKeys[index], 
  _questionsAnswered[index]);
    updateState();
  }

我知道我在这里遗漏了一些明显的东西,非常感谢任何帮助

【问题讨论】:

    标签: list flutter dart setter getter


    【解决方案1】:

    getset 函数不能接受任何参数。最简单的方法是使用普通函数:

    bool getQuestionsAnswered(int index) =>  _questionsAnswered[index];
    
    void setQuestionsAnswered(int index, bool value) {
      _questionsAnswered[index] = value;
      saveParameterBoolean(_questionAnsweredParamKeys[index], _questionsAnswered[index]);
      updateState();
    }
    

    另一种选择是将_questionsAnsweredList 更改为实现operator [](获取元素)和operator []=(设置元素)的自定义类,然后您可以让它们执行随心所欲。

    【讨论】:

    • 太棒了,谢谢,我只是实现一个功能并继续前进:-)
    • 这不是真的! set 函数在 dart 中接受参数,但只有一个
    猜你喜欢
    • 1970-01-01
    • 2021-09-19
    • 2015-01-17
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 2015-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多