From c7f9571e4f55310a2506912630e4549cb931b9cd Mon Sep 17 00:00:00 2001 From: Arkadiy Radaev Date: Wed, 18 Dec 2024 12:16:19 +0400 Subject: [PATCH] lab 7 done --- lib/data/dtos/car_dto.dart | 6 +++--- lib/data/dtos/car_dto.g.dart | 2 +- lib/data/mappers/car_mapper.dart | 3 ++- lib/domain/models/car.dart | 2 +- lib/presentation/home_page/car.dart | 8 ++++---- lib/presentation/home_page/home_page.dart | 6 +++--- lib/presentation/like_bloc/like_bloc.dart | 12 +++++++++--- lib/presentation/like_bloc/like_event.dart | 2 +- lib/presentation/like_bloc/like_state.dart | 2 +- lib/presentation/like_bloc/like_state.g.dart | 8 ++++---- 10 files changed, 29 insertions(+), 22 deletions(-) diff --git a/lib/data/dtos/car_dto.dart b/lib/data/dtos/car_dto.dart index 9a2bcbe..cf75fd1 100644 --- a/lib/data/dtos/car_dto.dart +++ b/lib/data/dtos/car_dto.dart @@ -13,14 +13,14 @@ class CarDto { @JsonSerializable(createToJson: false) class CarAttributesResultDto { - @JsonKey(name: 'Model_ID') - final int? modelID; @JsonKey(name: 'Make_Name') final String? makeName; @JsonKey(name: 'Model_Name') final String? modelName; + @JsonKey(name: 'Model_ID') + final int? id; - const CarAttributesResultDto({this.modelID, this.makeName, this.modelName}); + const CarAttributesResultDto({this.id, this.makeName, this.modelName}); factory CarAttributesResultDto.fromJson(Map json) => _$CarAttributesResultDtoFromJson(json); diff --git a/lib/data/dtos/car_dto.g.dart b/lib/data/dtos/car_dto.g.dart index 39a52c1..2f1dc04 100644 --- a/lib/data/dtos/car_dto.g.dart +++ b/lib/data/dtos/car_dto.g.dart @@ -16,7 +16,7 @@ CarDto _$CarDtoFromJson(Map json) => CarDto( CarAttributesResultDto _$CarAttributesResultDtoFromJson( Map json) => CarAttributesResultDto( - modelID: (json['Model_ID'] as num?)?.toInt(), + id: (json['Model_ID'] as num?)?.toInt(), 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 3126e81..c0076e4 100644 --- a/lib/data/mappers/car_mapper.dart +++ b/lib/data/mappers/car_mapper.dart @@ -16,9 +16,10 @@ extension CarDtoToModel on CarDto { extension CarAttributesResultDtoToModel on CarAttributesResultDto { CarData toDomain() => CarData( modelName ?? 'unknown', - descriptionCar: 'ID: $modelID \n' + descriptionCar: 'ID: $id \n' 'Marka: $makeName \n' 'Model: $modelName', imageUrl: _imagePlaceholder, + id: id, ); } diff --git a/lib/domain/models/car.dart b/lib/domain/models/car.dart index 6a008ff..b6e2622 100644 --- a/lib/domain/models/car.dart +++ b/lib/domain/models/car.dart @@ -5,7 +5,7 @@ class CarData { final String descriptionCar; final IconData icon; final String? imageUrl; - final String? id; + final int? id; CarData( this.text, { diff --git a/lib/presentation/home_page/car.dart b/lib/presentation/home_page/car.dart index a3ca091..c56a0d5 100644 --- a/lib/presentation/home_page/car.dart +++ b/lib/presentation/home_page/car.dart @@ -1,6 +1,6 @@ part of 'home_page.dart'; -typedef OnLikeCallback = void Function(String? id, String title, bool isLiked)?; +typedef OnLikeCallback = void Function(int? id, String title, bool isLiked)?; class _Car extends StatelessWidget { final String text; @@ -9,7 +9,7 @@ class _Car extends StatelessWidget { final String? imageUrl; final OnLikeCallback onLike; final VoidCallback? onTap; - final String? id; + final int? id; final bool isLiked; const _Car( @@ -66,7 +66,7 @@ class _Car extends StatelessWidget { ClipRRect( borderRadius: BorderRadius.circular(20), child: SizedBox( - height: 160, + height: 170, width: 150, child: Image.network( imageUrl ?? '', @@ -87,7 +87,7 @@ class _Car extends StatelessWidget { ), Text( descriptionCar, - style: const TextStyle(fontSize: 18, fontWeight: FontWeight.normal), + style: const TextStyle(fontSize: 16, fontWeight: FontWeight.normal), ), const SizedBox(height: 8), // Отступ между текстом и виджетом со скидкой diff --git a/lib/presentation/home_page/home_page.dart b/lib/presentation/home_page/home_page.dart index f35796c..55b5787 100644 --- a/lib/presentation/home_page/home_page.dart +++ b/lib/presentation/home_page/home_page.dart @@ -173,7 +173,7 @@ class _BodyState extends State<_Body> { ); } - void _onLike(String? id, String title, bool isLiked) { + void _onLike(int? id, String title, bool isLiked) { if (id != null) { context.read().add(ChangeLikeEvent(id)); _showSnackBar(context, title, !isLiked); @@ -185,9 +185,9 @@ class _BodyState extends State<_Body> { ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: Text( '$title ${isLiked ? context.locale.liked : context.locale.disliked}', - style: Theme.of(context).textTheme.bodyLarge, + style: Theme.of(context).textTheme.bodyLarge?.copyWith(color: Colors.white), ), - backgroundColor: Colors.orangeAccent, + backgroundColor: Colors.deepPurple, duration: const Duration(seconds: 1), )); }); diff --git a/lib/presentation/like_bloc/like_bloc.dart b/lib/presentation/like_bloc/like_bloc.dart index 0dd0ab6..e92db14 100644 --- a/lib/presentation/like_bloc/like_bloc.dart +++ b/lib/presentation/like_bloc/like_bloc.dart @@ -15,11 +15,14 @@ class LikeBloc extends Bloc { final prefs = await SharedPreferences.getInstance(); final data = prefs.getStringList(_likedPrefsKey); - emit(state.copyWith(likedIds: data)); + // Преобразуем List в List + final likedIds = data?.map(int.parse).toList() ?? []; + + emit(state.copyWith(likedIds: likedIds)); } Future _onChangeLike(ChangeLikeEvent event, Emitter emit) async { - final updatedList = List.from(state.likedIds ?? []); + final updatedList = List.from(state.likedIds ?? []); if (updatedList.contains(event.id)) { updatedList.remove(event.id); @@ -28,7 +31,10 @@ class LikeBloc extends Bloc { } final prefs = await SharedPreferences.getInstance(); - prefs.setStringList(_likedPrefsKey, updatedList); + + // Сохраняем List в SharedPreferences + // Преобразуем список целых чисел в список строк + prefs.setStringList(_likedPrefsKey, updatedList.map((id) => id.toString()).toList()); emit(state.copyWith(likedIds: updatedList)); } diff --git a/lib/presentation/like_bloc/like_event.dart b/lib/presentation/like_bloc/like_event.dart index d0326d8..84c6ef3 100644 --- a/lib/presentation/like_bloc/like_event.dart +++ b/lib/presentation/like_bloc/like_event.dart @@ -7,7 +7,7 @@ class LoadLikesEvent extends LikeEvent { } class ChangeLikeEvent extends LikeEvent { - final String id; + final int id; const ChangeLikeEvent(this.id); } diff --git a/lib/presentation/like_bloc/like_state.dart b/lib/presentation/like_bloc/like_state.dart index 5f0959f..ded3084 100644 --- a/lib/presentation/like_bloc/like_state.dart +++ b/lib/presentation/like_bloc/like_state.dart @@ -5,7 +5,7 @@ part 'like_state.g.dart'; @CopyWith() class LikeState extends Equatable { - final List? likedIds; + final List? likedIds; const LikeState({required this.likedIds}); diff --git a/lib/presentation/like_bloc/like_state.g.dart b/lib/presentation/like_bloc/like_state.g.dart index 0888cf2..faad4f0 100644 --- a/lib/presentation/like_bloc/like_state.g.dart +++ b/lib/presentation/like_bloc/like_state.g.dart @@ -7,7 +7,7 @@ part of 'like_state.dart'; // ************************************************************************** abstract class _$LikeStateCWProxy { - LikeState likedIds(List? likedIds); + LikeState likedIds(List? likedIds); /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `LikeState(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. /// @@ -16,7 +16,7 @@ abstract class _$LikeStateCWProxy { /// LikeState(...).copyWith(id: 12, name: "My name") /// ```` LikeState call({ - List? likedIds, + List? likedIds, }); } @@ -27,7 +27,7 @@ class _$LikeStateCWProxyImpl implements _$LikeStateCWProxy { final LikeState _value; @override - LikeState likedIds(List? likedIds) => this(likedIds: likedIds); + LikeState likedIds(List? likedIds) => this(likedIds: likedIds); @override @@ -44,7 +44,7 @@ class _$LikeStateCWProxyImpl implements _$LikeStateCWProxy { likedIds: likedIds == const $CopyWithPlaceholder() ? _value.likedIds // ignore: cast_nullable_to_non_nullable - : likedIds as List?, + : likedIds as List?, ); } }