Flutter歌词显示插件lrc的使用
Flutter歌词显示插件lrc的使用
Features
- 支持解析LRC字符串或从头创建新的LRC对象。
- 提供简单直观的操作方法。
- 为特定于LRC的字符串添加了便捷的扩展方法。
- 可以根据设定的时间间隔流式输出歌词。
Usage
Installing
在pubspec.yaml
文件中添加依赖:
dependencies:
lrc: ^latest_version # 替换为最新版本号
然后执行 flutter pub get
来安装依赖。
Importing
在Dart代码中引入包:
import 'package:lrc/lrc.dart';
Parsing
此包仅接受字符串作为输入,因此对于文件操作,需要先将文件内容读取为字符串再进行解析。以下是解析LRC字符串的例子:
String unparsedLrc = """
[ti:Never Gonna Give You Up]
[ar:Rick Astley]
[la:en]
[00:18.78]We're no strangers to love
[00:22.83]You know the rules and so do I
[00:27.11]A full commitment's what I'm thinking of
[00:31.25]You wouldn't get this from any other guy
""";
// 使用静态方法解析
Lrc parsedLrc = Lrc.parse(unparsedLrc);
// 或者使用扩展方法
Lrc parsedLrcExtension = unparsedLrc.toLrc();
如果提供的字符串不是有效的LRC格式,则会抛出FormatException
异常。可以使用以下方式检查字符串是否为有效的LRC格式:
bool isValid = Lrc.isValid(unparsedLrc);
// 或者使用扩展属性
bool isValidExtension = unparsedLrc.isValidLrc;
Creating
可以通过创建一个新的Lrc
对象来生成LRC文件。构造函数接受多个参数,包括但不限于类型、歌词列表等。例如:
Lrc customLrc = Lrc(
type: LrcTypes.simple,
lyrics: [
LrcLine(
timestamp: Duration(seconds: 18, milliseconds: 780),
lyrics: "We're no strangers to love",
),
// 添加更多行...
],
artist: "Rick Astley",
title: "Never Gonna Give You Up",
language: "en"
);
Formatting
将Lrc
对象格式化为字符串以便保存到文件中:
String formattedLrc = parsedLrc.format();
同样地,也可以单独格式化一行歌词:
String singleLineFormatted = someLrcLine.formattedLine;
Streaming
通过订阅stream
属性,可以在指定时间点逐行输出歌词:
void streamLyrics(Lrc lrc) async {
await for (LrcStream lineStream in lrc.stream) {
print(lineStream.current.lyrics); // 输出当前歌词行
}
}
示例Demo
下面是一个完整的示例demo,它展示了如何加载、解析并按照时间顺序打印歌词:
import 'package:flutter/material.dart';
import 'package:lrc/lrc.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Flutter LRC Demo')),
body: Center(child: LyricsDisplay()),
),
);
}
}
class LyricsDisplay extends StatefulWidget {
@override
_LyricsDisplayState createState() => _LyricsDisplayState();
}
class _LyricsDisplayState extends State<LyricsDisplay> {
String currentLyric = '';
void startStreaming() async {
String song = """
[ti:Never Gonna Give You Up]
[ar:Rick Astley]
[la:en]
[00:18.78]We're no strangers to love
[00:22.83]You know the rules and so do I
[00:27.11]A full commitment's what I'm thinking of
[00:31.25]You wouldn't get this from any other guy
""";
Lrc lrc = Lrc.parse(song);
await for (LrcStream lineStream in lrc.stream) {
setState(() {
currentLyric = lineStream.current.lyrics;
});
// 模拟等待直到下一行歌词出现
await Future.delayed(Duration(milliseconds: 100));
}
}
@override
void initState() {
super.initState();
startStreaming();
}
@override
Widget build(BuildContext context) {
return Text(currentLyric, style: TextStyle(fontSize: 24));
}
}
该示例创建了一个简单的Flutter应用,当应用启动时,它会开始解析并流式处理歌词,每经过一定时间就更新界面上显示的歌词文本。
更多关于Flutter歌词显示插件lrc的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter歌词显示插件lrc的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中实现歌词显示功能,你可以使用flutter_lyric
这个插件。这个插件专门用于处理和显示LRC歌词文件。以下是一个简单的示例,展示如何在Flutter应用中使用flutter_lyric
插件来显示歌词。
首先,确保你已经在pubspec.yaml
文件中添加了flutter_lyric
依赖:
dependencies:
flutter:
sdk: flutter
flutter_lyric: ^最新版本号 # 请替换为实际的最新版本号
然后运行flutter pub get
来安装依赖。
接下来,创建一个简单的Flutter应用,并在其中使用flutter_lyric
插件。以下是一个完整的示例代码:
import 'package:flutter/material.dart';
import 'package:flutter_lyric/flutter_lyric.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Lyric Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: LyricDemoPage(),
);
}
}
class LyricDemoPage extends StatefulWidget {
@override
_LyricDemoPageState createState() => _LyricDemoPageState();
}
class _LyricDemoPageState extends State<LyricDemoPage> {
LyricController? _lyricController;
@override
void initState() {
super.initState();
// 加载LRC歌词文件(这里假设你有一个名为"lyrics.lrc"的文件在assets目录下)
_loadLyrics();
}
void _loadLyrics() async {
final lyrics = await rootBundle.loadString('assets/lyrics.lrc');
_lyricController = LyricController(lyric: lyrics);
// 设置当前播放时间(这里假设从0秒开始)
_lyricController?.seekTo(Duration.zero);
// 监听当前播放时间的变化,以便更新显示的歌词
_lyricController?.addListener(() {
setState(() {});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Lyric Demo'),
),
body: Center(
child: _lyricController != null
? LyricWidget(
controller: _lyricController!,
style: TextStyle(fontSize: 20, color: Colors.black),
highlightStyle: TextStyle(fontSize: 24, color: Colors.red),
)
: CircularProgressIndicator(),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
// 模拟播放下一秒
if (_lyricController != null) {
_lyricController!.seekTo(_lyricController!.currentTime.add(Duration(seconds: 1)));
}
},
tooltip: 'Next Second',
child: Icon(Icons.forward),
),
);
}
@override
void dispose() {
_lyricController?.dispose();
super.dispose();
}
}
在这个示例中,我们做了以下几件事:
- 加载LRC歌词文件:使用
rootBundle.loadString
方法从assets
目录中加载LRC歌词文件。 - 创建
LyricController
:使用加载的歌词创建一个LyricController
实例。 - 显示歌词:使用
LyricWidget
显示歌词,并根据当前播放时间更新显示的歌词。 - 模拟播放控制:添加了一个浮动操作按钮(FAB),用于模拟播放下一秒的功能,从而更新显示的歌词。
请注意,你需要将你的LRC歌词文件放在assets
目录下,并在pubspec.yaml
文件中声明它:
flutter:
assets:
- assets/lyrics.lrc
这个示例提供了一个基础框架,你可以根据实际需求进一步扩展,比如添加真正的播放控制、滚动歌词视图等。