Flutter视频下载插件youtube_downloader_totalxsoftware的使用
Flutter视频下载插件youtube_downloader_totalxsoftware的使用
youtube_downloader_totalxsoftware
是一个简化了YouTube视频下载功能的Flutter插件,支持自定义质量选择、通知和缩略图处理。
开发公司: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
更多关于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 视频。
示例代码
- 导入插件
在你的 Dart 文件中导入插件:
import 'package:youtube_downloader_totalxsoftware/youtube_downloader_totalxsoftware.dart';
- 请求存储权限(Android特有)
在 Android 上下载文件需要存储权限。你可以在 MainActivity.kt
或 MainActivity.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 {
// 权限被拒绝
}
}
}
}
- 使用插件下载视频
在你的 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 下载视频可能是非法的。确保你遵守所有相关的法律和条款,并且仅在合法和允许的情况下使用此类功能。此外,某些应用商店可能不允许发布包含未经授权视频下载功能的应用。