Skip to content

Instantly share code, notes, and snippets.

View yiss's full-sized avatar
:shipit:

Ilias YAHIA yiss

:shipit:
  • France
View GitHub Profile
@yiss
yiss / main.dart
Created September 19, 2020 18:17
Mini Spotify # Main Dart
void main() {
runApp(MusicPlayerApp());
}
class MusicPlayerApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ProviderScope(
child: MaterialApp(
title: 'Music Player',
@yiss
yiss / playlist_provider.dart
Created September 19, 2020 18:15
Mini Spotify # Playlist Provider
final playlistProvider = Provider((ref) => [
AudioTrackModel(
artistName: 'Benjamin Tissot',
trackName: 'My Old East Coast (feat. Melanie)',
thumbnail: 'https://www.bensound.com/bensound-img/ukulele.jpg',
audioUrl:
'https://www.bensound.com/bensound-music/bensound-ukulele.mp3'),
AudioTrackModel(
artistName: 'Benjamin Tissot',
trackName: 'Creative Minds',
@yiss
yiss / audio_track_model.dart
Created September 19, 2020 18:13
Mini Spotify # AudioTrackModel
class AudioTrackModel {
final artistName;
final trackName;
final audioUrl;
final thumbnail;
AudioTrackModel(
{this.artistName, this.trackName, this.audioUrl, this.thumbnail});
bool get isEmpty =>
@yiss
yiss / pubspec.yaml
Created September 19, 2020 18:11
Mini Spotify # dependencies
dependencies:
flutter:
sdk: flutter
flutter_riverpod: ^0.10.1
state_notifier: ^0.6.0
assets_audio_player: ^2.0.10
@yiss
yiss / player_control.dart
Created September 19, 2020 18:09
Mini Spotify # Player Page Snippet
class PlayerControlWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Column(
children: [
Row(
mainAxisSize: MainAxisSize.max,
children: [
Text('0:00'),
Flexible(
@yiss
yiss / audi_track_tile.dart
Last active September 19, 2020 18:10
Mini Spotify # Audio Track Tile Snippet
class AudioTrackTile extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ListTile(
leading: Image.network(
audioTrack.thumbnail,
height: 60,
width: 60,
fit: BoxFit.cover,
),
final audioPlayerProvider = Provider.autoDispose<AssetsAudioPlayer>((ref) {
final playlist = ref.watch(playlistProvider);
final audioPlayer = AssetsAudioPlayer();
audioPlayer.open(
Playlist(
audios: playlist
.map((audioTrackModel) => Audio.network(audioTrackModel.audioUrl))
.toList()),
autoStart: false);
return audioPlayer;
@yiss
yiss / mobx_extensions.dart
Last active June 30, 2020 12:59
List of useful Mobx Dart extension methods
import 'package:mobx/mobx.dart';
extension MobxObjectExtension<T> on T {
// e.g : instead of using var element = Observable(0); | var element = 0.obs;
Observable get obs => Observable<T>(this);
// e.g : instead of using var element = ObservableFuture.value(0) | var element = 0.fObsValue;
ObservableFuture get fObsValue => ObservableFuture<T>.value(this);
}
@yiss
yiss / counter.dart
Created June 25, 2020 14:16
Mobx counter store with extension methods and late initilizer
import 'package:mobx/mobx.dart';
// Dart Extensions
extension MobxObjectExtension on Object {
Observable get obs => Observable(this);
}
extension MobxFunctionExtension on Function {
Action get action => Action(this);
}
@yiss
yiss / counter.dart
Created June 25, 2020 11:50
Mobx store with dart extension methods
import 'package:mobx/mobx.dart';
// Dart Extensions
extension MobxObjectExtension on Object {
Observable get obs => Observable(this);
}
extension MobxFunctionExtension on Function {
Action get action => Action(this);
}