我有以下代码,该代码是综合浏览量,其中包含n个视频。我正在使用Chewie插件。
Widget build(BuildContext context) {
PageController controller =
PageController(viewportFraction: 1, keepPage: true);
var chewieController = new ChewieListItem(
videoPlayerController: VideoPlayerController.network(items[0].url));
chewieController.videoPlayerController.play();
return Scaffold(
backgroundColor: Colors.black,
body: Stack(children: <Widget>[
Align(
alignment: Alignment
.center, // Align however you like (i.e .centerRight, centerLeft)
child: PageView.builder(
scrollDirection: Axis.vertical,
itemCount: items.length,
controller: controller,
onPageChanged: (index) => {
chewieController.videoPlayerController = VideoPlayerController.network(items[index].url),
chewieController.videoPlayerController.play()
},
itemBuilder: (BuildContext context, int itemIndex) {
return new Stack(children: <Widget>[
Align(
alignment: Alignment
.center, // Align however you like (i.e .centerRight, centerLeft)
child: //Text(item.url)),
chewieController),
new Positioned.fill(
child: Column(
children: <Widget>[
Expanded(
child: Row(
mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.end,
children: <Widget>[
new VideoDescription(video: items[itemIndex]),
new ActionsToolbar(video: items[itemIndex])
]))
],
),
)
]);
},
)
),
Align(
alignment: Alignment.bottomCenter,
child: BottomToolbar(),
),
]));
}
当我移至下一页时,出现以下错误:
The following assertion was thrown while dispatching notifications for VideoPlayerController:
setState() or markNeedsBuild() called when widget tree was locked.
This VideoPlayer widget cannot be marked as needing to build because the framework is locked.
The widget on which setState() or markNeedsBuild() was called was: VideoPlayer
state: _VideoPlayerState#6babd
最初,我已经对chewie进行了硬编码,以便在页面移动时播放列表中的第一个视频,然后播放下一个视频。我想做的是一次又一次地对所有视频使用同一个chewie控制器,而不是为每个视频都使用新的chewie控制器。