refactor(api): Improve data parsing with normalized list handling

This commit is contained in:
cogwheel0
2025-11-01 15:29:54 +05:30
parent fe09583c6b
commit 877b403914

View File

@@ -1599,10 +1599,10 @@ class ApiService {
if (data is Map<String, dynamic>) { if (data is Map<String, dynamic>) {
final voices = data['voices']; final voices = data['voices'];
if (voices is List) { if (voices is List) {
return voices return _normalizeList(
.whereType<Map>() voices,
.map((e) => e.cast<String, dynamic>()) debugLabel: 'parse_voice_list',
.toList(); );
} }
} }
if (data is List) { if (data is List) {
@@ -1705,7 +1705,10 @@ class ApiService {
final response = await _dio.get('/api/v1/images/models'); final response = await _dio.get('/api/v1/images/models');
final data = response.data; final data = response.data;
if (data is List) { if (data is List) {
return data.cast<Map<String, dynamic>>(); return _normalizeList(
data,
debugLabel: 'parse_image_models',
);
} }
return []; return [];
} }
@@ -3120,19 +3123,25 @@ class ApiService {
final data = response.data; final data = response.data;
if (data is List) { if (data is List) {
return data.whereType<Map<String, dynamic>>().toList(); return _normalizeList(
data,
debugLabel: 'parse_message_search',
);
} }
if (data is Map<String, dynamic>) { if (data is Map<String, dynamic>) {
final list = (data['items'] ?? data['results'] ?? data['messages']); final list = (data['items'] ?? data['results'] ?? data['messages']);
if (list is List) { if (list is List) {
return list.whereType<Map<String, dynamic>>().toList(); return _normalizeList(
list,
debugLabel: 'parse_message_search_wrapped',
);
} }
} }
return []; return const [];
} on DioException catch (e) { } on DioException catch (e) {
// On any transport or other error, degrade gracefully without surfacing // On any transport or other error, degrade gracefully without surfacing
_traceApi('messages search request failed gracefully: ${e.type}'); _traceApi('messages search request failed gracefully: ${e.type}');
return []; return const [];
} }
} }