diff --git a/lib/classification/classification.dart b/lib/classification/classification.dart index 0483f2533556ac02890b4f2e07f1582a75de3dd5..e4f4dd2abc3838085511dc87ff7047c619f5606e 100644 --- a/lib/classification/classification.dart +++ b/lib/classification/classification.dart @@ -5,6 +5,7 @@ import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; import 'package:flutter_custom_clippers/flutter_custom_clippers.dart'; import '../main.dart'; +import '../widgets/MusicPlayerState.dart'; import 'CustomSearchDelegate.dart'; import '../homepage.dart'; @@ -210,7 +211,7 @@ class _ClassificationPageState extends State<ClassificationPage> { onPressed: () { print(changeFirebase().checkIfEverythingSelected(snapshot).toString()); if (changeFirebase().checkIfEverythingSelected(snapshot)) { - Navigator.push(context, MaterialPageRoute(builder: (context) => HUD())); + Navigator.push(context, MaterialPageRoute(builder: (context)=>MusicPlayerState(child: const HUD()))); } else{ setState(() { diff --git a/lib/homepage.dart b/lib/homepage.dart index ab0fbb264f4cc13a1f4104ef87e543098e1582e1..8b8c7f38000ad0bd39d46af2dd3a20fb9c87052b 100644 --- a/lib/homepage.dart +++ b/lib/homepage.dart @@ -115,50 +115,10 @@ class HomePage extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[ - MusicPlayerState.of(context).connected - ? Center( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - MusicPlayerState.of(context).albumImage != null - ? Padding( - padding: const EdgeInsets.only(top: 30), - child: DropShadowImage( - image: Image( - image: MusicPlayerState.of(context) - .albumImage! - .image, - width: 250, - height: 250, - ), - offset: Offset(10, 10), - scale: 1, - blurRadius: 10, - borderRadius: 20, - ), - ) - : MusicPlayerState.of(context).spotifyImageWidget(), - Container( - alignment: Alignment.topCenter, - padding: const EdgeInsets.all(2), - child: Column(children: [ - Padding( - padding: const EdgeInsets.only(top: 20), - child: Text(track.name, - style: const TextStyle( - fontSize: 16.0, - fontWeight: FontWeight.bold, - color: Colors.black)), - ), - Padding( - padding: const EdgeInsets.only(top: 1), - child: Text(track.album.name), - ), - ])) - ], - ), - ) - : const Text('Connect to see an image...'), + StreamBuilder<void>( + stream: MusicPlayerState.of(context).playStatedStream.stream, + builder: (context, _) => SongInfo(), + ), Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: <Widget>[ @@ -168,8 +128,8 @@ class HomePage extends StatelessWidget { padding: EdgeInsets.zero, child: Icon(Icons.skip_previous_outlined)), onPressed: () { - skipPrevious; - MusicPlayerState.of(context).rebuildStream.sink.add(null); + var state = MusicPlayerState.of(context); + SpotifySdk.skipPrevious().then((value) => state.updatePlayerState()); }), StreamBuilder<void>( stream: MusicPlayerState.of(context).playStatedStream.stream, @@ -181,8 +141,8 @@ class HomePage extends StatelessWidget { padding: EdgeInsets.zero, child: Icon(Icons.skip_next_outlined)), onPressed: () { - skipNext(); - MusicPlayerState.of(context).rebuildStream.sink.add(null); + var state = MusicPlayerState.of(context); + SpotifySdk.skipNext().then((value) => state.updatePlayerState()); }), ], ), @@ -283,6 +243,69 @@ class HomePage extends StatelessWidget { } } +class SongInfo extends StatelessWidget{ + const SongInfo({ + Key? key, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + Track? track; + if (MusicPlayerState.of(context).playerState == null) { + return const Text("PlayState is Null"); + } else { + track = MusicPlayerState.of(context).playerState!.track; + } + if (MusicPlayerState.of(context).connected && track != null){ + return Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + MusicPlayerState.of(context).albumImage != null + ? Padding( + padding: const EdgeInsets.only(top: 1), + child: DropShadowImage( + image: Image( + image: MusicPlayerState.of(context) + .albumImage! + .image, + width: 300, + height: 300, + ), + offset: Offset(10, 10), + scale: 1, + blurRadius: 10, + borderRadius: 20, + ), + ) + : MusicPlayerState.of(context).spotifyImageWidget(MusicPlayerState.of(context).currentTrackImageUri!), + Container( + alignment: Alignment.topCenter, + padding: const EdgeInsets.all(2), + child: Column(children: [ + Padding( + padding: const EdgeInsets.only(top: 20), + child: Text(track.name, + style: const TextStyle( + fontSize: 16.0, + fontWeight: FontWeight.bold, + color: Colors.black)), + ), + Padding( + padding: const EdgeInsets.only(top: 1), + child: Text(track.album.name), + ), + ])) + ], + ), + ); + } else { + return const Text('Connect to see an image...'); + } + } + +} + class ControlButtons extends StatelessWidget { const ControlButtons({ Key? key, diff --git a/lib/loginRegister/login.dart b/lib/loginRegister/login.dart index 11f3f81aca9cca631b5294e4bc6589a8c1684495..15ebe314e789d123aa69c3dfc76279b440596034 100644 --- a/lib/loginRegister/login.dart +++ b/lib/loginRegister/login.dart @@ -1,6 +1,7 @@ import 'package:ambient/classification/classification.dart'; import 'package:ambient/loginRegister/registration.dart'; import 'package:ambient/loginRegister/widgets.dart'; +import 'package:ambient/widgets/MusicPlayerState.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; @@ -89,7 +90,8 @@ class _LoginPageState extends State<LoginPage> { style: TextStyle(color: Colors.red),) : const SizedBox(), loginRegisterButton(context, true, (){ - FirebaseAuth.instance.signInWithEmailAndPassword( + //Todo undo comment + /*FirebaseAuth.instance.signInWithEmailAndPassword( email: _emailTextController.text, password: _passwordTextController.text).then((value) { Navigator.push(context, MaterialPageRoute(builder: (context)=>const HUD())); @@ -97,7 +99,8 @@ class _LoginPageState extends State<LoginPage> { setState(() { _wrongInput = true; }); - }); + });*/ + Navigator.push(context, MaterialPageRoute(builder: (context)=>MusicPlayerState(child: const HUD()))); }), registrationPage(), diff --git a/lib/main.dart b/lib/main.dart index 5859ea986a18dfd1d174ac71b6f13bd66603eb23..ee94a0959ff8d0ab1eddd769479ebaaa5d385d2b 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,3 +1,4 @@ +import 'package:ambient/loginRegister/registration.dart'; import 'package:ambient/searchpage.dart'; import 'package:ambient/widgets/MusicPlayerState.dart'; import 'package:ambient/widgets/navbars.dart'; @@ -5,9 +6,7 @@ import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart'; -import 'package:spotify_sdk/models/player_state.dart'; import 'package:spotify_sdk/models/track.dart'; -import 'package:spotify_sdk/spotify_sdk.dart'; import 'homepage.dart'; import 'moodpage.dart'; @@ -24,12 +23,14 @@ class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { - return MaterialApp( + return const MaterialApp( debugShowCheckedModeBanner: false, - home: MusicPlayerState( - child: const HUD(), - //Todo change HUD() => RegistrationPage() - ), + home: RegistrationPage(), + /** + * moin + * test123@test.com + * moin + */ ); } } @@ -126,6 +127,7 @@ class MusicBar extends StatelessWidget { child: Text('PlayState or track is Null'), ); } else { + //Todo maybe undo MusicPlayerState.of(context).currentTrackImageUri = track!.imageUri; } return Container( @@ -144,7 +146,7 @@ class MusicBar extends StatelessWidget { child: Column(children: [ Padding( padding: const EdgeInsets.only(bottom: 5, top: 5), - child: Text(track.name, + child: Text(track!.name, style: const TextStyle( fontSize: 16.0, fontWeight: FontWeight.bold, diff --git a/lib/widgets/musicPlayerState.dart b/lib/widgets/musicPlayerState.dart index 31333884def47dae24dcc37d067af44aa281ce30..83c4c672452afd309183b312f6757a2b1e0415bd 100644 --- a/lib/widgets/musicPlayerState.dart +++ b/lib/widgets/musicPlayerState.dart @@ -7,7 +7,6 @@ import 'package:spotify_sdk/models/image_uri.dart'; import 'package:spotify_sdk/models/player_state.dart'; import 'package:spotify_sdk/spotify_sdk.dart'; - class MusicPlayerState extends InheritedWidget { MusicPlayerState({super.key, required super.child}); @@ -19,7 +18,6 @@ class MusicPlayerState extends InheritedWidget { late ImageUri? currentTrackImageUri; Image? albumImage; - static MusicPlayerState? maybeOf(BuildContext context) => context.dependOnInheritedWidgetOfExactType<MusicPlayerState>(); @@ -29,16 +27,16 @@ class MusicPlayerState extends InheritedWidget { return result!; } - void setLoading(bool loading){ + void setLoading(bool loading) { this.loading = loading; rebuildStream.sink.add(null); } void updatePlayerState() async { playerState = await getPlayerState(); + //loadAlbumImage().then((value) => playStatedStream.sink.add(null)); currentTrackImageUri = playerState?.track?.imageUri; - spotifyImageWidget(); - //rebuildStream.sink.add(null); + spotifyImageWidget(currentTrackImageUri!); playStatedStream.sink.add(null); } @@ -66,7 +64,7 @@ class MusicPlayerState extends InheritedWidget { setStatus(result ? 'connect to spotify successful' : 'connect to spotify failed'); - if(result){ + if (result) { playerState = await getPlayerState(); setLoading(false); } @@ -81,16 +79,19 @@ class MusicPlayerState extends InheritedWidget { return connected; } - Widget spotifyImageWidget() { + //Todo how does the FutureBuilder works + Widget spotifyImageWidget(ImageUri imageUri) { + print("-------------------------------------------------moin ${albumImage?.hashCode} --------------------------------"); return FutureBuilder( future: SpotifySdk.getImage( - - imageUri: currentTrackImageUri!, + imageUri: imageUri, dimension: ImageDimension.large, ), builder: (BuildContext context, AsyncSnapshot<Uint8List?> snapshot) { if (snapshot.hasData) { + print("-------------------------------------------------bevor ${albumImage?.hashCode} --------------------------------"); albumImage = Image.memory(snapshot.data!); + print("-------------------------------------------------after ${albumImage?.hashCode} --------------------------------"); rebuildStream.sink.add(null); return const Center(child: Text('Getting image...')); } else if (snapshot.hasError) { @@ -110,6 +111,10 @@ class MusicPlayerState extends InheritedWidget { }); } + Future<void> loadAlbumImage() async { + currentTrackImageUri = playerState?.track?.imageUri; + spotifyImageWidget(currentTrackImageUri!); + } void setStatus(String code, {String? message}) { var text = message ?? ''; @@ -125,7 +130,7 @@ class MusicPlayerState extends InheritedWidget { setStatus('not implemented'); } } - + @override bool updateShouldNotify(covariant MusicPlayerState oldWidget) { return loading != oldWidget.loading && connected != oldWidget.connected;