feat(App): update Finlytic Flutter app UI and blocs

This commit is contained in:
2026-08-09 21:01:46 +02:00
parent e7427b7464
commit a708d2977c
591 changed files with 1095105 additions and 0 deletions
@@ -0,0 +1,99 @@
import 'package:equatable/equatable.dart';
import 'finbert_result_model.dart';
class NewsArticleModel extends Equatable {
final String id;
final String title;
final String author;
final String summary;
final String contentRaw;
final String sourceUrl;
final DateTime scrapedAt;
final DateTime publishedAt;
final String status;
// Flatted sentiment properties
final String sentiment;
final double sentimentScore;
final double confidence;
final FinbertResultModel? finbertResult;
const NewsArticleModel({
required this.id,
required this.title,
required this.author,
required this.summary,
required this.contentRaw,
required this.sourceUrl,
required this.scrapedAt,
required this.publishedAt,
required this.status,
required this.sentiment,
required this.sentimentScore,
required this.confidence,
this.finbertResult,
});
factory NewsArticleModel.fromJson(Map<String, dynamic> json) {
return NewsArticleModel(
id: json['id']?.toString() ?? json['Id']?.toString() ?? '',
title: json['title']?.toString() ?? json['Title']?.toString() ?? 'No Title',
author: json['author']?.toString() ?? json['Author']?.toString() ?? 'Unknown',
summary: json['summary']?.toString() ?? json['Summary']?.toString() ?? '',
contentRaw: json['contentRaw']?.toString() ?? json['ContentRaw']?.toString() ?? '',
sourceUrl: json['sourceUrl']?.toString() ?? json['SourceUrl']?.toString() ?? '',
scrapedAt: DateTime.tryParse(json['scrapedAt']?.toString() ?? json['ScrapedAt']?.toString() ?? '') ?? DateTime.now(),
publishedAt: DateTime.tryParse(json['publishedAt']?.toString() ?? json['PublishedAt']?.toString() ?? '') ?? DateTime.now(),
status: json['status']?.toString() ?? json['Status']?.toString() ?? 'Completed',
sentiment: json['sentiment']?.toString() ?? json['Sentiment']?.toString() ?? '',
sentimentScore: (json['sentimentScore'] ?? json['SentimentScore'] ?? 0.0).toDouble(),
confidence: (json['confidence'] ?? json['Confidence'] ?? 0.0).toDouble(),
finbertResult: (json['finbertResult'] != null || json['FinbertResult'] != null)
? FinbertResultModel.fromJson(json['finbertResult'] ?? json['FinbertResult'])
: null,
);
}
Map<String, dynamic> toJson() {
return {
'id': id,
'title': title,
'author': author,
'summary': summary,
'contentRaw': contentRaw,
'sourceUrl': sourceUrl,
'scrapedAt': scrapedAt.toIso8601String(),
'publishedAt': publishedAt.toIso8601String(),
'status': status,
'sentiment': sentiment,
'sentimentScore': sentimentScore,
'confidence': confidence,
'finbertResult': finbertResult != null ? {
'label': finbertResult!.label,
'score': finbertResult!.score,
'positiveProbability': finbertResult!.positiveProbability,
'negativeProbability': finbertResult!.negativeProbability,
'neutralProbability': finbertResult!.neutralProbability,
'processingTimeMs': finbertResult!.processingTimeMs,
} : null,
};
}
@override
List<Object?> get props => [
id,
title,
author,
summary,
contentRaw,
sourceUrl,
scrapedAt,
publishedAt,
status,
sentiment,
sentimentScore,
confidence,
finbertResult,
];
}