Flutter传输管理插件transmission的使用
Flutter传输管理插件transmission的使用
Dart包用于与一个Transmission BT客户端实例进行通信。如果你想查看包括UI组件的Flutter包,请查阅 transmission。
开始使用
创建一个Transmission
实例,你可以将其用于任何数据状态管理(如bloc、provider、mobx等):
final transmission = Transmission(
baseUrl: 'http://192.168.1.35:9091/transmission/rpc',
enableLog: true,
);
默认情况下,baseUrl使用的是 http://localhost:9091/transmission/rpc
。
一旦你有了这个实例,就可以轻松地与transmission的数据交互,比如获取种子或设置。
简单示例
获取种子
final torrents = await transmission.getTorrents();
print(torrents);
添加种子
await transmission.addTorrent(filename: 'https://myUrlMagnet');
启动种子
final torrents = await transmission.getTorrents();
await transmission.startTorrents([torrents.first.id]);
停止种子
final torrents = await transmission.getTorrents();
await transmission.stopTorrents([torrents.first.id]);
删除种子
final torrents = await transmission.getTorrents();
await transmission.removeTorrents([torrents.first.id]);
完整示例Demo
以下是一个完整的示例Demo,展示了如何使用transmission插件来管理种子:
import 'package:transmission/transmission.dart';
void main() async {
final transmission = Transmission(baseUrl: 'http://192.168.1.35:9091/transmission/rpc');
try {
// 获取所有种子
final torrents = await transmission.getTorrents();
print(torrents);
// 添加一个种子
// await transmission.addTorrent(filename: 'https://myUrlMagnet');
// 停止第一个种子
// await transmission.stopTorrents([torrents.first.id]);
// 移动第一个种子到指定路径
// await transmission.moveTorrents([torrents.first.id], '/Users/jaumard/Documents');
// 重命名第一个种子
// await transmission.renameTorrent(
// torrents.first.id,
// path: torrents.first.name,
// name: 'Logic Pro X 10.5.1 Patched (macOS)',
// );
// 立即启动第一个种子
// await transmission.startNowTorrents([torrents.first.id]);
// 启动第一个种子
// await transmission.startTorrents([torrents.first.id]);
} catch (err) {
print('无法加载种子,因为$err');
}
}
以上就是使用Flutter传输管理插件transmission的基本方法和示例。
更多关于Flutter传输管理插件transmission的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter传输管理插件transmission的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在 Flutter 中使用 transmission
插件来管理 torrent 下载,你可以通过 HTTP API 与 Transmission 服务器进行交互。Transmission 是一个流行的、开源的 BitTorrent 客户端,它提供了一个 RESTful API 来管理下载任务。
以下是如何在 Flutter 中使用 transmission
插件的步骤:
1. 安装 dio
包
首先,你需要安装 dio
包来进行 HTTP 请求。dio
是一个强大的 Dart HTTP 客户端,支持拦截器、全局配置、FormData、请求取消、文件下载、超时等。
在 pubspec.yaml
中添加 dio
依赖:
dependencies:
flutter:
sdk: flutter
dio: ^4.0.0
然后运行 flutter pub get
来安装依赖。
2. 创建 TransmissionService 类
接下来,创建一个 TransmissionService
类来封装与 Transmission 服务器的交互。
import 'package:dio/dio.dart';
class TransmissionService {
final Dio _dio = Dio();
final String _baseUrl;
TransmissionService(String baseUrl) : _baseUrl = baseUrl;
Future<Map<String, dynamic>> addTorrent(String torrentUrl) async {
try {
final response = await _dio.post(
'$_baseUrl/transmission/rpc',
data: {
"method": "torrent-add",
"arguments": {
"filename": torrentUrl,
}
},
);
return response.data;
} catch (e) {
print('Error adding torrent: $e');
rethrow;
}
}
Future<Map<String, dynamic>> getTorrentList() async {
try {
final response = await _dio.post(
'$_baseUrl/transmission/rpc',
data: {
"method": "torrent-get",
"arguments": {
"fields": ["id", "name", "percentDone", "status"]
}
},
);
return response.data;
} catch (e) {
print('Error fetching torrent list: $e');
rethrow;
}
}
Future<Map<String, dynamic>> removeTorrent(int torrentId, bool deleteData) async {
try {
final response = await _dio.post(
'$_baseUrl/transmission/rpc',
data: {
"method": "torrent-remove",
"arguments": {
"ids": [torrentId],
"delete-local-data": deleteData
}
},
);
return response.data;
} catch (e) {
print('Error removing torrent: $e');
rethrow;
}
}
}
3. 使用 TransmissionService
在你的 Flutter 应用中使用 TransmissionService
类来管理 torrent 任务。
import 'package:flutter/material.dart';
import 'transmission_service.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: TorrentManager(),
);
}
}
class TorrentManager extends StatefulWidget {
@override
_TorrentManagerState createState() => _TorrentManagerState();
}
class _TorrentManagerState extends State<TorrentManager> {
final TransmissionService _transmissionService = TransmissionService('http://your-transmission-server:9091');
Future<void> _addTorrent() async {
try {
final response = await _transmissionService.addTorrent('magnet:?xt=urn:btih:your-magnet-link');
print('Torrent added: $response');
} catch (e) {
print('Failed to add torrent: $e');
}
}
Future<void> _getTorrentList() async {
try {
final response = await _transmissionService.getTorrentList();
print('Torrent list: $response');
} catch (e) {
print('Failed to fetch torrent list: $e');
}
}
Future<void> _removeTorrent() async {
try {
final response = await _transmissionService.removeTorrent(1, false);
print('Torrent removed: $response');
} catch (e) {
print('Failed to remove torrent: $e');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Transmission Manager'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: _addTorrent,
child: Text('Add Torrent'),
),
ElevatedButton(
onPressed: _getTorrentList,
child: Text('Get Torrent List'),
),
ElevatedButton(
onPressed: _removeTorrent,
child: Text('Remove Torrent'),
),
],
),
),
);
}
}
4. 运行应用
确保你的 Transmission 服务器正在运行,并且可以通过指定的 baseUrl
访问。运行 Flutter 应用后,你可以通过点击按钮来添加、获取和删除 torrent 任务。
注意事项
- 你需要确保 Transmission 服务器的 RPC 接口已启用,并且没有设置身份验证(或者你可以在请求中添加身份验证)。
- 如果 Transmission 服务器需要身份验证,你可以在
Dio
请求中添加Authorization
头。
_dio.options.headers['Authorization'] = 'Basic ${base64Encode(utf8.encode('username:password'))}';