feat(derivatives): fix Trade Republic derivative pagination streaming and picker modal
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
|
||||
class DerivativeItemModel extends Equatable {
|
||||
final String isin;
|
||||
final String name;
|
||||
final String optionType;
|
||||
final String productCategoryName;
|
||||
final String nextGenProductCategoryName;
|
||||
final double strike;
|
||||
final double barrier;
|
||||
final double leverage;
|
||||
final double? size;
|
||||
final double? factor;
|
||||
final double? delta;
|
||||
final String currency;
|
||||
final String? expiry;
|
||||
final String issuer;
|
||||
final String issuerDisplayName;
|
||||
final String? issuerImageId;
|
||||
final String underlyingIsin;
|
||||
|
||||
const DerivativeItemModel({
|
||||
required this.isin,
|
||||
this.name = '',
|
||||
this.optionType = 'Long',
|
||||
this.productCategoryName = '',
|
||||
this.nextGenProductCategoryName = '',
|
||||
this.strike = 0.0,
|
||||
this.barrier = 0.0,
|
||||
this.leverage = 1.0,
|
||||
this.size,
|
||||
this.factor,
|
||||
this.delta,
|
||||
this.currency = 'EUR',
|
||||
this.expiry,
|
||||
this.issuer = '',
|
||||
this.issuerDisplayName = '',
|
||||
this.issuerImageId,
|
||||
this.underlyingIsin = '',
|
||||
});
|
||||
|
||||
bool get isLong => optionType.toLowerCase().contains('long') || optionType.toLowerCase().contains('call');
|
||||
|
||||
double distanceToBarrier(double currentUnderlyingPrice) {
|
||||
if (barrier <= 0 || currentUnderlyingPrice <= 0) return 0.0;
|
||||
return ((currentUnderlyingPrice - barrier).abs() / currentUnderlyingPrice) * 100.0;
|
||||
}
|
||||
|
||||
factory DerivativeItemModel.fromJson(Map<String, dynamic> json) {
|
||||
double parseDbl(dynamic val) {
|
||||
if (val == null) return 0.0;
|
||||
if (val is num) return val.toDouble();
|
||||
return double.tryParse(val.toString()) ?? 0.0;
|
||||
}
|
||||
|
||||
double? parseOptDbl(dynamic val) {
|
||||
if (val == null) return null;
|
||||
if (val is num) return val.toDouble();
|
||||
return double.tryParse(val.toString());
|
||||
}
|
||||
|
||||
return DerivativeItemModel(
|
||||
isin: json['isin']?.toString() ?? '',
|
||||
name: json['name']?.toString() ?? '',
|
||||
optionType: json['optionType']?.toString() ?? 'Long',
|
||||
productCategoryName: json['productCategoryName']?.toString() ?? '',
|
||||
nextGenProductCategoryName: json['nextGenProductCategoryName']?.toString() ?? '',
|
||||
strike: parseDbl(json['strike']),
|
||||
barrier: parseDbl(json['barrier']),
|
||||
leverage: parseDbl(json['leverage']),
|
||||
size: parseOptDbl(json['size']),
|
||||
factor: parseOptDbl(json['factor']),
|
||||
delta: parseOptDbl(json['delta']),
|
||||
currency: json['currency']?.toString() ?? 'EUR',
|
||||
expiry: json['expiry']?.toString(),
|
||||
issuer: json['issuer']?.toString() ?? '',
|
||||
issuerDisplayName: json['issuerDisplayName']?.toString() ?? (json['issuer']?.toString() ?? ''),
|
||||
issuerImageId: json['issuerImageId']?.toString(),
|
||||
underlyingIsin: json['underlyingIsin']?.toString() ?? '',
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
isin,
|
||||
name,
|
||||
optionType,
|
||||
productCategoryName,
|
||||
strike,
|
||||
barrier,
|
||||
leverage,
|
||||
issuer,
|
||||
underlyingIsin,
|
||||
];
|
||||
}
|
||||
Reference in New Issue
Block a user