Разница между Object.methodName () и Object..methodName () dart - PullRequest
0 голосов
/ 01 апреля 2020

Я просматривал эту статью о библиотеках image_picker и video_player и увидел следующий код:

_videoPlayerController = VideoPlayerController.file(_video)..initialize().then((_) {
   setState(() { });
   _videoPlayerController.play();
 });

Почему они используют ..initialize () вместо .initialize ( ) Я пытался использовать тот же код в своем проекте, но IDE не позволяет мне использовать ключевое слово await, если я использую ..initialize ()

'await', примененный к 'VideoPlayerController', который не является a 'Future'.dart (await_only_futures)

, но нет проблем с использованием ключевого слова await с .initialize ()

Так в чем разница между использованием ..initialize ( ) и .initialize () в этом примере?

Спасибо

1 Ответ

1 голос
/ 01 апреля 2020

Это называется каскадной нотацией и задокументировано в языковой экскурсии по дартсу: https://dart.dev/guides/language/language-tour#cascade -notation-

Причина, по которой она используется в вашем примере, заключается в том, что автор этого В примере требуется, чтобы переменная _videoPlayerController была ссылкой на объект, созданный VideoPlayerController.file(_video), а не Future, возвращаемым из then().

Вы также можете написать этот код следующим образом:

_videoPlayerController = VideoPlayerController.file(_video);

_videoPlayerController.initialize().then((_) {
   setState(() { });
   _videoPlayerController.play();
 });

Поэтому причина, по которой вы не можете ждать VideoPlayerController.file(_video)..initialize().then(, заключается в том, что результатом этой строки является не Future, а VideoPlayerController объект.

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