убрал мусор...надеюсь
This commit is contained in:
parent
2e4cfb250a
commit
c3d58bcfc1
@ -3,6 +3,6 @@
|
|||||||
|
|
||||||
"search": "Search",
|
"search": "Search",
|
||||||
"liked": "liked!",
|
"liked": "liked!",
|
||||||
"disliked": "unliked"
|
"disliked": "disliked :((("
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3,5 +3,5 @@
|
|||||||
|
|
||||||
"search": "Поиск",
|
"search": "Поиск",
|
||||||
"liked": "понравился!",
|
"liked": "понравился!",
|
||||||
"disliked": "разонравился"
|
"disliked": "разонравился :((("
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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 :(((';
|
||||||
}
|
}
|
||||||
|
@ -13,5 +13,5 @@ class AppLocaleRu extends AppLocale {
|
|||||||
String get liked => 'понравился!';
|
String get liked => 'понравился!';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get disliked => 'разонравился';
|
String get disliked => 'разонравился :(((';
|
||||||
}
|
}
|
||||||
|
@ -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(
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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';
|
||||||
|
@ -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),
|
||||||
|
@ -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,
|
||||||
|
@ -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()),
|
||||||
|
@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user