我在看有关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/