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

1 回复

更多关于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'))}';
回到顶部