大佬教程收集整理的这篇文章主要介绍了Flutter 实现网易云音乐字幕,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
先来一张效果图:
目前市面上有很多种字幕格式,比如srt,ssa,ass(文本形式)和idx+sub(图形格式),但不管哪一种格式都会包含2个属性:时间戳和字幕内容,格式如下:
@H_489_18@00:00 歌词:
00:25 我要穿越这片沙漠
00:28 找寻真的自我
00:30 身边只有一匹骆驼陪我
00:34 这片风儿吹过
00:36 那片云儿飘过
上面字幕的意思是:在25秒的时候跳转到下一句,在28秒的时候跳转到下一句...
了解了字幕文件的形式,字幕实现起来就比较简单了,使用ListWheelScrollView
控件,然后通过ScrollController
在合适的时机进行滚动,使当前字幕始终保持在屏幕中间。
loadData() async {
var jsonStr =
await DefaultAssetBundle.of(context).loadString('assets/subtitle.txt');
var list = jsonStr.split(RegExp('\n'));
list.forEach((f) {
if (f.isnotEmpty) {
var r = f.split(RegExp(' '));
if (r.length >= 2) {
_subtitleList.add(SubtitleEntry(r[0],r[1]));
}
}
});
setState(() {});
}
设置字幕控件及背景图片:
@H_489_18@@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('弹幕'),),body: Stack(
children: <Widget>[
Positioned.fill(
child: Image.asset(
'assets/imgs/BACkground.png',fit: BoxFit.cover,)),Positioned.fill(
child: Subtitle(
_subtitleList,SELEctedTextStyle: TextStyle(color: Colors.white,fontSize: 18),unSELEctedTextStyle: TextStyle(
color: Colors.black.withOpacity(.6),diameterRatio: 5,itemExtent: 45,))
],);
}
字幕控件的构建:
@H_489_18@@override
Widget build(BuildContext context) {
if (widget.data == null || widget.data.length == 0) {
return Container();
}
return ListWheelScrollView.useDelegate(
controller: _controller,diameterRatio: widget.diameterRatio,itemExtent: widget.itemExtent,childDelegate: ListWheelChildBuilderDelegate(
builder: (context,indeX) {
return Container(
alignment: Alignment.center,child: Text(
'${widget.data[index].content}',style: _currenTindex == index
? widget.SELEctedTextStyle
: widget.unSELEctedTextStyle,);
},childCount: widget.data.length),);
}
字幕控件封装了选中字体和未选中字体样式参数,用法如下:
@H_489_18@Subtitle(
_subtitleList,unSELEctedTextStyle: TextStyle(
color: Colors.black.withOpacity(.6),)
)
效果如下:
Subtitle(
_subtitleList,)
下面是1和5的对比:
Github地址:https://github.com/781238222/flutter-do/tree/master/flutter_subtitle_example
Github地址:https://github.com/781238222/flutter-do
170+组件详细用法:http://laomengit.com
如果你对Flutter还有疑问或者技术方面的疑惑,欢迎加入Flutter交流群(微信:laomENGIt)。
同时也欢迎关注我的Flutter公众号【老孟程序员】,公众号首发Flutter的相关内容。
Flutter生态建设离不开你我他,需要大家共同的努力,点赞也是其中的一种,如果文章帮助到了你,希望点个赞。
以上是大佬教程为你收集整理的Flutter 实现网易云音乐字幕全部内容,希望文章能够帮你解决Flutter 实现网易云音乐字幕所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。