mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-13 07:55:18 +00:00
share playlists & track support added
This commit is contained in:
parent
b05efd3d36
commit
e3c7b83ae0
@ -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(
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
@ -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],
|
||||||
);
|
);
|
||||||
|
@ -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],
|
||||||
);
|
);
|
||||||
|
Loading…
Reference in New Issue
Block a user