убрал мусор...надеюсь

This commit is contained in:
Milana Ievlewa 2024-12-21 02:31:23 +04:00
parent 2e4cfb250a
commit c3d58bcfc1
13 changed files with 17 additions and 48 deletions

View File

@ -3,6 +3,6 @@
"search": "Search", "search": "Search",
"liked": "liked!", "liked": "liked!",
"disliked": "unliked" "disliked": "disliked :((("
} }

View File

@ -3,5 +3,5 @@
"search": "Поиск", "search": "Поиск",
"liked": "понравился!", "liked": "понравился!",
"disliked": "разонравился" "disliked": "разонравился :((("
} }

View File

@ -110,7 +110,7 @@ abstract class AppLocale {
/// No description provided for @disliked. /// No description provided for @disliked.
/// ///
/// In ru, this message translates to: /// In ru, this message translates to:
/// **'разонравился'** /// **'разонравился :((('**
String get disliked; String get disliked;
} }

View File

@ -13,5 +13,5 @@ class AppLocaleEn extends AppLocale {
String get liked => 'liked!'; String get liked => 'liked!';
@override @override
String get disliked => 'unliked'; String get disliked => 'disliked :(((';
} }

View File

@ -13,5 +13,5 @@ class AppLocaleRu extends AppLocale {
String get liked => 'понравился!'; String get liked => 'понравился!';
@override @override
String get disliked => 'разонравился'; String get disliked => 'разонравился :(((';
} }

View File

@ -4,14 +4,10 @@ import 'package:uuid/uuid.dart';
@JsonSerializable(createToJson: false) @JsonSerializable(createToJson: false)
class AlbumDto { class AlbumDto {
final List<AlbumDataDto>? data; final List<AlbumDataDto>? data;
final AlbumPaginationDto? pagination; // Добавлено для пагинации final AlbumPaginationDto? pagination;
const AlbumDto({this.data, this.pagination}); const AlbumDto({this.data, this.pagination});
// Здесь убираем factory и оставляем ваш метод fetchAlbums
// factory AlbumDto.fromJson(Map<String, dynamic> json) => _$AlbumDtoFromJson(json);
// Ваш метод fetchAlbums будет принимать JSON и вызывать конструктор
static AlbumDto fetchAlbums(Map<String, dynamic> json) { static AlbumDto fetchAlbums(Map<String, dynamic> json) {
return AlbumDto( return AlbumDto(
data: (json['data'] as List<dynamic>?) data: (json['data'] as List<dynamic>?)
@ -34,9 +30,6 @@ class AlbumPaginationDto {
const AlbumPaginationDto({this.currentPage, this.hasNextPage, this.lastVisiblePage}); const AlbumPaginationDto({this.currentPage, this.hasNextPage, this.lastVisiblePage});
// Здесь убираем factory
// factory AlbumPaginationDto.fromJson(Map<String, dynamic> json) => _$AlbumPaginationDtoFromJson(json);
// Метод для конструирования экземпляра // Метод для конструирования экземпляра
static AlbumPaginationDto fromJson(Map<String, dynamic> json) { static AlbumPaginationDto fromJson(Map<String, dynamic> json) {
return AlbumPaginationDto( return AlbumPaginationDto(
@ -71,9 +64,6 @@ class AlbumDataDto {
this.images, this.images,
}) : id = id ?? const Uuid().v4(); // Генерация id }) : id = id ?? const Uuid().v4(); // Генерация id
// Здесь убираем factory
// factory AlbumDataDto.fromJson(Map<String, dynamic> json) => _$AlbumDataDtoFromJson(json);
// Метод для конструирования экземпляра // Метод для конструирования экземпляра
static AlbumDataDto fromJson(Map<String, dynamic> json) { static AlbumDataDto fromJson(Map<String, dynamic> json) {
return AlbumDataDto( return AlbumDataDto(
@ -96,9 +86,6 @@ class AlbumDataImagesDto {
const AlbumDataImagesDto({this.jpg}); const AlbumDataImagesDto({this.jpg});
// Здесь убираем factory
// factory AlbumDataImagesDto.fromJson(Map<String, dynamic> json) => _$AlbumDataImagesDtoFromJson(json);
// Метод для конструирования экземпляра // Метод для конструирования экземпляра
static AlbumDataImagesDto fromJson(Map<String, dynamic> json) { static AlbumDataImagesDto fromJson(Map<String, dynamic> json) {
return AlbumDataImagesDto( return AlbumDataImagesDto(
@ -113,9 +100,6 @@ class AlbumDataImagesJPGDto {
const AlbumDataImagesJPGDto({this.image_url}); const AlbumDataImagesJPGDto({this.image_url});
// Здесь убираем factory
// factory AlbumDataImagesJPGDto.fromJson(Map<String, dynamic> json) => _$AlbumDataImagesJPGDtoFromJson(json);
// Метод для конструирования экземпляра // Метод для конструирования экземпляра
static AlbumDataImagesJPGDto fromJson(Map<String, dynamic> json) { static AlbumDataImagesJPGDto fromJson(Map<String, dynamic> json) {
return AlbumDataImagesJPGDto( return AlbumDataImagesJPGDto(

View File

@ -8,7 +8,6 @@ import 'package:uuid/uuid.dart';
import '../../home_page/home_page.dart'; import '../../home_page/home_page.dart';
String generateAlbumId(String name, String artist, String url) { String generateAlbumId(String name, String artist, String url) {
// Простой способ создания уникального идентификатора
return '$name|$artist|$url'; return '$name|$artist|$url';
} }
@ -18,7 +17,6 @@ extension AlbumDataDtoMapper on AlbumDataDto {
List<AlbumDataDto> albums = []; List<AlbumDataDto> albums = [];
for (var album in albumsData) { for (var album in albumsData) {
// Ищем изображение с самым большим размером
String? albumImage; String? albumImage;
// Ищем наиболее подходящее изображение // Ищем наиболее подходящее изображение
@ -85,11 +83,10 @@ extension AlbumDataDtoMapper on AlbumDataDto {
album.genres = genres; album.genres = genres;
album.tracks = tracks; album.tracks = tracks;
// Обновляем дополнительную информацию, если необходимо album.summary = data['album']?['wiki']?['summary'] ?? "missing";
album.summary = data['album']?['wiki']?['summary'] ?? "missing"; // или аналогичное поле
} }
return album; // возвращаем заполненное DTO return album;
} }
CardData toDomain() { CardData toDomain() {
@ -102,18 +99,14 @@ extension AlbumDataDtoMapper on AlbumDataDto {
summary: summary ?? 'UNKNOWN', summary: summary ?? 'UNKNOWN',
genres: genres ?? ['UNKNOWN'], genres: genres ?? ['UNKNOWN'],
tracks: tracks ?? ['UNKNOWN'], tracks: tracks ?? ['UNKNOWN'],
imageUrl: images?.jpg?.image_url ?? 'UNKNOWN', // Привязываем imageUrl к DTO imageUrl: images?.jpg?.image_url ?? 'UNKNOWN',
); );
} }
} }
extension AlbumDtoMapper on AlbumDto { extension AlbumDtoMapper on AlbumDto {
List<AlbumDataDto> fetchAlbumsWithPagination(List<dynamic> albumsData) { List<AlbumDataDto> fetchAlbumsWithPagination(List<dynamic> albumsData) {
// Используем существующий метод для извлечения данных альбомов
List<AlbumDataDto> albums = AlbumDataDto().fetchAlbums(albumsData); List<AlbumDataDto> albums = AlbumDataDto().fetchAlbums(albumsData);
// Другие манипуляции с пагинацией можно добавить здесь,
// если получены дополнительные данные пагинации и необходим их анализ
return albums; return albums;
} }

View File

@ -1,5 +1,5 @@
import 'package:pmd_labs/data/dto/album_dto.dart'; import 'package:pmd_labs/data/dto/album_dto.dart';
import 'package:pmd_labs/data/mapper/album_mapper.dart'; // Путь к вашему мапперу import 'package:pmd_labs/data/mapper/album_mapper.dart';
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:pmd_labs/card_data.dart'; import 'package:pmd_labs/card_data.dart';
import 'package:pretty_dio_logger/pretty_dio_logger.dart'; import 'package:pretty_dio_logger/pretty_dio_logger.dart';
@ -16,9 +16,8 @@ class AlbumRepository extends ApiInterface {
)); ));
static const String apiKey = '535d9d508a785fae99bfb492d8f15a58'; static const String apiKey = '535d9d508a785fae99bfb492d8f15a58';
static const String _baseUrl = 'https://api.your_album_api.com'; // Замените на ваш базовый URL static const String _baseUrl = 'https://api.your_album_api.com';
// Метод для загрузки списка альбомов по названию с учетом пагинации
@override @override
Future<List<CardData>?> loadData({String? albumName, int page = 1, int pageSize = 5}) async { Future<List<CardData>?> loadData({String? albumName, int page = 1, int pageSize = 5}) async {
if (albumName == null || albumName == "") albumName = 'a'; if (albumName == null || albumName == "") albumName = 'a';

View File

@ -130,7 +130,7 @@ class _DetailsPageState extends State<DetailsPage> {
'${albumDetails.artist}', '${albumDetails.artist}',
style: Theme.of(context).textTheme.bodyMedium?.copyWith(color: Colors.white), style: Theme.of(context).textTheme.bodyMedium?.copyWith(color: Colors.white),
), ),
SizedBox(height: 8.0), // Отступ между блоками SizedBox(height: 8.0),
Text( Text(
'Year:', 'Year:',
@ -140,7 +140,7 @@ class _DetailsPageState extends State<DetailsPage> {
'${albumDetails.year}', '${albumDetails.year}',
style: Theme.of(context).textTheme.bodyMedium?.copyWith(color: Colors.white), style: Theme.of(context).textTheme.bodyMedium?.copyWith(color: Colors.white),
), ),
SizedBox(height: 8.0), // Отступ между блоками SizedBox(height: 8.0),
Text( Text(
'Genres:', 'Genres:',
@ -182,7 +182,6 @@ class _DetailsPageState extends State<DetailsPage> {
color: Colors.purple, color: Colors.purple,
), ),
const SizedBox(width: 8.0), const SizedBox(width: 8.0),
// Отступ между иконкой и текстом
Text( Text(
track, track,
style: Theme.of(context).textTheme.bodyMedium?.copyWith(color: Colors.white), style: Theme.of(context).textTheme.bodyMedium?.copyWith(color: Colors.white),
@ -212,7 +211,7 @@ class _DetailsPageState extends State<DetailsPage> {
'Summary:', 'Summary:',
style: Theme.of(context).textTheme.headlineSmall?.copyWith(color: Colors.orange), style: Theme.of(context).textTheme.headlineSmall?.copyWith(color: Colors.orange),
), ),
SizedBox(height: 8.0), // Отступ между заголовком и текстом SizedBox(height: 8.0),
Text( Text(
'${albumDetails.summary}', '${albumDetails.summary}',
style: Theme.of(context).textTheme.bodyMedium?.copyWith(color: Colors.white), style: Theme.of(context).textTheme.bodyMedium?.copyWith(color: Colors.white),

View File

@ -96,7 +96,6 @@ class _Card extends StatelessWidget {
.bodyMedium .bodyMedium
?.copyWith(color: Color(0xFFDCDCDC)), ?.copyWith(color: Color(0xFFDCDCDC)),
), ),
// Здесь можно добавить отображение года и жанров, если это необходимо
Text( Text(
year, year,
style: Theme.of(context).textTheme.bodyMedium, style: Theme.of(context).textTheme.bodyMedium,

View File

@ -43,7 +43,7 @@ class _MyHomePageState extends State<MyHomePage> {
), ),
body: Container( body: Container(
color: const Color(0xFF403042), color: const Color(0xFF403042),
child: const Body(), // Ваш виджет Body child: const Body(),
), ),
); );
} }
@ -136,7 +136,6 @@ class _BodyState extends State<Body> {
style: TextStyle(color: Colors.orange, fontFamily: 'Correction_Tape'), style: TextStyle(color: Colors.orange, fontFamily: 'Correction_Tape'),
), ),
), ),
// GestureDetector размещен справа от поля поиска
GestureDetector( GestureDetector(
onTap: () => onTap: () =>
context.read<LocaleBloc>().add(const ChangeLocaleEvent()), context.read<LocaleBloc>().add(const ChangeLocaleEvent()),

View File

@ -31,9 +31,6 @@ class LikeBloc extends Bloc<LikeEvent, LikeState> {
final prefs = await SharedPreferences.getInstance(); final prefs = await SharedPreferences.getInstance();
await prefs.setStringList(_likedPrefsKey, updatedList); await prefs.setStringList(_likedPrefsKey, updatedList);
// Отладка
print('Saved likes: $updatedList'); // Просто для проверки
emit(state.copyWith(likedIds: updatedList)); emit(state.copyWith(likedIds: updatedList));
} }
} }

View File

@ -22,10 +22,9 @@ class MyApp extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
// Устанавливаем локаль по умолчанию
final initialLocale = kIsWeb final initialLocale = kIsWeb
? const Locale('ru') // Измените это на необходимую локаль для веба ? const Locale('ru')
: Locale(Platform.localeName);// локаль по умолчанию для мобильных приложений или веба : Locale(Platform.localeName);
return BlocProvider<LocaleBloc>( return BlocProvider<LocaleBloc>(
lazy: false, lazy: false,