Flutter Transmission API 交互插件 transmission_api 的使用

transmission_api #

A Transmission client library for dart. To know more about transmission visit 官方站点

感谢 tmdb_api,大部分代码来自它。

开始使用 #

  1. 作为依赖添加

    Pub.dev 安装指南

    将以下内容添加到你的项目的 pubspec.yaml 文件中:

    dependencies:
      transmission_api: latest
    
  2. 导入它

    现在你可以在 Dart 代码中使用:

    import 'package:transmission_api/transmission_api.dart';
    
  3. 创建实例

    现在你需要为 TransmissionAuthKeys 创建实例,并使用你的 API 密钥。

    final transmission = Transmission( //Transmission 实例
        AuthKeys('Username', 'Password'),//AuthKeys 实例,包含你的密钥,
      );
    

    await transmission.v1.waitRpcVersion(); // 获取实际的 RPC 版本,默认值为 18。

  4. 配置控制台日志

    有三种可用的日志配置预设。

    • ConfigLogger.showAll(): 开发使用。
    • ConfigLogger.showRecommended(): 开发使用。
    • ConfigLogger.showNone(): 生产使用。

    你可以将这些预设中的任何一个添加到 Transmission 实例的 logConfig 命名参数中 自定义日志

    final transmission = Transmission(
        AuthKeys('Username', 'Password'),
        logConfig: ConfigLogger(
          showLogs: true, // 必须为 true,否则其他日志将不会显示。
          showErrorLogs: true,
        ),
      );
    

示例 #

获取种子列表:

Map result = await transmission.v1.torrent.torrentGet(fields: TorrentFields.basic());

自定义 Dio 实例 #

    final transmission = Transmission(
        AuthKeys('Username', 'Password'),
        dio: Dio() // 你自己的 Dio 实例
      );

添加拦截器 #

final transmission = Transmission(
    AuthKeys('Username', 'Password'),
    interceptors: Interceptors()..add(/*你的拦截器*/)
    );

或者

final customDio = Dio();
customDio.interceptors.add(/*你的拦截器*/)

final transmission = Transmission( AuthKeys(‘Username’, ‘Password’), dio: customDio );

注意: 只有在不使用自定义的 Dio 实例时才使用拦截器。

更多 API 文档 #

访问 官方 API 文档


更多关于Flutter Transmission API 交互插件 transmission_api 的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter Transmission API 交互插件 transmission_api 的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何使用Flutter中的transmission_api插件与Transmission BitTorrent客户端进行交互的代码示例。这个示例展示了如何连接到Transmission、获取会话状态、添加torrent文件以及获取torrent列表。

首先,确保你已经在pubspec.yaml文件中添加了transmission_api依赖:

dependencies:
  flutter:
    sdk: flutter
  transmission_api: ^最新版本号  # 请替换为当前最新版本号

然后,运行flutter pub get来安装依赖。

接下来是一个简单的Flutter应用示例,展示如何使用transmission_api

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

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

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

class _MyAppState extends State<MyApp> {
  TransmissionClient? _client;
  SessionStatus? _sessionStatus;
  List<Torrent> _torrents = [];

  @override
  void initState() {
    super.initState();
    initTransmissionClient();
  }

  Future<void> initTransmissionClient() async {
    // 替换为你的Transmission服务器的地址、端口、用户名和密码
    final String host = 'http://localhost:9091';
    final String username = 'your-username';
    final String password = 'your-password';

    _client = TransmissionClient(host, username, password);

    try {
      // 获取会话状态
      _sessionStatus = await _client!.getSessionStatus();
      print('Session Status: $_sessionStatus');

      // 获取torrent列表
      final List<Torrent> torrents = await _client!.getTorrents();
      setState(() {
        _torrents = torrents;
      });
    } catch (e) {
      print('Error connecting to Transmission: $e');
    }
  }

  Future<void> addTorrent(File torrentFile) async {
    try {
      final TorrentResult result = await _client!.addTorrent(torrentFile);
      print('Torrent added: $result');
      // 更新torrent列表
      final List<Torrent> torrents = await _client!.getTorrents();
      setState(() {
        _torrents = torrents;
      });
    } catch (e) {
      print('Error adding torrent: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Transmission API Example'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            children: [
              if (_sessionStatus != null)
                Text('Session Status:\n${_sessionStatus!.toJson()}'),
              Expanded(
                child: ListView.builder(
                  itemCount: _torrents.length,
                  itemBuilder: (context, index) {
                    final Torrent torrent = _torrents[index];
                    return ListTile(
                      title: Text('Torrent ${torrent.id}: ${torrent.name}'),
                      subtitle: Text('Status: ${torrent.statusString}'),
                    );
                  },
                ),
              ),
              ElevatedButton(
                onPressed: () async {
                  // 这里你可以使用文件选择器来选择torrent文件
                  // 例如:final File torrentFile = await pickFile();
                  // 由于文件选择器不是Flutter标准库的一部分,这里省略具体实现
                  // 假设你已经有了torrent文件对象 torrentFile

                  // 示例文件路径(请替换为实际文件路径)
                  final File torrentFile = File('/path/to/your/torrent/file.torrent');
                  await addTorrent(torrentFile);
                },
                child: Text('Add Torrent'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

注意

  1. 上述代码中的pickFile()函数用于选择文件,但这不是Flutter标准库的一部分。你可以使用第三方包如file_picker来实现文件选择功能。
  2. 在实际部署中,请确保你的Transmission服务器允许来自你Flutter应用的连接,并且已经正确配置了用户名和密码。
  3. 确保你的Flutter应用有权限访问文件系统以选择torrent文件。

这个示例展示了基本的连接、获取会话状态、获取torrent列表以及添加torrent文件的功能。你可以根据实际需求进一步扩展和修改这个示例。

回到顶部