131 lines
3.8 KiB
Dart
131 lines
3.8 KiB
Dart
import 'package:flutter/services.dart';
|
||
|
||
class FlutterAliDownloader {
|
||
MethodChannel _methodChannel = MethodChannel("plugins.flutter_alidownload");
|
||
EventChannel _eventChannel =
|
||
EventChannel("plugins.flutter_alidownload_event");
|
||
|
||
Stream<dynamic>? _receiveStream;
|
||
|
||
FlutterAliDownloader.init() {
|
||
_receiveStream = _eventChannel.receiveBroadcastStream();
|
||
//TODO iOS必须在这里监听 才能回调
|
||
_eventChannel.receiveBroadcastStream().listen(_onEvent, onError: _onError);
|
||
}
|
||
|
||
/// 准备下载
|
||
///type {FlutterAvpdef.DOWNLOADTYPE_STS / FlutterAvpdef.DOWNLOADTYPE_AUTH}
|
||
///STS {vid,accessKeyId,accessKeySecret,securityToken}
|
||
///AUTH {vid,playAuth}
|
||
Future<dynamic> prepare(String type, String vid,
|
||
{int? index,
|
||
String? region,
|
||
String? accessKeyId,
|
||
String? accessKeySecret,
|
||
String? securityToken,
|
||
String? playAuth}) async {
|
||
var map = {
|
||
'type': type,
|
||
'vid': vid,
|
||
'index': index,
|
||
'region': region,
|
||
'accessKeyId': accessKeyId,
|
||
'accessKeySecret': accessKeySecret,
|
||
'securityToken': securityToken,
|
||
'playAuth': playAuth
|
||
};
|
||
return _methodChannel.invokeMethod("prepare", map);
|
||
}
|
||
|
||
/// 开始下载
|
||
Stream<dynamic>? start(String vid, int index) {
|
||
var map = {'vid': vid, 'index': index};
|
||
_methodChannel.invokeMethod("start", map);
|
||
return _receiveStream;
|
||
}
|
||
|
||
/// 设置下载的trackIndex
|
||
Future<dynamic> selectItem(String vid, int index) {
|
||
var map = {'vid': vid, 'index': index};
|
||
return _methodChannel.invokeMethod("selectItem", map);
|
||
}
|
||
|
||
/// 设置下载的保存路径
|
||
void setSaveDir(String path) {
|
||
_methodChannel.invokeMethod("setSaveDir", path);
|
||
}
|
||
|
||
// iOS获取下载完成后保存的文件全路径
|
||
// savePath:监听下载完成方法中EventChanneldef.DOWNLOAD_COMPLETION获取的'savePath'值
|
||
Future<dynamic> getFullSaveForIOS(String savePath) {
|
||
return _methodChannel.invokeMethod("getFullSaveDir", savePath);
|
||
}
|
||
|
||
/// 停止下载
|
||
Future<dynamic> stop(String vid, int index) {
|
||
var map = {'vid': vid, 'index': index};
|
||
return _methodChannel.invokeMethod("stop", map);
|
||
}
|
||
|
||
/// 删除下载文件
|
||
Future<dynamic> delete(String vid, int index) {
|
||
var map = {'vid': vid, 'index': index};
|
||
return _methodChannel.invokeMethod("delete", map);
|
||
}
|
||
|
||
/// 获取下载文件路径
|
||
Future<dynamic> getFilePath(String vid, int index) {
|
||
var map = {'vid': vid, 'index': index};
|
||
return _methodChannel.invokeMethod("getFilePath", map);
|
||
}
|
||
|
||
/// 销毁下载对象
|
||
Future<dynamic> release(String vid, int index) {
|
||
var map = {'vid': vid, 'index': index};
|
||
return _methodChannel.invokeMethod("release", map);
|
||
}
|
||
|
||
/// 鉴权过期,更新下载源信息
|
||
Future<dynamic> updateSource(String type, String vid, String index,
|
||
{String? region,
|
||
String? accessKeyId,
|
||
String? accessKeySecret,
|
||
String? securityToken,
|
||
String? playAuth}) {
|
||
var map = {
|
||
'type': type,
|
||
'vid': vid,
|
||
'index': index,
|
||
'region': region,
|
||
'accessKeyId': accessKeyId,
|
||
'accessKeySecret': accessKeySecret,
|
||
'securityToken': securityToken,
|
||
'playAuth': playAuth
|
||
};
|
||
return _methodChannel.invokeMethod("updateSource", map);
|
||
}
|
||
|
||
/// 设置下载config
|
||
Future<dynamic> setDownloaderConfig(String vid, String index,
|
||
{String? userAgent,
|
||
String? referrer,
|
||
String? httpProxy,
|
||
int? connectTimeoutS,
|
||
int? networkTimeoutMs}) {
|
||
var map = {
|
||
'vid': vid,
|
||
'index': index,
|
||
'UserAgent': userAgent,
|
||
'Referrer': referrer,
|
||
'HttpProxy': httpProxy,
|
||
'ConnectTimeoutS': connectTimeoutS,
|
||
'NetworkTimeoutMs': networkTimeoutMs
|
||
};
|
||
return _methodChannel.invokeMethod("setDownloaderConfig", map);
|
||
}
|
||
|
||
void _onEvent(dynamic event) {}
|
||
|
||
void _onError(dynamic error) {}
|
||
}
|