flutter - dart和Object.methodName()之间的区别

标签 flutter dart async-await video-player

我在看有关image_picker和video_player库的this文章,并且看到了下面的代码:

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

他们为什么使用..initialize()而不是.initialize()?
我试图在项目中使用相同的代码,但是如果我使用..initialize(),IDE不允许我使用await关键字。

'await' applied to 'VideoPlayerController', which is not a 'Future'.dart(await_only_futures)



但是将await关键字与.initialize()一起使用没有问题

那么在此示例中,使用..initialize()和.initialize()有什么区别?

谢谢

最佳答案

它称为级联符号,在Dart语言导览中有记录:
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对象。

关于flutter - dart和Object.methodName()之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60970349/

相关文章:

flutter - 关闭小部件时如何将 : Remove separator from ListView. 分开?

dart - 在 Flutter iconButton 中点击 appBar 但错误来了

c# - Task.Delay 是否启动一个新线程?

flutter - Dart 。带参数的枚举

flutter - Flutter ChangeNotifierProvider构建器已弃用

flutter - 如何在 Dart 中返回 Future<T> 结果

javascript - 当 JavaScript 是单线程语言时,如何在 JavaScript 中实现异步非阻塞代码?

node.js - AWS Timestream - SDK V3 Nodejs,TimestreamWriteClient.send() - TypeError : command. resolveMiddleware 不是函数。如何解决这个问题?

flutter - 如何用 flutter 创建动画表情符号雨?

flutter - 调用 Firebase.initializeApp() 返回 '(PlatformException(null-error, Host platform returned null value for non-null return value., null, null))'