Skip to content

Commit a2bbfab

Browse files
committed
✅ done Home Page - Fetching Songs - Display Songs Using Blog
1 parent f00fe5b commit a2bbfab

File tree

13 files changed

+309
-64
lines changed

13 files changed

+309
-64
lines changed

lib/core/configs/theme/app_color.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,5 @@ class AppColors {
1212
static const dark = Color(0xff313131);
1313

1414
static const blue = Color(0xff288CE9);
15+
static const greyWhite = Color(0xffE6E6E6);
1516
}

lib/core/constants/app_urls.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
class AppUrls {
22
static const fireStorage =
33
'https://firebasestorage.googleapis.com/v0/b/spotify-flutter-4aa82.appspot.com/o/covers%2F';
4+
static const temp = 'Son-Tung-';
45
static const mediaAlt = 'alt=media';
56
}

lib/data/repository/song/song_repository_impl.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,9 @@ class SongRepositoryImpl extends SongsRepository {
88
Future<Either> getNewsSongs() async {
99
return await sl<SongFirebaseService>().getNewsSongs();
1010
}
11+
12+
@override
13+
Future<Either> getPlayList() async {
14+
return await sl<SongFirebaseService>().getPlayList();
15+
}
1116
}

lib/data/sources/song/song_firebase_service.dart

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import 'package:cloud_firestore/cloud_firestore.dart';
22
import 'package:dartz/dartz.dart';
3+
import 'package:flutter/foundation.dart';
34
import 'package:spotify_with_flutter/data/models/songs/songs.dart';
45
import 'package:spotify_with_flutter/domain/entities/songs/songs.dart';
56

67
abstract class SongFirebaseService {
78
Future<Either> getNewsSongs();
9+
Future<Either> getPlayList();
810
}
911

1012
class SongFirebaseServiceImpl extends SongFirebaseService {
@@ -13,7 +15,7 @@ class SongFirebaseServiceImpl extends SongFirebaseService {
1315
try {
1416
List<SongEntity> songs = [];
1517
var data = await FirebaseFirestore.instance
16-
.collection('songs')
18+
.collection('Songs')
1719
.orderBy('releaseDate', descending: true)
1820
.limit(3)
1921
.get();
@@ -25,6 +27,32 @@ class SongFirebaseServiceImpl extends SongFirebaseService {
2527

2628
return right(songs);
2729
} on Exception catch (e) {
30+
if (kDebugMode) {
31+
print('Error: $e');
32+
}
33+
return const Left('An error occurred, Please try again.');
34+
}
35+
}
36+
37+
@override
38+
Future<Either> getPlayList() async {
39+
try {
40+
List<SongEntity> songs = [];
41+
var data = await FirebaseFirestore.instance
42+
.collection('Songs')
43+
.orderBy('releaseDate', descending: true)
44+
.get();
45+
46+
for (var element in data.docs) {
47+
var songModel = SongModel.fromJson(element.data());
48+
songs.add(songModel.toEntity());
49+
}
50+
51+
return right(songs);
52+
} on Exception catch (e) {
53+
if (kDebugMode) {
54+
print('Error: $e');
55+
}
2856
return const Left('An error occurred, Please try again.');
2957
}
3058
}

lib/domain/repository/song/song.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@ import 'package:dartz/dartz.dart';
22

33
abstract class SongsRepository {
44
Future<Either> getNewsSongs();
5+
Future<Either> getPlayList();
56
}

lib/domain/usecase/auth/signup.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import 'package:dartz/dartz.dart';
2-
import 'package:firebase_auth/firebase_auth.dart';
32
import 'package:spotify_with_flutter/core/usecase/usecase.dart';
43
import 'package:spotify_with_flutter/data/models/auth/create_user_req.dart';
54
import 'package:spotify_with_flutter/domain/repository/auth/auth.dart';
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import 'package:dartz/dartz.dart';
2+
import 'package:spotify_with_flutter/core/usecase/usecase.dart';
3+
import 'package:spotify_with_flutter/domain/repository/song/song.dart';
4+
import 'package:spotify_with_flutter/service_locator.dart';
5+
6+
class GetPlayListUseCase implements UseCase<Either, dynamic> {
7+
@override
8+
Future<Either> call({params}) async {
9+
return sl<SongsRepository>().getPlayList();
10+
}
11+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import 'package:flutter_bloc/flutter_bloc.dart';
2+
import 'package:spotify_with_flutter/domain/usecase/song/get_play_list.dart';
3+
import 'package:spotify_with_flutter/presentation/home/bloc/play_list_state.dart';
4+
import 'package:spotify_with_flutter/service_locator.dart';
5+
6+
class PlayListCubit extends Cubit<PlayListState> {
7+
PlayListCubit() : super(PlayListLoading());
8+
9+
Future<void> getPlayList() async {
10+
var returnedSongs = await sl<GetPlayListUseCase>().call();
11+
12+
returnedSongs.fold(
13+
(l) {
14+
emit(PlayListLoadFailure());
15+
},
16+
(data) {
17+
emit(
18+
PlayListLoaded(songs: data),
19+
);
20+
},
21+
);
22+
}
23+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import 'package:spotify_with_flutter/domain/entities/songs/songs.dart';
2+
3+
abstract class PlayListState {}
4+
5+
class PlayListLoading extends PlayListState {}
6+
7+
class PlayListLoaded extends PlayListState {
8+
final List<SongEntity> songs;
9+
PlayListLoaded({required this.songs});
10+
}
11+
12+
class PlayListLoadFailure extends PlayListState {}

lib/presentation/home/pages/home.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import 'package:spotify_with_flutter/core/configs/assets/app_images.dart';
55
import 'package:spotify_with_flutter/core/configs/assets/app_vectors.dart';
66
import 'package:spotify_with_flutter/core/configs/theme/app_color.dart';
77
import 'package:spotify_with_flutter/presentation/home/widgets/news_songs.dart';
8+
import 'package:spotify_with_flutter/presentation/home/widgets/play_list.dart';
89

910
class HomePage extends StatefulWidget {
1011
const HomePage({super.key});
@@ -32,6 +33,7 @@ class _HomePageState extends State<HomePage> with TickerProviderStateMixin {
3233
children: [
3334
_homeTopCard(),
3435
_tabs(),
36+
const SizedBox(height: 10),
3537
SizedBox(
3638
height: 266,
3739
child: TabBarView(
@@ -44,6 +46,8 @@ class _HomePageState extends State<HomePage> with TickerProviderStateMixin {
4446
],
4547
),
4648
),
49+
const SizedBox(height: 25),
50+
const PlayList(),
4751
],
4852
),
4953
),

0 commit comments

Comments
 (0)