Flutter qBittorrent API交互插件qbittorrent_api的使用

发布于 1周前 作者 bupafengyu 来自 Flutter

Flutter qBittorrent API交互插件qbittorrent_api的使用

概述

qbittorrent_api 是一个用于与 qBittorrent Web API 进行交互的 Dart 包。要使用此包,你需要一个运行并启用了 Web API 的 qBittorrent 服务器。

Web API 版本

支持的 Web API 版本:qBittorrent v4.1+

设置

创建一个 QBittorrentApiV2 实例,提供你的 qBittorrent 服务器的 URL。

final qbittorrent = QBittorrentApiV2(
  baseUrl: 'http://localhost:8080',   // 替换为你的 qBittorrent 服务器的实际 URL
  cookiePath: cookiePath,             // 登录 cookie 存储路径
  logger: true,                       // 启用日志记录
);

对于 Flutter 应用,如果是在 Web 环境中,设置 cookiePath: null,因为浏览器会管理 cookie。

String? cookiePath;

// 非 Web 应用的 cookie 路径
if (!kIsWeb) {
    final directory = await getApplicationDocumentsDirectory();
    cookiePath = '${directory.path}/.cookies';
}

final qbittorrent = QBittorrentApiV2(
  baseUrl: 'http://localhost:8080',
  cookiePath: cookiePath,
  logger: kDebugMode,
);

基本用法

此包提供了与各种 API 端点交互的方法。以下是一些示例。

要查看所有可用方法,请参阅 qBittorrent WebUI API 文档

登录

await qbittorrent.auth.login(username: 'username', password: 'password');

添加新种子

// 通过 URL 添加种子
final torrents = NewTorrents.urls(urls: ['https://example.torrent', 'https://example-2.torrent']);
await qbittorrent.torrents.addNewTorrents(torrents: torrents);

// 通过文件添加种子
final torrents = NewTorrents.files(files: [File('./example.torrent')]);
await qbittorrent.torrents.addNewTorrents(torrents: torrents);

// 通过字节流添加种子
final newTorrents = NewTorrents.bytes(bytes: [FileBytes(filename: 'example.torrent', bytes: bytes)]);
await qbittorrent.torrents.addNewTorrents(torrents: torrents);

订阅种子列表

const interval = Duration(seconds: 3);  // 刷新间隔
final stream = qbittorrent.sync.subscribeMainData(interval: interval).listen((data) {
  // 处理主数据更新
});

订阅种子属性

const hash = "123123";                  // 种子哈希
const interval = Duration(seconds: 3);  // 刷新间隔
final stream = qbittorrent.torrents.subscribeProperties(hash: hash, interval: interval).listen((data) {
  // 处理种子属性更新
});

示例代码

以下是一个完整的示例代码,展示了如何使用 qbittorrent_api 包进行基本操作。

import 'package:qbittorrent_api/qbittorrent_api.dart';
import 'package:path_provider/path_provider.dart';
import 'dart:io' show File;
import 'dart:io' as io;

Future<void> main() async {
  String? cookiePath;

  // 非 Web 应用的 cookie 路径
  if (!io.Platform.isBrowser) {
    final directory = await getApplicationDocumentsDirectory();
    cookiePath = '${directory.path}/.cookies';
  }

  final qbittorrent = QBittorrentApiV2(
    baseUrl: 'http://localhost:8090',
    cookiePath: cookiePath,
    logger: true,
  );

  // 登录
  await qbittorrent.auth.login(username: 'admin', password: 'adminadmin');

  // 通过 URL 添加种子
  const torrents = NewTorrents.urls(
    urls: ['https://example.torrent', 'https://example-2.torrent'],
  );
  await qbittorrent.torrents.addNewTorrents(torrents: torrents);

  // 订阅种子列表
  qbittorrent.sync.subscribeMainData().listen((data) {
    print(data.rid);
  });
}

遇到问题?

此包正在积极开发中。如果你发现任何问题,请在 Github 上创建一个 issue。

支持

如果你觉得这个包对你有帮助,可以通过 Buy Me A Coffee 支持开发者。

希望这些信息对你有所帮助!如果有任何问题或需要进一步的帮助,请随时提问。


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

1 回复

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


当然,以下是如何在Flutter中使用qbittorrent_api插件与qBittorrent进行交互的示例代码。请注意,此代码假设您已经安装了qbittorrent_api插件,并且您的qBittorrent实例正在运行且可访问。

首先,确保在您的pubspec.yaml文件中添加依赖项:

dependencies:
  flutter:
    sdk: flutter
  qbittorrent_api: ^最新版本号  # 请替换为实际的最新版本号

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

接下来,您可以创建一个Flutter项目,并在其中使用qbittorrent_api插件。以下是一个简单的示例,展示了如何连接到qBittorrent并获取其状态:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'qBittorrent API Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: QbittorrentPage(),
    );
  }
}

class QbittorrentPage extends StatefulWidget {
  @override
  _QbittorrentPageState createState() => _QbittorrentPageState();
}

class _QbittorrentPageState extends State<QbittorrentPage> {
  late QbittorrentClient _client;
  late Future<QbittorrentState?> _futureState;

  @override
  void initState() {
    super.initState();
    _client = QbittorrentClient('http://your-qbittorrent-address:your-port', 'your-username', 'your-password');
    _futureState = _fetchState();
  }

  Future<QbittorrentState?> _fetchState() async {
    try {
      var state = await _client.getServerState();
      return state;
    } catch (e) {
      print('Error fetching state: $e');
      return null;
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('qBittorrent API Demo'),
      ),
      body: Center(
        child: FutureBuilder<QbittorrentState?>(
          future: _futureState,
          builder: (context, snapshot) {
            if (snapshot.connectionState == ConnectionState.waiting) {
              return CircularProgressIndicator();
            } else if (snapshot.hasError) {
              return Text('Error: ${snapshot.error}');
            } else if (snapshot.data == null) {
              return Text('Unable to fetch state');
            } else {
              var state = snapshot.data!;
              return Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  Text('Upload Speed: ${state.uploadSpeed}'),
                  Text('Download Speed: ${state.downloadSpeed}'),
                  Text('Total Upload: ${state.totalUpload}'),
                  Text('Total Download: ${state.totalDownload}'),
                  // 添加更多您想显示的状态信息
                ],
              );
            }
          },
        ),
      ),
    );
  }
}

在上面的代码中:

  1. 我们创建了一个QbittorrentClient实例,并传入qBittorrent服务器的地址、用户名和密码。
  2. initState方法中,我们调用_fetchState方法来获取qBittorrent的状态。
  3. 使用FutureBuilder来显示异步获取的状态信息。在获取状态的过程中,显示一个进度指示器;如果发生错误,显示错误信息;如果成功获取状态,则显示相关状态信息。

请根据您的实际情况替换your-qbittorrent-addressyour-portyour-usernameyour-password

此示例仅展示了如何获取qBittorrent的基本状态信息。qbittorrent_api插件还支持更多功能,如添加、删除、暂停和恢复下载等,您可以参考其官方文档进行更深入的使用。

回到顶部