Skip to content

Commit 044b685

Browse files
committed
🧱 done with SongPlayer Page
1 parent e53a3cc commit 044b685

File tree

6 files changed

+63
-9
lines changed

6 files changed

+63
-9
lines changed

lib/core/constants/app_urls.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
class AppUrls {
22
static const coverFireStorage = 'https://firebasestorage.googleapis.com/v0/b/spotify-flutter-4aa82.appspot.com/o/covers%2F';
3-
static const songFireStorage = 'https://firebasestorage.googleapis.com/v0/b/spotify-flutter-4aa82.appspot.com/o/covers%2F';
3+
static const songFireStorage = 'https://firebasestorage.googleapis.com/v0/b/spotify-flutter-4aa82.appspot.com/o/songs%2F';
44
static const temp = 'Son-Tung-';
55
static const mediaAlt = 'alt=media';
66
}

lib/data/repository/song/song_repository_impl.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,10 @@ class SongRepositoryImpl extends SongsRepository {
1313
Future<Either> getPlayList() async {
1414
return await sl<SongFirebaseService>().getPlayList();
1515
}
16+
17+
@override
18+
Future<Either> addOrRemoveFavoriteSongs() {
19+
// TODO: implement addOrRemoveFavoriteSongs
20+
throw UnimplementedError();
21+
}
1622
}

lib/data/sources/auth/auth_firebase_service.dart

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,12 @@ class AuthFirebaseServiceImpl extends AuthFirebaseService {
4040
password: createUserReq.password,
4141
);
4242

43-
FirebaseFirestore.instance.collection('Users').add({
44-
'name': createUserReq.fullName,
45-
'email': data.user?.email,
46-
});
43+
FirebaseFirestore.instance.collection('Users').doc(data.user?.uid).set(
44+
{
45+
'name': createUserReq.fullName,
46+
'email': data.user?.email,
47+
},
48+
);
4749

4850
return const Right('Signup was Successful');
4951
} on FirebaseAuthException catch (e) {

lib/data/sources/song/song_firebase_service.dart

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

78
abstract class SongFirebaseService {
89
Future<Either> getNewsSongs();
910
Future<Either> getPlayList();
11+
Future<Either> addOrRemoveFavoriteSong();
1012
}
1113

1214
class SongFirebaseServiceImpl extends SongFirebaseService {
@@ -49,4 +51,17 @@ class SongFirebaseServiceImpl extends SongFirebaseService {
4951
return const Left('An error occurred, Please try again.');
5052
}
5153
}
54+
55+
@override
56+
Future<Either> addOrRemoveFavoriteSong() async {
57+
final FirebaseAuth firebaseAuth = FirebaseAuth.instance;
58+
59+
final FirebaseFirestore firebaseFirestore = FirebaseFirestore.instance;
60+
61+
var user = await firebaseAuth.currentUser;
62+
63+
String uID = us
64+
65+
66+
}
5267
}

lib/presentation/song_player.dart/bloc/song_player_cubit.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ class SongPlayerCubit extends Cubit<SongPlayerState> {
1414
updateSongPlayer();
1515
});
1616

17-
audioPlayer.positionStream.listen((duration) {
18-
songDuration = duration;
17+
audioPlayer.durationStream.listen((duration) {
18+
songDuration = duration!;
1919
});
2020
}
2121

lib/presentation/song_player.dart/pages/song_player.dart

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,12 +124,37 @@ class SongPlayerPage extends StatelessWidget {
124124
Slider(
125125
value: context.read<SongPlayerCubit>().songPosition.inSeconds.toDouble(),
126126
min: 0.0,
127-
max: context.read<SongPlayerCubit>().songPosition.inSeconds.toDouble(),
127+
max: context.read<SongPlayerCubit>().songDuration.inSeconds.toDouble(),
128128
onChanged: (value) {},
129129
),
130130
const SizedBox(height: 20),
131131
Row(
132-
children: [],
132+
mainAxisAlignment: MainAxisAlignment.spaceBetween,
133+
children: [
134+
Text(
135+
_formatDuration(context.read<SongPlayerCubit>().songPosition),
136+
),
137+
Text(
138+
_formatDuration(context.read<SongPlayerCubit>().songDuration),
139+
)
140+
],
141+
),
142+
const SizedBox(height: 20),
143+
GestureDetector(
144+
onTap: () {
145+
context.read<SongPlayerCubit>().playOrPauseSong();
146+
},
147+
child: Container(
148+
height: 60,
149+
width: 60,
150+
decoration: const BoxDecoration(
151+
shape: BoxShape.circle,
152+
color: AppColors.primary,
153+
),
154+
child: Icon(
155+
context.read<SongPlayerCubit>().audioPlayer.playing ? Icons.pause : Icons.play_arrow,
156+
),
157+
),
133158
),
134159
],
135160
);
@@ -139,4 +164,10 @@ class SongPlayerPage extends StatelessWidget {
139164
},
140165
);
141166
}
167+
168+
String _formatDuration(Duration duration) {
169+
final minutes = duration.inMinutes.remainder(60);
170+
final seconds = duration.inSeconds.remainder(60);
171+
return '${minutes.toString().padLeft(2, '0')}:${seconds.toString().padLeft(2, '0')}';
172+
}
142173
}

0 commit comments

Comments
 (0)