Flutter qBittorrent API交互插件qbittorrent_api的使用
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
更多关于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}'),
// 添加更多您想显示的状态信息
],
);
}
},
),
),
);
}
}
在上面的代码中:
- 我们创建了一个
QbittorrentClient
实例,并传入qBittorrent服务器的地址、用户名和密码。 - 在
initState
方法中,我们调用_fetchState
方法来获取qBittorrent的状态。 - 使用
FutureBuilder
来显示异步获取的状态信息。在获取状态的过程中,显示一个进度指示器;如果发生错误,显示错误信息;如果成功获取状态,则显示相关状态信息。
请根据您的实际情况替换your-qbittorrent-address
、your-port
、your-username
和your-password
。
此示例仅展示了如何获取qBittorrent的基本状态信息。qbittorrent_api
插件还支持更多功能,如添加、删除、暂停和恢复下载等,您可以参考其官方文档进行更深入的使用。