Курсач доработка!
This commit is contained in:
parent
17d74c828b
commit
f303d8e459
@ -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(),
|
||||
);
|
||||
}
|
||||
|
@ -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});
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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 {
|
||||
'ужасам Галактики в эпических боях сразу на нескольких планетах. Раскройте мрачные секреты и отбросьте тень вечной ночи.'),
|
||||
];
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
7
lib/domain/models/home.dart
Normal file
7
lib/domain/models/home.dart
Normal file
@ -0,0 +1,7 @@
|
||||
import 'card.dart';
|
||||
|
||||
class HomeData {
|
||||
final List<CardData>? data;
|
||||
|
||||
HomeData({this.data});
|
||||
}
|
@ -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,
|
||||
}) =>
|
||||
|
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user