refactor: save current workspace state including FinlyticAnalyzer fixes, FinlyticApp trade route alignment, and DTO audit documentation
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
import 'package:finlytic_app/core/network/api_client.dart';
|
||||
import 'package:finlytic_app/features/search/models/search_result_model.dart';
|
||||
import 'package:finlytic_app/core/utils/asset_utils.dart';
|
||||
|
||||
class SearchRepository {
|
||||
final ApiClient apiClient;
|
||||
@@ -9,15 +8,12 @@ class SearchRepository {
|
||||
|
||||
Future<List<SearchResultModel>> searchAssets(String query) async {
|
||||
try {
|
||||
final res = await apiClient.get('/api/v1/assets/search', queryParameters: {'q': query});
|
||||
final res = await apiClient
|
||||
.get('/api/v1/assets/search', queryParameters: {'q': query});
|
||||
if (res.statusCode == 200 && res.data != null) {
|
||||
final list = res.data as List;
|
||||
final results = list.map((json) => SearchResultModel.fromJson(json)).toList();
|
||||
for (final item in results) {
|
||||
if (item.isinCode.isNotEmpty && item.displayName.isNotEmpty) {
|
||||
AssetUtils.registerAsset(item.isinCode, item.displayName, item.image);
|
||||
}
|
||||
}
|
||||
final results =
|
||||
list.map((json) => SearchResultModel.fromJson(json)).toList();
|
||||
return results;
|
||||
}
|
||||
return [];
|
||||
|
||||
@@ -2,7 +2,6 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import '../../../core/network/api_client.dart';
|
||||
import '../../../core/theme/app_theme.dart';
|
||||
import '../../../core/utils/asset_utils.dart';
|
||||
import '../../../core/widgets/asset_logo_widget.dart';
|
||||
import '../../../core/widgets/shimmer_loading.dart';
|
||||
import '../../../shared/widgets/favorite_star_button.dart';
|
||||
@@ -138,13 +137,9 @@ class _AssetSearchDialogContentState extends State<_AssetSearchDialogContent> {
|
||||
itemBuilder: (context, index) {
|
||||
final item = results[index];
|
||||
final assetName = item.displayName;
|
||||
final isinCode = item.isinCode;
|
||||
final isin = item.isin;
|
||||
|
||||
if (isinCode.isNotEmpty && assetName.isNotEmpty) {
|
||||
AssetUtils.registerAsset(isinCode, assetName, item.image);
|
||||
}
|
||||
|
||||
final targetId = isinCode.isNotEmpty ? isinCode : assetName;
|
||||
final targetId = isin.isNotEmpty ? isin : assetName;
|
||||
|
||||
return ListTile(
|
||||
leading: AssetLogoWidget(
|
||||
@@ -153,8 +148,8 @@ class _AssetSearchDialogContentState extends State<_AssetSearchDialogContent> {
|
||||
size: 36,
|
||||
),
|
||||
title: Text(assetName, style: const TextStyle(fontWeight: FontWeight.bold, fontSize: 14)),
|
||||
subtitle: isinCode.isNotEmpty
|
||||
? Text('ISIN: $isinCode', style: TextStyle(color: activeTheme.textMuted, fontSize: 11))
|
||||
subtitle: isin.isNotEmpty
|
||||
? Text('ISIN: $isin', style: TextStyle(color: activeTheme.textMuted, fontSize: 11))
|
||||
: null,
|
||||
trailing: SizedBox(
|
||||
width: 40,
|
||||
@@ -171,7 +166,8 @@ class _AssetSearchDialogContentState extends State<_AssetSearchDialogContent> {
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (_) => AssetDetailScreen(
|
||||
symbol: assetName,
|
||||
isin: isin,
|
||||
name: assetName,
|
||||
apiClient: widget.apiClient,
|
||||
),
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user