Flutter视频下载插件youtube_downloader_totalxsoftware的使用

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

Flutter视频下载插件youtube_downloader_totalxsoftware的使用

youtube_downloader_totalxsoftware 是一个简化了YouTube视频下载功能的Flutter插件,支持自定义质量选择、通知和缩略图处理。

Launch Totalx

开发公司:Totalx Software


特性

  • 通过可自定义的底部弹出菜单选择视频质量。
  • 下载视频文件及其缩略图。
  • 下载进度的通知。

安装

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

dependencies:
  youtube_downloader_totalxsoftware: ^1.0.0

然后运行:

flutter pub get

使用

初始化通知

调用 initialize 方法来设置通知(对于Android设备是必需的):

await YoutubeDownloaderTotalxsoftware.initialize(
  androidNotificationIcon: 'resource://drawable/notification_icon',
);

将图标放置在Drawable文件夹中

将通知图标保存到基于屏幕密度的以下 res/drawable 目录中:

  • res/drawable-mdpi:适用于中等密度屏幕(1x)。
  • res/drawable-hdpi:适用于高密度屏幕(1.5x)。
  • res/drawable-xhdpi:适用于超密度屏幕(2x)。
  • res/drawable-xxhdpi:适用于超高密度屏幕(3x)。
  • res/drawable-xxxhdpi:适用于超超高密度屏幕(4x)。

确保图标文件在所有文件夹中的名称一致,例如:notification_icon.png


下载YouTube视频

YoutubeDownloaderTotalxsoftware().downloadYoutubeVideo(
  context: context,
  ytUrl: 'https://youtube.com/shorts/G-2INFh7hpk?si=VWfSRsTYMzX69vpK',
  error: (e) => log('Error: $e'),
  onProgress: (progress) {
    this.progress = progress;
    setState(() {});
  },
  onComplete: (file,thumbnail) {
    log('Download complete: ${file.path}');
    log('Download complete thumbnail: ${thumbnail.path}');
  },
  onLoading: (isLoading) {
    // Loading
  },
  qualityBuilderSheet: qualityBuilderSheet,
);

示例:底部弹出菜单实现

自定义视频质量选择UI:

Widget qualityBuilderSheet(videos, onSelected) {
  return Container(
    margin: const EdgeInsets.all(8),
    decoration: BoxDecoration(
      color: Colors.grey[900],
      borderRadius: BorderRadius.circular(10),
    ),
    padding: const EdgeInsets.all(16.0),
    child: Column(
      mainAxisSize: MainAxisSize.min,
      children: [
        Center(
          child: Container(
            width: 40,
            height: 4,
            margin: const EdgeInsets.only(bottom: 20),
            decoration: BoxDecoration(
              color: Colors.grey[700],
              borderRadius: BorderRadius.circular(10),
            ),
          ),
        ),
        const Align(
          alignment: Alignment.centerLeft,
          child: Text(
            'Download quality',
            style: TextStyle(
              color: Colors.white,
              fontSize: 18,
              fontWeight: FontWeight.bold,
            ),
          ),
        ),
        const SizedBox(height: 16),
        for (var video in videos)
          ListTile(
            onTap: () => onSelected(video),
            title: Text(
              video.qualityLabel,
              style: const TextStyle(
                color: Colors.white,
                fontSize: 16,
              ),
            ),
            trailing: Text(
              '${video.size}',
              style: TextStyle(
                color: Colors.grey[400],
                fontSize: 14,
              ),
            ),
          ),
        const SizedBox(height: 16),
      ],
    ),
  );
}

平台需求

Android

在你的 AndroidManifest.xml 文件中添加以下权限:

<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

更多关于Flutter视频下载插件youtube_downloader_totalxsoftware的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter视频下载插件youtube_downloader_totalxsoftware的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中集成和使用 youtube_downloader_totalxsoftware 插件的一个示例代码案例。请注意,在实际应用中,确保你遵守了所有相关的法律和使用条款,特别是关于视频下载和版权的问题。

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

dependencies:
  flutter:
    sdk: flutter
  youtube_downloader_totalxsoftware: ^最新版本号 # 请替换为实际最新版本号

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

接下来,在你的 Flutter 项目中,你可以按照以下步骤使用这个插件来下载 YouTube 视频。

示例代码

  1. 导入插件

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

import 'package:youtube_downloader_totalxsoftware/youtube_downloader_totalxsoftware.dart';
  1. 请求存储权限(Android特有)

在 Android 上下载文件需要存储权限。你可以在 MainActivity.ktMainActivity.java 中请求权限(具体取决于你使用的是 Kotlin 还是 Java)。这里以 Kotlin 为例:

// MainActivity.kt
package com.example.yourapp

import android.Manifest
import android.content.pm.PackageManager
import androidx.annotation.NonNull
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import io.flutter.embedding.android.FlutterActivity

class MainActivity: FlutterActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        
        // 请求存储权限
        if (ContextCompat.checkSelfPermission(
                this.applicationContext,
                Manifest.permission.WRITE_EXTERNAL_STORAGE
            ) != PackageManager.PERMISSION_GRANTED
        ) {
            ActivityCompat.requestPermissions(
                this,
                arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE),
                1
            )
        }
    }

    override fun onRequestPermissionsResult(
        requestCode: Int,
        @NonNull permissions: Array<out String>,
        @NonNull grantResults: IntArray
    ) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        if (requestCode == 1) {
            if ((grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
                // 权限被授予
            } else {
                // 权限被拒绝
            }
        }
    }
}
  1. 使用插件下载视频

在你的 Flutter Dart 文件中,你可以使用插件提供的方法来下载视频:

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

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

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

class _MyAppState extends State<MyApp> {
  String _downloadStatus = "Nothing downloaded yet.";

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('YouTube Video Downloader'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text(_downloadStatus),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: () async {
                  String videoUrl = "https://www.youtube.com/watch?v=YOUR_VIDEO_ID"; // 替换为你的视频URL
                  String videoTitle = "Downloaded Video"; // 视频保存时的名称
                  String directoryPath = "/storage/emulated/0/Download/"; // 保存路径
                  int quality = 18; // 视频质量,可以是 18, 22, 36, ... 等等,根据可用的质量选择

                  bool result = await YoutubeDownloader.downloadVideo(
                    videoUrl: videoUrl,
                    videoTitle: videoTitle,
                    directoryPath: directoryPath,
                    quality: quality,
                  );

                  setState(() {
                    if (result) {
                      _downloadStatus = "Download successful!";
                    } else {
                      _downloadStatus = "Download failed.";
                    }
                  });
                },
                child: Text('Download Video'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的 Flutter 应用,它有一个按钮,当用户点击该按钮时,会尝试下载指定的 YouTube 视频。下载状态会显示在屏幕上。

注意:由于 YouTube 的条款和服务限制,直接从 YouTube 下载视频可能是非法的。确保你遵守所有相关的法律和条款,并且仅在合法和允许的情况下使用此类功能。此外,某些应用商店可能不允许发布包含未经授权视频下载功能的应用。

回到顶部