From 0ca1277fb38028cb51733d8d86c7d325daf46b53 Mon Sep 17 00:00:00 2001 From: Arkadiy Radaev Date: Wed, 11 Dec 2024 17:49:42 +0400 Subject: [PATCH] lab 5 done --- lib/data/dtos/car_dto.dart | 32 ++++++++++++----------- lib/data/dtos/car_dto.g.dart | 29 -------------------- lib/data/mappers/car_mapper.dart | 16 +++++++----- lib/data/repositories/car_repository.dart | 13 ++++++--- 4 files changed, 36 insertions(+), 54 deletions(-) delete mode 100644 lib/data/dtos/car_dto.g.dart diff --git a/lib/data/dtos/car_dto.dart b/lib/data/dtos/car_dto.dart index 9fe5c57..c5852ec 100644 --- a/lib/data/dtos/car_dto.dart +++ b/lib/data/dtos/car_dto.dart @@ -2,31 +2,33 @@ import 'package:json_annotation/json_annotation.dart'; part 'car_dto.g.dart'; + @JsonSerializable(createToJson: false) class CarDto { - final List? result; - const CarDto({this.result}); + @JsonKey(name: 'Count') + final int? count; + @JsonKey(name: 'Message') + final String? message; + @JsonKey(name: 'SearchCriteria') + final String? searchCriteria; + @JsonKey(name: 'Results') + final List? results; + + const CarDto({this.count, this.message, this.searchCriteria, this.results}); factory CarDto.fromJson(Map json) => _$CarDtoFromJson(json); } @JsonSerializable(createToJson: false) -class CarResultDto { - final String? id; - final CarAttributesResultDto? attributes; - - const CarResultDto({this.id, this.attributes}); - - factory CarResultDto.fromJson(Map json) => _$CarResultDtoFromJson(json); -} -@JsonSerializable(createToJson: false) class CarAttributesResultDto { @JsonKey(name: 'Model_ID') - final String? modelid; + final int? modelID; @JsonKey(name: 'Make_Name') - final String? makename; // Поле для make_and_model + final String? makeName; @JsonKey(name: 'Model_Name') - final String? modelname; + final String? modelName; - const CarAttributesResultDto({this.modelid, this.makename, this.modelname}); + const CarAttributesResultDto({ this.modelID, this.makeName, this.modelName}); factory CarAttributesResultDto.fromJson(Map json) => _$CarAttributesResultDtoFromJson(json); + // Map toJson() => _$CarAttributesResultDtoFromJson(this); } + diff --git a/lib/data/dtos/car_dto.g.dart b/lib/data/dtos/car_dto.g.dart deleted file mode 100644 index 40e3f45..0000000 --- a/lib/data/dtos/car_dto.g.dart +++ /dev/null @@ -1,29 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'car_dto.dart'; - -// ************************************************************************** -// JsonSerializableGenerator -// ************************************************************************** - -CarDto _$CarDtoFromJson(Map json) => CarDto( - result: (json['result'] as List?) - ?.map((e) => CarResultDto.fromJson(e as Map)) - .toList(), - ); - -CarResultDto _$CarResultDtoFromJson(Map json) => CarResultDto( - id: json['id'] as String?, - attributes: json['attributes'] == null - ? null - : CarAttributesResultDto.fromJson( - json['attributes'] as Map), - ); - -CarAttributesResultDto _$CarAttributesResultDtoFromJson( - Map json) => - CarAttributesResultDto( - modelid: json['Model_ID'] as String?, - makename: json['Make_Name'] as String?, - modelname: json['Model_Name'] as String?, - ); diff --git a/lib/data/mappers/car_mapper.dart b/lib/data/mappers/car_mapper.dart index e66b824..dda8af8 100644 --- a/lib/data/mappers/car_mapper.dart +++ b/lib/data/mappers/car_mapper.dart @@ -1,13 +1,17 @@ +import 'package:flutter/material.dart'; import 'package:mylab/data/dtos/car_dto.dart'; import 'package:mylab/domain/models/car.dart'; const _imagePlaceholder = - 'https://upload.wikimedia.org/wikipedia/en/archive/b/b1/20210811082420%21Portrait_placeholder.png'; + 'https://avatars.mds.yandex.net/i?id=d8136fe8562de785a003fa49a2a07a3d_l-4507854-images-thumbs&n=13'; -extension CarDataDtoToModel on CarResultDto { +extension CarAttributesResultDtoToModel on CarAttributesResultDto { CarData toDomain() => CarData( - attributes?.modelid ?? 'UNKNOWN', - imageUrl: _imagePlaceholder, - descriptionCar: '${attributes?.makename}, ${attributes?.modelname}' + modelName ?? 'unknown', + descriptionCar: 'ID: $modelID \n' + 'Marka: $makeName \n' + 'Model: $modelName', + + imageUrl: _imagePlaceholder ); -} \ No newline at end of file +} diff --git a/lib/data/repositories/car_repository.dart b/lib/data/repositories/car_repository.dart index 01b4aff..f1f04eb 100644 --- a/lib/data/repositories/car_repository.dart +++ b/lib/data/repositories/car_repository.dart @@ -12,20 +12,25 @@ class CarRepository extends ApiInterface { requestBody: true, )); - // https://random-data-api.com/api/vehicle/random_vehicle.json + static const String _baseUrl = 'https://vpic.nhtsa.dot.gov/api/vehicles'; @override - Future?> loadData({String? q, OnErrorCallback? onError}) async { + Future?> loadData({String? q, OnErrorCallback? onError, int limit = 20}) async { try { const String url = '$_baseUrl/GetModelsForMakeYear/make/honda/modelyear/1990?format=json'; final Response response = await _dio.get>(url); - + print('Response data: ${response.data}'); final CarDto dto = CarDto.fromJson(response.data as Map); - final List? data = dto.result?.map((e) => e.toDomain()).toList(); + final List? data = dto.results?.map((e) => e.toDomain()).toList(); + // Ограничиваем количество возвращаемых записей до 'limit' + if (data != null && data.length > limit) { + return data.sublist(0, limit); + } return data; } on DioException catch (e) { + print(e.response?.statusMessage); onError?.call(e.response?.statusMessage); return null; }