Flutter金融交易API插件degiro_api的使用
Flutter金融交易API插件degiro_api的使用
使用
// 创建DegiroApi实例
final degiro = DegiroApi.fromCredentials('用户名', '密码');
try {
// 获取当前实例并检查是否已登录
print(DegiroApi.instance.isLoggedIn ? '已登录' : '未登录');
// 使用提供的凭据登录并创建会话
await degiro.login();
// 获取账户信息(登录方法返回此属性)
final accountInfo = degiro.accountInfo;
// 获取账户当前的投资组合仓位
final List<PortfolioPosition> positions = await degiro.portfolioPositions();
// 显示仓位名称列表
for (var p in positions) {
print(p.productInfo?.name);
}
// 从会话中登出
await degiro.logout();
} on DegiroApiError catch (e) {
print(e.message);
}
可用方法
构造函数
-
DegiroApi.fromCredentials(String username, String password)
基于用户名和密码创建Degiro实例。注意: 2FA功能正在开发中。
-
DegiroApi.fromSession(String sessionId)
基于jsessionid创建Degiro实例。可以从浏览器开发者工具访问网络请求中获取。所有对Degiro API的请求都必须包含sessionId。
方法
login
logout
portfolioPositions
productInfo
productInfos
transactions
searchProducts
cashMovements
贡献
由于此包由一个人维护,欢迎帮助。如有问题或拉取请求,请在GitHub仓库中打开。
Freezed代码生成
如果向模型中添加了新字段,运行以下命令来自动生成模型:
dart run build_runner build --delete-conflicting-outputs
示例代码
import 'dart:io';
import 'package:degiro_api/degiro_api.dart';
void main() {
print('按y开始示例');
final value = stdin.readLineSync();
if (value == 'y') {
libraryTest();
}
}
Future<void> libraryTest() async {
// 从文件读取凭证
List<String> lines = File('./example/credentials.txt').readAsLinesSync();
if (lines.isEmpty) return;
final degiro = DegiroApi.fromCredentials(lines.first, lines.last);
// final degiro = DegiroApi.fromSession(lines.first);
try {
await degiro.login();
print(DegiroApi.instance.isLoggedIn ? '已登录' : '未登录');
print(degiro.sessionId);
List<Transaction> transactions =
await degiro.transactions(fromDate: DateTime(2022, 4, 18));
List<ProductInfo> products = await degiro.searchProducts(
searchText: 'nasdaq',
sortColumn: 'name',
sortType: 'asc',
limit: 10,
offset: 10 * 2,
);
List<CashMovement> movements = await degiro.cashMovements(
fromDate: DateTime(2022, 02, 23),
toDate: DateTime(2022, 02, 25),
showFlatexMovements: true,
);
await degiro.logout();
print(DegiroApi.instance.isLoggedIn ? '已登录' : '未登录');
} on DegiroApiError catch (e) {
print(e.message);
}
}
更多关于Flutter金融交易API插件degiro_api的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter金融交易API插件degiro_api的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用degiro_api
插件进行金融交易操作的代码示例。请注意,实际使用中你可能需要处理认证、错误处理以及API的限制和配额,这里仅提供一个基本的示例来展示如何使用该插件。
首先,确保你已经在pubspec.yaml
文件中添加了degiro_api
依赖:
dependencies:
flutter:
sdk: flutter
degiro_api: ^最新版本号 # 请替换为实际的最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,在你的Flutter项目中创建一个服务类来处理与Degiro API的交互。例如,可以创建一个名为DegiroService
的类:
import 'package:flutter/material.dart';
import 'package:degiro_api/degiro_api.dart';
class DegiroService {
DegiroAPI? _degiroApi;
DegiroService({required String username, required String password}) {
_degiroApi = DegiroAPI(username: username, password: password);
}
Future<void> login() async {
try {
await _degiroApi!.login();
print('Login successful');
} catch (e) {
print('Login failed: $e');
}
}
Future<List<dynamic>> getPortfolio() async {
try {
var portfolio = await _degiroApi!.getPortfolio();
return portfolio;
} catch (e) {
print('Failed to get portfolio: $e');
return [];
}
}
Future<void> placeOrder({
required String productId,
required int size,
required String orderType,
required double price,
}) async {
try {
var order = await _degiroApi!.placeOrder(
productId: productId,
size: size,
orderType: orderType,
price: price,
);
print('Order placed: $order');
} catch (e) {
print('Failed to place order: $e');
}
}
}
在你的主应用代码中,你可以使用这个服务类来与Degiro API交互。例如:
import 'package:flutter/material.dart';
import 'degiro_service.dart'; // 假设你将服务类放在了这个文件中
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
DegiroService? _degiroService;
List<dynamic> _portfolio = [];
@override
void initState() {
super.initState();
// 替换为你的Degiro用户名和密码
_degiroService = DegiroService(username: 'your_username', password: 'your_password');
_login();
}
Future<void> _login() async {
await _degiroService!.login();
setState(() {
_getPortfolio();
});
}
Future<void> _getPortfolio() async {
_portfolio = await _degiroService!.getPortfolio();
setState(() {});
}
Future<void> _placeOrder() async {
// 示例订单参数,需要根据实际情况修改
await _degiroService!.placeOrder(
productId: 'your_product_id',
size: 1,
orderType: 'MARKET',
price: 0.0, // 对于市场订单,价格通常为0
);
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Degiro API Demo'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: [
Text('Portfolio:'),
SizedBox(height: 16),
Expanded(
child: ListView.builder(
itemCount: _portfolio.length,
itemBuilder: (context, index) {
return ListTile(
title: Text('${_portfolio[index]}'),
);
},
),
),
SizedBox(height: 16),
ElevatedButton(
onPressed: _placeOrder,
child: Text('Place Order'),
),
],
),
),
),
);
}
}
请注意,以上代码仅作为示例,并未处理所有可能的错误情况和边界情况。在实际应用中,你应该添加更多的错误处理和用户反馈机制。此外,由于Degiro API的具体实现和认证流程可能会有所变化,请参考最新的Degiro API文档和degiro_api
插件的README文件来调整代码。