Flutter歌词显示插件lrc的使用

发布于 1周前 作者 gougou168 来自 Flutter

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

1 回复

更多关于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();
  }
}

在这个示例中,我们做了以下几件事:

  1. 加载LRC歌词文件:使用rootBundle.loadString方法从assets目录中加载LRC歌词文件。
  2. 创建LyricController:使用加载的歌词创建一个LyricController实例。
  3. 显示歌词:使用LyricWidget显示歌词,并根据当前播放时间更新显示的歌词。
  4. 模拟播放控制:添加了一个浮动操作按钮(FAB),用于模拟播放下一秒的功能,从而更新显示的歌词。

请注意,你需要将你的LRC歌词文件放在assets目录下,并在pubspec.yaml文件中声明它:

flutter:
  assets:
    - assets/lyrics.lrc

这个示例提供了一个基础框架,你可以根据实际需求进一步扩展,比如添加真正的播放控制、滚动歌词视图等。

回到顶部