我希望使用VideoPlayer在屏幕上播放视频。视频需要从API中获取。下面是我的initState的外观:
@override
void initState() {
super.initState();
getCandidateProfileVideo();
}
我在有状态小部件类中有以下两个后期变量和一个全局变量:
late VideoPlayerController _controller;
late Future<void> _initializeVideoPlayerFuture;
String videoUrl = "";
getCandidateProfileVideo()实现如下:
getCandidateProfileVideo() async {
// await call to get video from REST API, and store the response in the variable videoUrl
_controller = VideoPlayerController.network(
videoUrl,
);
_initializeVideoPlayerFuture = _controller.initialize();
_controller.setLooping(true);
_controller.setVolume(1.0);
}
问题
当我尝试加载屏幕时,出现以下问题:LateInitializationError:字段“_initializeVideoPlayerFuture@75490850”尚未初始化。
申请
我的代码中有什么错误导致了这个问题,以及如何解决它?
2条答案
按热度按时间6ju8rftf1#
在异步函数中初始化对象时,不应该使用
late
关键字。在getCandidateProfileView()中初始化视频播放器对象是异步的。当第一帧被flutter渲染时,video_player变量不会被初始化。这就是它抛出late initialization error
的原因。要解决这个问题,可以将video_player变量设置为Nullable类型。无论在哪里使用VideoPlayerController
_controller
,请确保使用?.
或“!.”可空运算符。例如:
有关更多信息,请参阅dart's sound null safety。
yeotifhr2#
添加到Just a Person的答案:
如果你想继续使用你的
async
函数,你可以考虑使用FutureBuilder
小部件,它将调用你放在future
属性中的async
函数,并在函数返回某个值时更新snapshot
示例:
有关
FutureBuilder
的详细信息,请参阅official documentation