Flutter   发布时间:2022-05-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Flutter 实现网易云音乐字幕大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

Flutter 实现网易云音乐字幕

先来一张效果图:

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在合适的时机进行滚动,使当前字幕始终保持在屏幕中间。

解析字幕文件获取字幕数据:

@H_489_18@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),) )

效果如下:

Flutter 实现网易云音乐字幕

设置圆筒直径和主轴渲染窗口的尺寸的比,认值是2,越小表示圆筒越圆

@H_489_18@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,请注明来意。
标签: