Flutter音乐元数据获取插件spotify_metadata的使用

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

Flutter音乐元数据获取插件spotify_metadata的使用


简介

这是一个轻量级的包,用于从歌曲或播放列表的URL获取基本的元数据。


安装

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

dependencies:
  flutter:
    sdk: flutter
  spotify_metadata: ^1.0.0

然后运行 flutter pub get 命令来安装该插件。


使用方法

首先,我们需要调用插件的方法来获取音乐元数据。以下是一个完整的示例代码:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo Home Page',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, required this.title}) : super(key: key);
  final String title;

  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  static const String hintText = "粘贴链接到这里...";
  static SpotifyMetadata? metaData;

  void _fetchMetadata(String link) async {
    try {
      metaData = await SpotifyApi.getData(link);
    } catch (e) {
      metaData = null;
    }
    setState(() {});
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      resizeToAvoidBottomInset: false,
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Padding(
        padding: const EdgeInsets.all(15.0),
        child: Column(
          mainAxisSize: MainAxisSize.min,
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: [
            TextField(
              onSubmitted: (e) => _fetchMetadata(e),
              decoration: InputDecoration(hintText: hintText),
            ),
            metaData == null
                ? Container()
                : Container(
                    child: Column(
                      children: [
                        Image.network(metaData!.thumbnailUrl),
                        Divider(),
                        Text(metaData!.title),
                        Divider(color: Colors.transparent),
                        Text(
                          '''提供者名称:  ${metaData!.providerName} \n\n提供者链接:${metaData!.providerUrl}
                          ''',
                        ),
                      ],
                    ),
                  ),
          ],
        ),
      ),
    );
  }
}

示例代码

以下是完整的示例代码,您可以直接复制并在您的项目中使用:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo Home Page',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, required this.title}) : super(key: key);
  final String title;

  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  static const String hintText = "粘贴链接到这里...";
  static SpotifyMetadata? metaData;

  void _fetchMetadata(String link) async {
    try {
      metaData = await SpotifyApi.getData(link);
    } catch (e) {
      metaData = null;
    }
    setState(() {});
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      resizeToAvoidBottomInset: false,
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Padding(
        padding: const EdgeInsets.all(15.0),
        child: Column(
          mainAxisSize: MainAxisSize.min,
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: [
            TextField(
              onSubmitted: (e) => _fetchMetadata(e),
              decoration: InputDecoration(hintText: hintText),
            ),
            metaData == null
                ? Container()
                : Container(
                    child: Column(
                      children: [
                        Image.network(metaData!.thumbnailUrl),
                        Divider(),
                        Text(metaData!.title),
                        Divider(color: Colors.transparent),
                        Text(
                          '''提供者名称:  ${metaData!.providerName} \n\n提供者链接:${metaData!.providerUrl}
                          ''',
                        ),
                      ],
                    ),
                  ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter音乐元数据获取插件spotify_metadata的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter音乐元数据获取插件spotify_metadata的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用spotify_metadata插件来获取音乐元数据的示例代码。这个插件允许你获取Spotify上音乐的详细信息,比如专辑封面、艺术家信息等。

首先,确保你已经在pubspec.yaml文件中添加了spotify_metadata依赖:

dependencies:
  flutter:
    sdk: flutter
  spotify_metadata: ^latest_version  # 请替换为最新的版本号

然后,运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中,你可以按照以下步骤使用spotify_metadata插件:

  1. 导入插件

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

import 'package:spotify_metadata/spotify_metadata.dart';
  1. 初始化插件并获取元数据

下面是一个完整的示例,展示了如何使用该插件获取一首歌曲的元数据:

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

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  SpotifyMetadata? _spotifyMetadata;
  String? _trackName;
  String? _artistName;
  String? _albumName;
  Uri? _albumCoverUrl;

  @override
  void initState() {
    super.initState();
    _initializeSpotifyMetadata();
  }

  Future<void> _initializeSpotifyMetadata() async {
    _spotifyMetadata = SpotifyMetadata();

    // 假设我们想要获取歌曲 "Shape of You" by Ed Sheeran 的元数据
    String trackId = '6LkQ5Gc75oV77cDu8ecjJP';  // 替换为实际的歌曲ID

    try {
      Track track = await _spotifyMetadata!.getTrack(trackId);
      setState(() {
        _trackName = track.name;
        _artistName = track.artists!.first.name;
        _albumName = track.album!.name;
        _albumCoverUrl = track.album!.images!.first.url;
      });
    } catch (e) {
      print('Error fetching track metadata: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Spotify Metadata Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              if (_trackName != null) Text('Track: $_trackName'),
              if (_artistName != null) Text('Artist: $_artistName'),
              if (_albumName != null) Text('Album: $_albumName'),
              if (_albumCoverUrl != null)
                Image.network(
                  _albumCoverUrl!.toString(),
                  width: 200,
                  height: 200,
                ),
            ],
          ),
        ),
      ),
    );
  }
}

在这个示例中,我们首先初始化SpotifyMetadata实例,然后获取指定歌曲ID的元数据。获取到的元数据包括歌曲名称、艺术家名称、专辑名称以及专辑封面图片的URL。我们使用setState方法更新UI,以显示这些信息。

请注意,你需要替换示例中的歌曲ID(trackId)为你实际想要获取元数据的歌曲ID。

这个示例展示了如何使用spotify_metadata插件在Flutter应用中获取和处理Spotify音乐的元数据。希望这对你有所帮助!

回到顶部