你好,请我试图通过一个视频源从我创建的提供程序类.它的工作每隔一个地方,我用它像得到视频拇指等.但我试图通过视频源到我的视频小部件.当我选择的视频,它不更新,但如果我导航离开,回来的源将被更新.我希望它更新,因为我改变视频源.
以下是我目前正在使用的代码:
channel_provider.dart:
Map selectedChannel = {};
// Select channel
void selectChannel(Map channel) {
selectedChannel = channel;
saveRecentChannel(channel);
notifyListeners();
}
列出所有频道的主屏幕,还包含视频播放器
Consumer<ChannelProvider>(
builder: (context, channelProvider, _) =>
channelProvider.selectedChannel.isNotEmpty
? SizedBox(
height: context.height() / 3.8,
child: VideoPlayerBox(channelProvider.getSelectedVideo),
)
: Shimmer.fromColors(
baseColor: Colors.grey,
highlightColor: Colors.white,
child: SizedBox(
height: context.height() / 3.8,
child: Center(
child: Text(
'Loading...',
style: Theme.of(context).textTheme.headlineLarge,
),
),
),
),
),
视频播放器框小部件:
class _VideoPlayerBoxState extends State<VideoPlayerBox> {
late VideoPlayerController _controller;
ChewieController? _chewieController;
var _videoSource;
@override
void initState() {
_videoSource = widget.channel;
iniVideo();
super.initState();
}
Future<void> iniVideo() async {
log(_videoSource['link']);
log('hi');
_controller = VideoPlayerController.network(_videoSource['link']);
await _controller.initialize();
setState(() {
_chewieController = ChewieController(
videoPlayerController: _controller,
autoPlay: true,
isLive: true,
);
});
}
@override
void dispose() {
_controller.dispose();
_chewieController?.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return _chewieController != null
? SizedBox(
width: context.width(),
height: context.height(),
child: Chewie(controller: _chewieController!),
)
: SizedBox(
width: context.width(),
height: context.height(),
);
}
}
预期行为我希望频道源更新视频框中的使用时,点击频道.但它不它保持在initai视频源,但当我离开屏幕,并返回视频源现在将更新.
我想让它在飞行中更新。
1条答案
按热度按时间wqnecbli1#
有两件事可能导致这个问题。
1.你的供应商是不正确的,但我必须认为它是正确的,因为你没有显示它的完整代码。
1.你必须给予VideoPlayerBox一个密钥,你可以这样做:
如果您的供应商是正确的,这应该可以工作。也许您可以在这里看看:https://youtu.be/kn0EOS-ZiIc?t=313