Курсач доработка!

This commit is contained in:
Stepan 2024-12-21 14:21:47 +04:00
parent 17d74c828b
commit f303d8e459
7 changed files with 30 additions and 11 deletions

View File

@ -1,4 +1,5 @@
import '../../domain/models/card.dart';
import '../../domain/models/home.dart';
import '../dtos/characters_dto.dart';
extension CharacterDtoToModel on CharacterDto {
@ -10,3 +11,9 @@ extension CharacterDtoToModel on CharacterDto {
imageUrl: displayIcon,
);
}
extension CharactersDtoToModel on CharactersDto {
HomeData toDomain() => HomeData(
data: data?.map((e) => e.toDomain()).toList(),
);
}

View File

@ -1,7 +1,8 @@
import '../../domain/models/card.dart';
import '../../domain/models/home.dart';
typedef OnErrorCallback = void Function(String? error);
abstract class ApiInterface {
Future<List<CardData>?> loadData();
Future<HomeData?> loadData({String? q});
}

View File

@ -3,6 +3,7 @@ import 'package:flutter_test_app/data/mappers/characters_mapper.dart';
import 'package:pretty_dio_logger/pretty_dio_logger.dart';
import '../../domain/models/card.dart';
import '../../domain/models/home.dart';
import '../dtos/characters_dto.dart';
import 'api_interface.dart';
@ -16,7 +17,7 @@ class AgentsRepository extends ApiInterface {
static const String _baseUrl = 'https://valorant-api.com/v1/agents';
@override
Future<List<CardData>?> loadData({
Future<HomeData?> loadData({
OnErrorCallback? onError,
String? q,
}) async {
@ -29,13 +30,14 @@ class AgentsRepository extends ApiInterface {
// Преобразование данных JSON в CharactersDto, затем в CardData
final CharactersDto dto = CharactersDto.fromJson({'data': agentsData});
List<CardData>? data = dto.data?.map((e) => e.toDomain()).toList();
var data = dto.toDomain();
// Фильтрация данных по displayName
if (q != null && q.isNotEmpty) {
data = data
final filteredData = data.data
?.where((agent) => agent.text?.toLowerCase().contains(q.toLowerCase()) ?? false)
.toList();
data = HomeData(data: filteredData);
}
return data;

View File

@ -1,7 +1,7 @@
import '../../domain/models/card.dart';
import 'api_interface.dart';
class MockRepository extends ApiInterface {
/*class MockRepository extends ApiInterface {
@override
Future<List<CardData>?> loadData() async {
return [
@ -37,4 +37,4 @@ class MockRepository extends ApiInterface {
'ужасам Галактики в эпических боях сразу на нескольких планетах. Раскройте мрачные секреты и отбросьте тень вечной ночи.'),
];
}
}
}*/

View File

@ -0,0 +1,7 @@
import 'card.dart';
class HomeData {
final List<CardData>? data;
HomeData({this.data});
}

View File

@ -1,11 +1,13 @@
import 'package:copy_with_extension/copy_with_extension.dart';
import 'package:equatable/equatable.dart';
import '../../../domain/models/card.dart';
/*import '../../../domain/models/card.dart*/
import '../../../domain/models/home.dart';
@CopyWith()
class HomeState extends Equatable {
//сравнение двух состояний через Equatable
final List<CardData>? data;
final HomeData? data;
/*final List<CardData>? data;*/
final bool isLoading; //отображение загрузки
final String? error; //отображение ошибок
@ -17,7 +19,7 @@ class HomeState extends Equatable {
HomeState copyWith({
//copyWith создаёт копию объекта с изменением некоторых данных
List<CardData>? data,
HomeData? data,
bool? isLoading,
String? error,
}) =>

View File

@ -155,9 +155,9 @@ class _BodyState extends State<Body> {
onRefresh: _onRefresh,
child: ListView.builder(
padding: EdgeInsets.zero,
itemCount: state.data?.length ?? 0,
itemCount: state.data?.data?.length ?? 0,
itemBuilder: (context, index) {
final data = state.data?[index];
final data = state.data?.data?[index];
return data != null
? _Card.fromData(
data,