Редактировать внешнюю переменную с помощью конструктора классов - PullRequest
0 голосов
/ 14 сентября 2018

как мне отредактировать переменную chattile в конструкторе 'tambah', как показано ниже:

class ChatCardList extends StatefulWidget {
  List<ChatTile> chattile; //EDIT THIS
  ChatCardList({Key key, this.chattile}) : super(key: key);
  Future<void> _onSocketInfo_newMessage(dynamic data) async {
    ChatCardList _data = new ChatCardList.tambah(data);
  }

  ChatCardList.tambah(String message) {
    print("PESAN BARU : " + message);
   this.chattile.add(message); //PUSH OBJECT
  }
  print(chattile); //notting added
  @override
  _ChatCardListState createState() => new _ChatCardListState(chattile:chattile);
}

почему это произошло?мой скрипт неверен или в моем коде чего-то не хватает?

большое спасибо,

1 Ответ

0 голосов
/ 14 сентября 2018

Не могли бы вы вернуться и проверить, что это именно тот код, который вызывает вашу проблему. Код, показанный здесь, не будет компилироваться вообще, поэтому трудно сказать, где настоящая проблема. В качестве альтернативы, опишите подробно, чего вы на самом деле пытаетесь достичь.

Конструктор ChatCardList.tambah(String message) { не инициализирует chattile, поэтому значение this.chattile в теле должно быть null. Вызов add на это бросит. В противном случае этот код прекрасно работает, это то, как вы добавляете в список, хранящийся в переменной this chattile.

Метод Future<void> _onSocketInfo_newMessage(dynamic data) async { создает новый ChatCardList, используя CharCardList.tambah, но никогда ничего с ним не делает (он не возвращает значение), поэтому никто никогда не увидит этот объект или его значение chattile.

Кроме того, код print(chattile); находится вне какой-либо функции или тела конструктора, поэтому он действительно объявляет абстрактный метод с именем print, который принимает параметр с именем chattile. Поскольку ваш класс не является абстрактным, это должно вызвать ошибку во время компиляции.

Итак, один из способов переписать вашу программу может быть:

class ChatCardList extends StatefulWidget {
  List<ChatTile> chattile; //EDIT THIS
  ChatCardList({Key key, this.chattile}) : super(key: key);
  Future<void> _onSocketInfo_newMessage(dynamic data) {
    String message = data;
    this.chattile.add(message);
  }

  @override
  _ChatCardListState createState() => new _ChatCardListState(chattile: chattile);
}

Этот код не вводит конструктор tambah, но вместо этого обновляет список chattile немедленно в методе _onSocketInfo_newMessage. Этот метод все еще нужно вызывать откуда-то.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...