Flutter音乐播放插件jiosaavn_wrapper的使用

Flutter音乐播放插件jiosaavn_wrapper的使用

本文将详细介绍如何在Flutter项目中使用jiosaavn_wrapper插件来实现音乐播放功能。通过简单的代码示例,您可以快速上手并集成该插件到您的项目中。


环境准备

在开始之前,请确保您已经配置好Flutter开发环境,并且安装了以下依赖:

  • Flutter SDK
  • Dart SDK

此外,在pubspec.yaml文件中添加jiosaavn_wrapper依赖:

dependencies:
  jiosaavn_wrapper: ^版本号
  cached_network_image: ^版本号

运行flutter pub get以获取依赖。


使用步骤

1. 初始化项目

创建一个新的Flutter项目,并在lib/main.dart中编写代码。

import 'package:flutter/material.dart';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/cupertino.dart';
import 'package:jiosaavn_wrapper/jiosaavn_wrapper.dart';
import 'package:jiosaavn_wrapper/modals/playlist.dart';
import 'package:jiosaavn_wrapper/modals/search_result.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'JioSaavnWrapper Example App',
      home: HomeScreen(),
    );
  }
}

2. 构建UI界面

我们将构建一个简单的音乐播放界面,包含搜索功能和热门歌曲列表。

搜索功能

class HomeScreen extends StatefulWidget {
  const HomeScreen({Key? key}) : super(key: key);

  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  bool searching = false;
  String searchQuery = '';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: searching ? Colors.white : null,
        title: !searching
            ? Text('Awesome Music')
            : CupertinoSearchTextField(
                onChanged: (searchQuery) {
                  setState(() => this.searchQuery = searchQuery.toLowerCase());
                },
              ),
        actions: [
          IconButton(
            onPressed: () {
              setState(() => searching = !searching);
            },
            icon: Icon(
              searching ? Icons.cancel_outlined : Icons.search,
              color: searching ? Colors.black : null,
            ),
          )
        ],
      ),
      body: Container(
        margin: EdgeInsets.symmetric(horizontal: 8, vertical: 4),
        child: searching
            ? searchQuery.isEmpty
                ? Center(
                    child: Text('搜索 Something e.g. 歌曲名或歌手名...'),
                  )
                : _buildSearchList()
            : _buildTopSongs(),
      ),
    );
  }

搜索结果列表

FutureBuilder<SearchResult> _buildSearchList() {
  return FutureBuilder<SearchResult>(
    future: JioSaavnWrapper.instance.fetchSearchResults(searchQuery: searchQuery),
    builder: (context, snapshot) {
      if (snapshot.hasData) {
        return ListView.builder(
          itemCount: snapshot.data!.songs.length,
          itemBuilder: (context, index) => ListTile(
            leading: SizedBox(
              height: 48,
              width: 48,
              child: CachedNetworkImage(
                imageUrl: snapshot.data!.songs[index].image,
              ),
            ),
            title: Text(snapshot.data!.songs[index].title),
            subtitle: Text(
              snapshot.data!.songs[index].description,
              maxLines: 2,
            ),
          ),
        );
      } else {
        if (snapshot.hasError) {
          return Center(
            child: Text('未找到结果...'),
          );
        } else {
          return Center(
            child: Text('搜索歌曲名或歌手名...'),
          );
        }
      }
    },
  );
}

热门歌曲列表

FutureBuilder<Playlist?> _buildTopSongs() {
  return FutureBuilder<Playlist?>(
      future: JioSaavnWrapper.instance.fetchTopSongs(),
      builder: (context, snapshot) =>
          snapshot.hasData
              ? ListView.builder(
                  itemCount: snapshot.data?.songs.length ?? 0,
                  itemBuilder: (context, index) => Card(
                    elevation: 10,
                    child: ListTile(
                      title: Text(
                        snapshot.data!.songs[index].title,
                        maxLines: 1,
                        overflow: TextOverflow.ellipsis,
                      ),
                      subtitle: Text(
                        snapshot.data!.songs[index].subtitle,
                        maxLines: 2,
                      ),
                      leading: SizedBox(
                        height: 48,
                        width: 48,
                        child: ClipRRect(
                          borderRadius: BorderRadius.circular(5),
                          child: CachedNetworkImage(
                            imageUrl: snapshot.data!.songs[index].mediumResImage,
                          ),
                        ),
                      ),
                      trailing: Icon(Icons.play_arrow_outlined),
                    ),
                  ),
                )
              : snapshot.hasError
                  ? Center(
                      child: SelectableText(
                        snapshot.error.toString(),
                      ),
                    )
                  : Center(
                      child: CircularProgressIndicator(),
                    ));
}

更多关于Flutter音乐播放插件jiosaavn_wrapper的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter音乐播放插件jiosaavn_wrapper的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


jiosaavn_wrapper 是一个用于在 Flutter 应用中播放 JioSaavn 音乐的插件。它允许你从 JioSaavn 获取音乐流并播放。以下是如何在 Flutter 项目中使用 jiosaavn_wrapper 的基本步骤:

1. 添加依赖

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

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

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

2. 导入包

在你的 Dart 文件中导入 jiosaavn_wrapper

import 'package:jiosaavn_wrapper/jiosaavn_wrapper.dart';

3. 初始化插件

在使用插件之前,通常需要对其进行初始化。你可以在 main.dart 中进行初始化:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await JioSaavnWrapper.initialize();
  runApp(MyApp());
}

4. 搜索和播放音乐

你可以使用 JioSaavnWrapper 来搜索音乐并获取播放链接。以下是一个简单的示例:

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

class _MyAppState extends State<MyApp> {
  String? _songUrl;
  final _audioPlayer = AudioPlayer();

  Future<void> _searchAndPlay(String query) async {
    try {
      // 搜索歌曲
      final searchResult = await JioSaavnWrapper.search(query);

      // 获取第一首歌曲的播放链接
      if (searchResult.isNotEmpty) {
        final song = searchResult.first;
        final songDetails = await JioSaavnWrapper.getSongDetails(song.id);
        setState(() {
          _songUrl = songDetails.url;
        });

        // 播放歌曲
        await _audioPlayer.play(_songUrl!);
      }
    } catch (e) {
      print('Error: $e');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('JioSaavn Music Player'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                onPressed: () => _searchAndPlay('Teri Mitti'),
                child: Text('Play Teri Mitti'),
              ),
              _songUrl != null
                  ? Text('Playing: $_songUrl')
                  : Text('No song playing'),
            ],
          ),
        ),
      ),
    );
  }

  [@override](/user/override)
  void dispose() {
    _audioPlayer.dispose();
    super.dispose();
  }
}
回到顶部