Курсач доработка!
This commit is contained in:
parent
17d74c828b
commit
f303d8e459
lib
data
mappers
repositories
domain/models
presentation/home_page
@ -1,4 +1,5 @@
|
|||||||
import '../../domain/models/card.dart';
|
import '../../domain/models/card.dart';
|
||||||
|
import '../../domain/models/home.dart';
|
||||||
import '../dtos/characters_dto.dart';
|
import '../dtos/characters_dto.dart';
|
||||||
|
|
||||||
extension CharacterDtoToModel on CharacterDto {
|
extension CharacterDtoToModel on CharacterDto {
|
||||||
@ -10,3 +11,9 @@ extension CharacterDtoToModel on CharacterDto {
|
|||||||
imageUrl: displayIcon,
|
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/card.dart';
|
||||||
|
import '../../domain/models/home.dart';
|
||||||
|
|
||||||
typedef OnErrorCallback = void Function(String? error);
|
typedef OnErrorCallback = void Function(String? error);
|
||||||
|
|
||||||
abstract class ApiInterface {
|
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 'package:pretty_dio_logger/pretty_dio_logger.dart';
|
||||||
|
|
||||||
import '../../domain/models/card.dart';
|
import '../../domain/models/card.dart';
|
||||||
|
import '../../domain/models/home.dart';
|
||||||
import '../dtos/characters_dto.dart';
|
import '../dtos/characters_dto.dart';
|
||||||
import 'api_interface.dart';
|
import 'api_interface.dart';
|
||||||
|
|
||||||
@ -16,7 +17,7 @@ class AgentsRepository extends ApiInterface {
|
|||||||
static const String _baseUrl = 'https://valorant-api.com/v1/agents';
|
static const String _baseUrl = 'https://valorant-api.com/v1/agents';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<List<CardData>?> loadData({
|
Future<HomeData?> loadData({
|
||||||
OnErrorCallback? onError,
|
OnErrorCallback? onError,
|
||||||
String? q,
|
String? q,
|
||||||
}) async {
|
}) async {
|
||||||
@ -29,13 +30,14 @@ class AgentsRepository extends ApiInterface {
|
|||||||
|
|
||||||
// Преобразование данных JSON в CharactersDto, затем в CardData
|
// Преобразование данных JSON в CharactersDto, затем в CardData
|
||||||
final CharactersDto dto = CharactersDto.fromJson({'data': agentsData});
|
final CharactersDto dto = CharactersDto.fromJson({'data': agentsData});
|
||||||
List<CardData>? data = dto.data?.map((e) => e.toDomain()).toList();
|
var data = dto.toDomain();
|
||||||
|
|
||||||
// Фильтрация данных по displayName
|
// Фильтрация данных по displayName
|
||||||
if (q != null && q.isNotEmpty) {
|
if (q != null && q.isNotEmpty) {
|
||||||
data = data
|
final filteredData = data.data
|
||||||
?.where((agent) => agent.text?.toLowerCase().contains(q.toLowerCase()) ?? false)
|
?.where((agent) => agent.text?.toLowerCase().contains(q.toLowerCase()) ?? false)
|
||||||
.toList();
|
.toList();
|
||||||
|
data = HomeData(data: filteredData);
|
||||||
}
|
}
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import '../../domain/models/card.dart';
|
import '../../domain/models/card.dart';
|
||||||
import 'api_interface.dart';
|
import 'api_interface.dart';
|
||||||
|
|
||||||
class MockRepository extends ApiInterface {
|
/*class MockRepository extends ApiInterface {
|
||||||
@override
|
@override
|
||||||
Future<List<CardData>?> loadData() async {
|
Future<List<CardData>?> loadData() async {
|
||||||
return [
|
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:copy_with_extension/copy_with_extension.dart';
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:equatable/equatable.dart';
|
||||||
import '../../../domain/models/card.dart';
|
/*import '../../../domain/models/card.dart*/
|
||||||
|
import '../../../domain/models/home.dart';
|
||||||
|
|
||||||
@CopyWith()
|
@CopyWith()
|
||||||
class HomeState extends Equatable {
|
class HomeState extends Equatable {
|
||||||
//сравнение двух состояний через Equatable
|
//сравнение двух состояний через Equatable
|
||||||
final List<CardData>? data;
|
final HomeData? data;
|
||||||
|
/*final List<CardData>? data;*/
|
||||||
final bool isLoading; //отображение загрузки
|
final bool isLoading; //отображение загрузки
|
||||||
final String? error; //отображение ошибок
|
final String? error; //отображение ошибок
|
||||||
|
|
||||||
@ -17,7 +19,7 @@ class HomeState extends Equatable {
|
|||||||
|
|
||||||
HomeState copyWith({
|
HomeState copyWith({
|
||||||
//copyWith создаёт копию объекта с изменением некоторых данных
|
//copyWith создаёт копию объекта с изменением некоторых данных
|
||||||
List<CardData>? data,
|
HomeData? data,
|
||||||
bool? isLoading,
|
bool? isLoading,
|
||||||
String? error,
|
String? error,
|
||||||
}) =>
|
}) =>
|
||||||
|
@ -155,9 +155,9 @@ class _BodyState extends State<Body> {
|
|||||||
onRefresh: _onRefresh,
|
onRefresh: _onRefresh,
|
||||||
child: ListView.builder(
|
child: ListView.builder(
|
||||||
padding: EdgeInsets.zero,
|
padding: EdgeInsets.zero,
|
||||||
itemCount: state.data?.length ?? 0,
|
itemCount: state.data?.data?.length ?? 0,
|
||||||
itemBuilder: (context, index) {
|
itemBuilder: (context, index) {
|
||||||
final data = state.data?[index];
|
final data = state.data?.data?[index];
|
||||||
return data != null
|
return data != null
|
||||||
? _Card.fromData(
|
? _Card.fromData(
|
||||||
data,
|
data,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user