Как вы пишете установщик для одного элемента в списке (не весь список)? - PullRequest
1 голос
/ 15 июня 2019

У меня есть класс в моей модели, который включает список bool. Из моего пользовательского интерфейса я хочу установить состояние bool только для одного элемента в списке с помощью установщика (чтобы я мог также сохранить его). Я не могу понять синтаксис (или это допустимо).

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

Я знаю, что я упускаю что-то очевидное здесь, любая помощь очень ценится

1 Ответ

0 голосов
/ 16 июня 2019
Функции

get и set не могут принимать аргументы. Самый простой подход - использовать обычные функции:

bool getQuestionsAnswered(int index) =>  _questionsAnswered[index];

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

Другой альтернативой может быть изменение _questionsAnswered с List на пользовательский класс, который реализует operator [] (для получения элемента) и operator []= (для установки элемента), а затем вы можете заставить их делать все, что вы хотите.

...