feat(app): responsive asset detail layout, full width chart, reactive hero header, shimmer loaders and enriched fundamentals

This commit is contained in:
2026-08-14 23:57:03 +02:00
parent f94e3b8164
commit 1d244b338a
22 changed files with 1950 additions and 1074 deletions
@@ -1,5 +1,6 @@
import 'package:equatable/equatable.dart';
import 'finbert_result_model.dart';
import 'matched_asset_model.dart';
class NewsArticleModel extends Equatable {
final String id;
@@ -17,6 +18,7 @@ class NewsArticleModel extends Equatable {
final double sentimentScore;
final double confidence;
final FinbertResultModel? finbertResult;
final List<MatchedAssetModel> matchedAssets;
const NewsArticleModel({
required this.id,
@@ -32,9 +34,16 @@ class NewsArticleModel extends Equatable {
required this.sentimentScore,
required this.confidence,
this.finbertResult,
this.matchedAssets = const [],
});
factory NewsArticleModel.fromJson(Map<String, dynamic> json) {
List<MatchedAssetModel> assets = [];
final mList = json['matchedAssets'] ?? json['MatchedAssets'];
if (mList != null && mList is List) {
assets = mList.map((e) => MatchedAssetModel.fromJson(e as Map<String, dynamic>)).toList();
}
return NewsArticleModel(
id: json['id']?.toString() ?? json['Id']?.toString() ?? '',
title: json['title']?.toString() ?? json['Title']?.toString() ?? 'No Title',
@@ -52,6 +61,7 @@ class NewsArticleModel extends Equatable {
finbertResult: (json['finbertResult'] != null || json['FinbertResult'] != null)
? FinbertResultModel.fromJson(json['finbertResult'] ?? json['FinbertResult'])
: null,
matchedAssets: assets,
);
}