Flutter自定义歌词UI插件flutter_lyric_custom_ui的使用

Flutter自定义歌词UI插件flutter_lyric_custom_ui的使用

概述

flutter_lyric_custom_ui 是一个用于在 Flutter 中实现自定义歌词界面的插件。它支持高亮显示歌词、平滑动画、翻译歌词等功能,并允许开发者根据需求定制 UI。

功能特性

  • ✅ 高亮显示(增强版与普通版)
  • ✅ 翻译歌词
  • ✅ 平滑动画效果
  • ✅ 自定义 UI 和解析功能

展示

  1. 😊 在线演示(Web)

  2. 下载示例 APK:

  3. 运行示例

使用方法

1. 添加依赖

pubspec.yaml 文件中添加以下依赖:

dependencies:
  flutter_lyric_custom_ui: ^1.0.0

然后运行以下命令以获取依赖:

flutter pub get

2. 初始化插件

main.dart 文件中初始化 flutter_lyric_custom_ui 插件,并加载歌词文件。

import 'package:flutter/material.dart';
import 'package:flutter_lyric_custom_ui/flutter_lyric_custom_ui.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: LyricPage(),
    );
  }
}

class LyricPage extends StatefulWidget {
  @override
  _LyricPageState createState() => _LyricPageState();
}

class _LyricPageState extends State<LyricPage> {
  // 歌词控制器
  final LyricController _lyricController = LyricController();

  @override
  void initState() {
    super.initState();
    // 加载歌词文件
    _loadLyrics();
  }

  Future<void> _loadLyrics() async {
    // 从 assets 文件夹中加载歌词文件
    String lyricsContent = await rootBundle.loadString('assets/lyrics.txt');
    // 解析歌词
    _lyricController.parse(lyricsContent);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('自定义歌词 UI'),
      ),
      body: Center(
        child: LyricView(
          controller: _lyricController,
          // 自定义 UI
          builder: (BuildContext context, LyricItem item, double progress) {
            return Container(
              padding: EdgeInsets.all(16),
              decoration: BoxDecoration(
                color: Colors.grey[200],
                borderRadius: BorderRadius.circular(8),
              ),
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  // 显示当前时间
                  Text(
                    '当前时间: ${item.time}',
                    style: TextStyle(fontSize: 14),
                  ),
                  SizedBox(height: 8),
                  // 高亮显示当前歌词
                  Text(
                    item.text,
                    style: TextStyle(
                      fontSize: 20,
                      fontWeight: FontWeight.bold,
                      color: progress > 0.5 ? Colors.blue : Colors.black,
                    ),
                  ),
                ],
              ),
            );
          },
        ),
      ),
    );
  }
}

3. 创建歌词文件

assets/lyrics.txt 文件中添加以下歌词数据:

1|00:00.00|前奏
2|00:05.00|这是第一句歌词
3|00:10.00|这是第二句歌词
4|00:15.00|这是第三句歌词

确保在 pubspec.yaml 文件中声明 assets 文件夹:

flutter:
  assets:
    - assets/lyrics.txt

更多关于Flutter自定义歌词UI插件flutter_lyric_custom_ui的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter自定义歌词UI插件flutter_lyric_custom_ui的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


flutter_lyric_custom_ui 是一个用于在 Flutter 应用中显示歌词的自定义 UI 插件。使用这个插件,你可以轻松地在应用中实现歌词的显示、滚动、高亮等功能。以下是如何使用 flutter_lyric_custom_ui 的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 flutter_lyric_custom_ui 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_lyric_custom_ui: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入插件

在你的 Dart 文件中导入 flutter_lyric_custom_ui 插件:

import 'package:flutter_lyric_custom_ui/flutter_lyric_custom_ui.dart';

3. 使用 LyricWidget

LyricWidgetflutter_lyric_custom_ui 插件中用于显示歌词的核心组件。你可以通过以下方式使用它:

class LyricsPage extends StatelessWidget {
  final List<Lyric> lyrics = [
    Lyric(text: "Hello, world!", position: 0),
    Lyric(text: "This is a test lyric.", position: 5000),
    Lyric(text: "Flutter is awesome!", position: 10000),
  ];

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Lyrics'),
      ),
      body: LyricWidget(
        lyrics: lyrics,
        currentPosition: 5000, // 当前播放位置
        onLyricSelected: (Lyric lyric) {
          print('Lyric selected: ${lyric.text}');
        },
      ),
    );
  }
}

4. 自定义歌词样式

你可以通过 LyricWidget 的参数来自定义歌词的样式,例如字体大小、颜色、对齐方式等:

LyricWidget(
  lyrics: lyrics,
  currentPosition: 5000,
  onLyricSelected: (Lyric lyric) {
    print('Lyric selected: ${lyric.text}');
  },
  textStyle: TextStyle(
    fontSize: 16,
    color: Colors.black,
  ),
  highlightTextStyle: TextStyle(
    fontSize: 18,
    color: Colors.red,
    fontWeight: FontWeight.bold,
  ),
  textAlign: TextAlign.center,
);

5. 处理歌词滚动

LyricWidget 会自动根据 currentPosition 滚动到当前播放的歌词行。你可以通过更新 currentPosition 来实现歌词的实时滚动:

class LyricsPage extends StatefulWidget {
  [@override](/user/override)
  _LyricsPageState createState() => _LyricsPageState();
}

class _LyricsPageState extends State<LyricsPage> {
  int currentPosition = 0;
  final List<Lyric> lyrics = [
    Lyric(text: "Hello, world!", position: 0),
    Lyric(text: "This is a test lyric.", position: 5000),
    Lyric(text: "Flutter is awesome!", position: 10000),
  ];

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Lyrics'),
      ),
      body: Column(
        children: [
          LyricWidget(
            lyrics: lyrics,
            currentPosition: currentPosition,
            onLyricSelected: (Lyric lyric) {
              print('Lyric selected: ${lyric.text}');
            },
          ),
          ElevatedButton(
            onPressed: () {
              setState(() {
                currentPosition += 1000;
              });
            },
            child: Text('Next'),
          ),
        ],
      ),
    );
  }
}

6. 处理歌词选择事件

当用户点击某一行歌词时,onLyricSelected 回调会被触发。你可以在这个回调中处理用户选择的歌词:

LyricWidget(
  lyrics: lyrics,
  currentPosition: currentPosition,
  onLyricSelected: (Lyric lyric) {
    print('Lyric selected: ${lyric.text}');
    // 例如:跳转到歌词对应的播放位置
    setState(() {
      currentPosition = lyric.position;
    });
  },
);

7. 其他功能

flutter_lyric_custom_ui 还提供了其他一些功能,例如:

  • 歌词对齐方式:通过 textAlign 参数设置歌词的对齐方式。
  • 歌词滚动动画:通过 scrollAnimationDuration 参数设置歌词滚动的动画时长。
  • 歌词行间距:通过 lineSpacing 参数设置歌词行之间的间距。

8. 完整示例

以下是一个完整的示例,展示了如何使用 flutter_lyric_custom_ui 插件:

import 'package:flutter/material.dart';
import 'package:flutter_lyric_custom_ui/flutter_lyric_custom_ui.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: LyricsPage(),
    );
  }
}

class LyricsPage extends StatefulWidget {
  [@override](/user/override)
  _LyricsPageState createState() => _LyricsPageState();
}

class _LyricsPageState extends State<LyricsPage> {
  int currentPosition = 0;
  final List<Lyric> lyrics = [
    Lyric(text: "Hello, world!", position: 0),
    Lyric(text: "This is a test lyric.", position: 5000),
    Lyric(text: "Flutter is awesome!", position: 10000),
  ];

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Lyrics'),
      ),
      body: Column(
        children: [
          LyricWidget(
            lyrics: lyrics,
            currentPosition: currentPosition,
            onLyricSelected: (Lyric lyric) {
              print('Lyric selected: ${lyric.text}');
              setState(() {
                currentPosition = lyric.position;
              });
            },
            textStyle: TextStyle(
              fontSize: 16,
              color: Colors.black,
            ),
            highlightTextStyle: TextStyle(
              fontSize: 18,
              color: Colors.red,
              fontWeight: FontWeight.bold,
            ),
            textAlign: TextAlign.center,
          ),
          ElevatedButton(
            onPressed: () {
              setState(() {
                currentPosition += 1000;
              });
            },
            child: Text('Next'),
          ),
        ],
      ),
    );
  }
}
回到顶部