Как получить текущий экземпляр класса и присвоить конечному свойству `this` в Dart - PullRequest
0 голосов
/ 17 декабря 2018

Я следовал этой кодовой лаборатории , чтобы изучить Дарт / Флаттер.Я попытался отредактировать некоторый источник, чтобы сделать этот код лучше.

class ChatScreenState extends State<ChatScreen> with TickerProviderStateMixin {
  final List<ChatMessageView> _chatMessageViewList = <ChatMessageView>[];
  final TextEditingController _textController = new TextEditingController();

  final AnimationController _chatMessageAnimationController;

  bool _isComposing = false;

  ChatScreenState() {
    _chatMessageAnimationController = new AnimationController(
      duration: new Duration(microseconds: 700),
      vsync: this,
    );
  }

...
}

Я планировал повторно использовать экземпляр AnimationController, потому что мне нужно создать его столько же, сколько и в списке.Тем не менее, я не могу использовать ключевое слово this в любом случае.Я понял это сообщение об ошибке, но мне интересно, есть ли способы присвоить ключевое слово this конечному свойству текущего класса?

enter image description here

1 Ответ

0 голосов
/ 17 декабря 2018

final в

final AnimationController _chatMessageAnimationController;

и

_chatMessageAnimationController = ...

противоречат друг другу.final в полях экземпляра означает, что его можно инициализировать только при создании объекта.Это означает, что даже до выполнения тела конструктора.

Вы можете использовать только

  • параметры конструктора, такие как this._chatMessageAnimationController
  • списки инициализаторов ChatScreenState() : _chatMessageAnimationController = ... {
  • инициализаторы полей final AnimationController _chatMessageAnimationController = ...;

для присвоения значения такому полю.К сожалению, ни один из этих методов не позволяет ссылаться на this, потому что инициализация объекта еще не завершена.

...