Skip to content

Commit

Permalink
Merge pull request #33 from OmriLevy888/SongProvider-as-a-singleton
Browse files Browse the repository at this point in the history
[#32] Song provider is now a singleton
  • Loading branch information
OmriLevy888 committed May 4, 2022
2 parents fa28eb2 + ae372b0 commit cea14e2
Show file tree
Hide file tree
Showing 6 changed files with 30 additions and 45 deletions.
14 changes: 6 additions & 8 deletions lib/conf_page/conf_page_widget.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,7 @@ import 'package:song_tinder/models/models.dart';
import 'package:multi_select_flutter/multi_select_flutter.dart';

class ConfPageWidget extends StatefulWidget {
ConfPageWidget({Key? key, required this.songProvider}) : super(key: key);

late SongProvider songProvider;
ConfPageWidget({Key? key}) : super(key: key);

@override
State<ConfPageWidget> createState() => _ConfPageWidgetState();
Expand All @@ -25,11 +23,11 @@ class _ConfPageWidgetState extends State<ConfPageWidget> {

@override
void initState() {
_availablePlaylists = widget.songProvider.listPlaylists();
_availablePlaylists = SongProvider().listPlaylists();

List<SongModel> randomSongs = <SongModel>[];
for (var i = 0; i < 8; i++) {
randomSongs.add(widget.songProvider.poll());
randomSongs.add(SongProvider().poll());
}
_additionalSourceOptions = [
PlaylistModel(name: 'Random', songs: randomSongs),
Expand Down Expand Up @@ -111,9 +109,9 @@ class _ConfPageWidgetState extends State<ConfPageWidget> {
child: const Text('Save', style: TextStyle(fontSize: 15)),
onPressed: () {
if (_formKey.currentState!.validate()) {
widget.songProvider.songProviderConfig.source = _sourcePlaylist;
widget.songProvider.songProviderConfig.destination = _destPlaylist;
widget.songProvider.songProviderConfig.manualDestinations = _manualActionPlaylists;
SongProvider().songProviderConfig.source = _sourcePlaylist;
SongProvider().songProviderConfig.destination = _destPlaylist;
SongProvider().songProviderConfig.manualDestinations = _manualActionPlaylists;
_formKey.currentState?.save();
print('Configurations were saved to SongProvider successfully');
}
Expand Down
6 changes: 2 additions & 4 deletions lib/home_page/home_page_widget.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,7 @@ import 'package:song_tinder/home_page/song_provider.dart';
import 'package:song_tinder/widgets/widgets.dart';

class HomePageWidget extends StatefulWidget {
HomePageWidget({Key? key, required this.songProvider}) : super(key: key);

late SongProvider songProvider;
HomePageWidget({Key? key}) : super(key: key);

@override
State<HomePageWidget> createState() => _HomePageWidgetState();
Expand All @@ -16,7 +14,7 @@ class _HomePageWidgetState extends State<HomePageWidget> {

@override
void initState() {
_swipeCards = HomePageSwipeCards(songProvider: widget.songProvider);
_swipeCards = HomePageSwipeCards();

super.initState();
}
Expand Down
20 changes: 11 additions & 9 deletions lib/home_page/song_provider.dart
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import 'package:song_tinder/home_page/dummy_music_service.dart';
import 'package:song_tinder/home_page/music_service_interface.dart';
import 'package:song_tinder/models/models.dart';
import 'music_service_factory.dart';

enum MusicServices { appleMusic, spotify }
enum MusicServices { none, appleMusic, spotify }

class MusicServiceConfig {
const MusicServiceConfig({
Expand All @@ -29,14 +30,15 @@ class SongProviderConfig {
}

class SongProvider {
SongProvider(
{required this.musicServiceConfig,
required this.songProviderConfig,
required this.musicService});

MusicServiceConfig musicServiceConfig;
SongProviderConfig songProviderConfig;
MusicServiceInterface musicService;
static final SongProvider _instance = SongProvider._internal();

factory SongProvider() { return _instance; }

SongProvider._internal();

MusicServiceConfig musicServiceConfig = const MusicServiceConfig(service: MusicServices.none);
SongProviderConfig songProviderConfig = SongProviderConfig();
MusicServiceInterface musicService = DummyMusicService();

void setMusicServiceConfig(MusicServiceConfig config) {
musicServiceConfig = config;
Expand Down
14 changes: 3 additions & 11 deletions lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,6 @@ void main() {
class MyApp extends StatelessWidget {
MyApp({Key? key}) : super(key: key);


// The SongProviderConfig should be updated from the value in the config page
final _songProvider = SongProvider(
musicServiceConfig: const MusicServiceConfig(service: MusicServices.spotify),
songProviderConfig: SongProviderConfig(),
musicService: DummyMusicService(),
);

@override
Widget build(BuildContext context) {
return MaterialApp(
Expand All @@ -33,7 +25,7 @@ class MyApp extends StatelessWidget {
child: Scaffold(
appBar: AppBar(
title: const Text('Song Tinder'),
actions: <Widget>[SettingsButton(songProvider: _songProvider)],
actions: <Widget>[SettingsButton()],
),
bottomNavigationBar: const BottomAppBar(
color: Colors.blue,
Expand All @@ -46,8 +38,8 @@ class MyApp extends StatelessWidget {
body: TabBarView(
physics: NeverScrollableScrollPhysics(),
children: [
HomePageWidget(songProvider: _songProvider),
ConfPageWidget(songProvider: _songProvider)
HomePageWidget(),
ConfPageWidget()
],
))));
}
Expand Down
14 changes: 5 additions & 9 deletions lib/settings_page/settings_page_widget.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@ import 'package:flutter/material.dart';
import 'package:song_tinder/home_page/song_provider.dart';

class SettingsPageWidget extends StatefulWidget {
SettingsPageWidget({Key? key, required this.songProvider}) : super(key: key);

final SongProvider songProvider;
SettingsPageWidget({Key? key}) : super(key: key);

@override
State<SettingsPageWidget> createState() => _SettingsPageWidgetState();
Expand Down Expand Up @@ -56,14 +54,14 @@ class _SettingsPageWidgetState extends State<SettingsPageWidget> {
void _submitMusicServiceSettings() {
switch (_service) {
case MusicServices.spotify:
widget.songProvider.setMusicServiceConfig(MusicServiceConfig(
SongProvider().setMusicServiceConfig(MusicServiceConfig(
service: _service,
spotifyID: _spotifyIDController.text,
spotifyClientSecret: _spotifyClientSectetController.text,
));
break;
case MusicServices.appleMusic:
widget.songProvider.setMusicServiceConfig(MusicServiceConfig(
SongProvider().setMusicServiceConfig(MusicServiceConfig(
service: _service,
appleMusicKeyIdentifier: _appleMusicKeyIdentifierController.text,
appleMusicISS: _appleMusicISSController.text,
Expand Down Expand Up @@ -120,9 +118,7 @@ class _SettingsPageWidgetState extends State<SettingsPageWidget> {
}

class SettingsButton extends StatelessWidget {
SettingsButton({Key? key, required this.songProvider}) : super(key: key);

final SongProvider songProvider;
SettingsButton({Key? key}) : super(key: key);

@override
Widget build(BuildContext context) {
Expand All @@ -132,6 +128,6 @@ class SettingsButton extends StatelessWidget {
context,
MaterialPageRoute(
builder: (context) =>
SettingsPageWidget(songProvider: songProvider))));
SettingsPageWidget())));
}
}
7 changes: 3 additions & 4 deletions lib/widgets/home_page_swipe_cards.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,9 @@ import 'package:song_tinder/models/models.dart';
import 'package:song_tinder/widgets/widgets.dart';

class HomePageSwipeCards extends StatefulWidget {
HomePageSwipeCards({Key? key, required this.songProvider}) : super(key: key);
HomePageSwipeCards({Key? key}) : super(key: key);

late MatchEngine matchEngine;
late SongProvider songProvider;

@override
State<HomePageSwipeCards> createState() => _HomePageSwipeCardsState();
Expand All @@ -25,7 +24,7 @@ class _HomePageSwipeCardsState extends State<HomePageSwipeCards> {
void initState() {
// Fetch a few songs so we preload the SongModel in the back of the current one
for (int i = 0; i < 8; i++) {
_addSongToStack(widget.songProvider.poll());
_addSongToStack(SongProvider().poll());
}
widget.matchEngine = MatchEngine(swipeItems: _swipeItems);
super.initState();
Expand Down Expand Up @@ -71,7 +70,7 @@ class _HomePageSwipeCardsState extends State<HomePageSwipeCards> {
onStackFinished: () => print('Finished entire stack'),
itemChanged: (SwipeItem item, int index) {
_songQueue.removeFirst();
_addSongToStack(widget.songProvider.poll());
_addSongToStack(SongProvider().poll());
},
);
}
Expand Down

0 comments on commit cea14e2

Please sign in to comment.