share playlists & track support added

This commit is contained in:
Kingkor Roy Tirtho 2022-06-03 11:41:21 +06:00
parent b05efd3d36
commit e3c7b83ae0
4 changed files with 66 additions and 1 deletions

View File

@ -1,3 +1,4 @@
import 'package:flutter/services.dart';
import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:spotube/components/Shared/HeartButton.dart'; import 'package:spotube/components/Shared/HeartButton.dart';
@ -109,6 +110,27 @@ class PlaylistView extends HookConsumerWidget {
}, },
); );
}), }),
IconButton(
icon: const Icon(Icons.share_rounded),
onPressed: () {
final data =
"https://open.spotify.com/playlist/${playlist.id}";
Clipboard.setData(
ClipboardData(text: data),
).then((_) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
width: 300,
behavior: SnackBarBehavior.floating,
content: Text(
"Copied $data to clipboard",
textAlign: TextAlign.center,
),
),
);
});
},
),
// play playlist // play playlist
IconButton( IconButton(
icon: Icon( icon: Icon(

View File

@ -1,5 +1,6 @@
import 'package:cached_network_image/cached_network_image.dart'; import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:spotify/spotify.dart'; import 'package:spotify/spotify.dart';
@ -57,6 +58,22 @@ class TrackTile extends HookConsumerWidget {
return await spotify.playlists.removeTrack(track.value.uri!, playlistId!); return await spotify.playlists.removeTrack(track.value.uri!, playlistId!);
}, [playlistId, spotify, track.value.uri]); }, [playlistId, spotify, track.value.uri]);
void actionShare(Track track) {
final data = "https://open.spotify.com/track/${track.id}";
Clipboard.setData(ClipboardData(text: data)).then((_) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
width: 300,
behavior: SnackBarBehavior.floating,
content: Text(
"Copied $data to clipboard",
textAlign: TextAlign.center,
),
),
);
});
}
actionAddToPlaylist() async { actionAddToPlaylist() async {
showDialog( showDialog(
context: context, context: context,
@ -252,6 +269,16 @@ class TrackTile extends HookConsumerWidget {
], ],
), ),
value: "favorite", value: "favorite",
),
PopupMenuItem(
child: Row(
children: const [
Icon(Icons.share_rounded),
SizedBox(width: 10),
Text("Share")
],
),
value: "share",
) )
]; ];
}, },
@ -266,6 +293,9 @@ class TrackTile extends HookConsumerWidget {
case "remove-playlist": case "remove-playlist":
actionRemoveFromPlaylist(); actionRemoveFromPlaylist();
break; break;
case "share":
actionShare(track.value);
break;
} }
}, },
); );

View File

@ -13,7 +13,6 @@ ThemeData darkTheme({
scaffoldBackgroundColor: backgroundMaterialColor[900], scaffoldBackgroundColor: backgroundMaterialColor[900],
dialogBackgroundColor: backgroundMaterialColor[800], dialogBackgroundColor: backgroundMaterialColor[800],
shadowColor: Colors.black26, shadowColor: Colors.black26,
popupMenuTheme: PopupMenuThemeData(color: backgroundMaterialColor[800]),
buttonTheme: ButtonThemeData( buttonTheme: ButtonThemeData(
buttonColor: accentMaterialColor, buttonColor: accentMaterialColor,
), ),
@ -56,6 +55,13 @@ ThemeData darkTheme({
), ),
), ),
), ),
popupMenuTheme: PopupMenuThemeData(
color: backgroundMaterialColor[800],
elevation: 2,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(18.0),
),
),
cardColor: backgroundMaterialColor[800], cardColor: backgroundMaterialColor[800],
canvasColor: backgroundMaterialColor[900], canvasColor: backgroundMaterialColor[900],
); );

View File

@ -81,6 +81,13 @@ ThemeData lightTheme({
), ),
), ),
), ),
popupMenuTheme: PopupMenuThemeData(
color: backgroundMaterialColor[100],
elevation: 2,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(18.0),
),
),
cardColor: backgroundMaterialColor[50], cardColor: backgroundMaterialColor[50],
canvasColor: backgroundMaterialColor[50], canvasColor: backgroundMaterialColor[50],
); );