Skip to content

Commit

Permalink
Fixed auth issues and styling
Browse files Browse the repository at this point in the history
Reformatted track view page again (fixed title from getting cutoff, button style, and wrapped text) and made calendar page start at bottom when necessary
  • Loading branch information
aceeedev committed Aug 6, 2023
1 parent 2881a2a commit 3fea16e
Show file tree
Hide file tree
Showing 13 changed files with 87 additions and 64 deletions.
1 change: 1 addition & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"cSpell.words": [
"acousticness",
"appcheck",
"cupertino",
"Danceability",
"Instrumentalness",
Expand Down
4 changes: 3 additions & 1 deletion lib/backend/spotify_api/auth.dart
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ Future<AccessToken?> requestAccessToken(String? authCode) async {
}
}

Future<AccessToken> getBrandNewAccessToken(String authCode) async {
Future<AccessToken?> getBrandNewAccessToken(String authCode) async {
final url = Uri.https('accounts.spotify.com', '/api/token');
final form = {
'code': authCode,
Expand All @@ -154,6 +154,8 @@ Future<AccessToken> getBrandNewAccessToken(String authCode) async {
await db.Auth.instance.saveAccessToken(newAccessToken);

return newAccessToken;
} else if (response.statusCode == 400) {
return null;
} else {
throw Exception('Response code was not 200, was ${response.statusCode}');
}
Expand Down
10 changes: 6 additions & 4 deletions lib/pages/calendar_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -92,12 +92,14 @@ class _CalendarPageState extends State<CalendarPage> {

// flip daily tracks and months since ListView starts at bottom
// and is reversed
dailyTracksByMonth = dailyTracksByMonth.reversed.toList();
monthsBetweenFirstDailyTrackAndNow =
monthsBetweenFirstDailyTrackAndNow.reversed.toList();
if (monthsBetweenFirstDailyTrackAndNow.length > 2) {
dailyTracksByMonth = dailyTracksByMonth.reversed.toList();
monthsBetweenFirstDailyTrackAndNow =
monthsBetweenFirstDailyTrackAndNow.reversed.toList();
}

return ListView.builder(
reverse: true,
reverse: monthsBetweenFirstDailyTrackAndNow.length > 2,
itemCount: monthsBetweenFirstDailyTrackAndNow.length,
itemBuilder: (context, index) => Column(
children: [
Expand Down
2 changes: 1 addition & 1 deletion lib/styles.dart
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ class Styles {
MaterialColor get accentColor => _accentColor;

// buttons
static const _unselectedElevation = 1.5;
static const _unselectedElevation = 2.0;
static final _selectedColor = _secondaryColor[900];
static const _selectedElevation = 0.1;
static final _shadowColor = _secondaryColor[200];
Expand Down
33 changes: 4 additions & 29 deletions lib/utils/get_new_daily_track.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,7 @@ import 'package:daily_spotify/models/daily_track.dart';
import 'package:daily_spotify/backend/spotify_api/spotify_api.dart';
import 'package:daily_spotify/backend/database_manager.dart' as db;
import 'package:daily_spotify/utils/get_recommendation_seeds.dart';
import 'package:daily_spotify/widgets/custom_scaffold.dart';
import 'package:daily_spotify/widgets/frame_widget.dart';
import 'package:daily_spotify/widgets/spotify_login.dart';
import 'package:daily_spotify/utils/request_access_token_without_auth_code.dart';

/// Returns a new unique [DailyTrack]. Also saves the daily track to the
/// database.
Expand All @@ -15,39 +13,16 @@ import 'package:daily_spotify/widgets/spotify_login.dart';
///
/// Takes in the parameter [today] which is a [DateTime] and is used as the date
/// of the daily track.
Future<DailyTrack?> getNewDailyTrack(
Future<DailyTrack> getNewDailyTrack(
BuildContext context, DateTime today) async {
// generate new recommendations
AccessToken? accessToken = await requestAccessToken(null);

// request user auth if expired
if (accessToken == null) {
String? authCode = await requestUserAuth();

await Navigator.of(context).pushReplacement(MaterialPageRoute(
builder: (context) => CustomScaffold(
body: Frame(
showLogo: true,
child: SpotifyLogin(
inSetup: false,
authCode: authCode,
),
))));

if (authCode == null) {
return null;
}
await getBrandNewAccessToken(authCode);

accessToken = await requestAccessToken(authCode);
}
AccessToken accessToken = await requestAccessTokenWithoutAuthCode(context);

List<Artist> initialSeedArtists = await db.Config.instance.getArtistConfig();
List<String> initialSeedGenres = await db.Config.instance.getGenreConfig();
List<Track> initialSeedTracks = await db.Config.instance.getTrackConfig();

Map<String, dynamic> seeds = await getRecommendationSeeds(
initialSeedArtists, initialSeedGenres, initialSeedTracks);
context, initialSeedArtists, initialSeedGenres, initialSeedTracks);

Recommendation recommendation = await getRecommendations(
accessToken: accessToken!,
Expand Down
5 changes: 4 additions & 1 deletion lib/utils/get_recommendation_seeds.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import 'dart:math';
import 'package:daily_spotify/backend/spotify_api/spotify_api.dart';
import 'package:daily_spotify/utils/request_access_token_without_auth_code.dart';
import 'package:daily_spotify/utils/filter_by_genre.dart';
import 'package:daily_spotify/utils/default_config.dart';
import 'package:flutter/material.dart';

/// Returns curated [Future<Map<String, dynamic>>] of the recommendation seeds
/// to be used in [getRecommendations].
Expand All @@ -11,6 +13,7 @@ import 'package:daily_spotify/utils/default_config.dart';
/// 'seedGenres': List<String>
/// 'seedTracks': List<Track>
Future<Map<String, List<dynamic>>> getRecommendationSeeds(
BuildContext context,
List<Artist> artistList,
List<String> genreList,
List<Track> trackList) async {
Expand All @@ -21,7 +24,7 @@ Future<Map<String, List<dynamic>>> getRecommendationSeeds(
List<String> seedGenres = [];
List<Track> seedTracks = [];

AccessToken? accessToken = await requestAccessToken(null);
AccessToken accessToken = await requestAccessTokenWithoutAuthCode(context);

// artist seed
if (getMoreRecent == 0 || artistList.isEmpty) {
Expand Down
31 changes: 31 additions & 0 deletions lib/utils/request_access_token_without_auth_code.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import 'package:flutter/material.dart';
import 'package:daily_spotify/backend/spotify_api/spotify_api.dart';
import 'package:daily_spotify/widgets/custom_scaffold.dart';
import 'package:daily_spotify/widgets/frame_widget.dart';
import 'package:daily_spotify/widgets/spotify_login.dart';

Future<AccessToken> requestAccessTokenWithoutAuthCode(
BuildContext context) async {
AccessToken? accessToken = await requestAccessToken(null);

// request user auth if expired
if (accessToken == null) {
String? authCode = await requestUserAuth();

await Navigator.of(context).pushReplacement(MaterialPageRoute(
builder: (context) => CustomScaffold(
body: Frame(
showLogo: true,
child: SpotifyLogin(
inSetup: false,
authCode: authCode,
),
))));

await getBrandNewAccessToken(authCode!);

accessToken = await requestAccessToken(authCode);
}

return accessToken!;
}
4 changes: 3 additions & 1 deletion lib/widgets/artist_selector.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import 'package:daily_spotify/backend/spotify_api/auth.dart' as spotify_auth;
import 'package:daily_spotify/backend/database_manager.dart' as db;
import 'package:daily_spotify/widgets/card_view_widget.dart';
import 'package:daily_spotify/widgets/loading_indicator_widget.dart';
import 'package:daily_spotify/utils/request_access_token_without_auth_code.dart';
import 'package:daily_spotify/utils/default_config.dart';
import 'package:daily_spotify/styles.dart';

Expand Down Expand Up @@ -53,7 +54,8 @@ class _ArtistSelectorState extends State<ArtistSelector> {

// check to make sure artist list was already generated from genre selector
if (initiallyEmpty) {
AccessToken? accessToken = await spotify_auth.requestAccessToken(null);
AccessToken accessToken =
await requestAccessTokenWithoutAuthCode(context);

List<Artist> artistList =
await getUserTopItems(accessToken: accessToken!, type: Artist);
Expand Down
9 changes: 5 additions & 4 deletions lib/widgets/developer_settings_widgets.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import 'package:intl/intl.dart';
import 'package:daily_spotify/backend/spotify_api/spotify_api.dart';
import 'package:daily_spotify/backend/database_manager.dart' as db;
import 'package:daily_spotify/models/daily_track.dart';
import 'package:daily_spotify/utils/request_access_token_without_auth_code.dart';
import 'package:daily_spotify/utils/get_recommendation_seeds.dart';
import 'package:daily_spotify/utils/get_new_daily_track.dart';

Expand All @@ -21,7 +22,7 @@ class DeveloperSettingsWidgets extends StatelessWidget {
return Column(
children: [
TextButton(
onPressed: () async => generateANewRecommendation(),
onPressed: () async => generateANewRecommendation(context),
child: const Text('Generate a new recommendation')),
TextButton(
onPressed: () async => generateNewDailyTracks(context),
Expand All @@ -39,15 +40,15 @@ class DeveloperSettingsWidgets extends StatelessWidget {
);
}

Future generateANewRecommendation() async {
AccessToken? accessToken = await requestAccessToken(null);
Future generateANewRecommendation(BuildContext context) async {
AccessToken accessToken = await requestAccessTokenWithoutAuthCode(context);
List<Artist> initialSeedArtists =
await db.Config.instance.getArtistConfig();
List<String> initialSeedGenres = await db.Config.instance.getGenreConfig();
List<Track> initialSeedTracks = await db.Config.instance.getTrackConfig();

Map<String, dynamic> seeds = await getRecommendationSeeds(
initialSeedArtists, initialSeedGenres, initialSeedTracks);
context, initialSeedArtists, initialSeedGenres, initialSeedTracks);

Recommendation recommendation = await getRecommendations(
accessToken: accessToken!,
Expand Down
8 changes: 6 additions & 2 deletions lib/widgets/genre_selector.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import 'package:daily_spotify/backend/spotify_api/auth.dart' as spotify_auth;
import 'package:daily_spotify/backend/spotify_api/spotify_api.dart';
import 'package:daily_spotify/backend/database_manager.dart' as db;
import 'package:daily_spotify/providers/setup_provider.dart';
import 'package:daily_spotify/utils/request_access_token_without_auth_code.dart';
import 'package:daily_spotify/utils/filter_by_genre.dart';
import 'package:daily_spotify/styles.dart';

Expand Down Expand Up @@ -53,7 +54,7 @@ class _GenreSelectorState extends State<GenreSelector> {
}

Future<bool> getAndAddGenres() async {
AccessToken? accessToken = await spotify_auth.requestAccessToken(null);
AccessToken accessToken = await requestAccessTokenWithoutAuthCode(context);

List<Artist> artistList =
await getUserTopItems(accessToken: accessToken!, type: Artist);
Expand Down Expand Up @@ -178,7 +179,10 @@ class _GenreButtonState extends State<GenreButton> {
style: widget.selected
? Styles().selectedElevatedButtonStyle
: Styles().unselectedElevatedButtonStyle,
child: Text(widget.genre.replaceAll('-', ' '))),
child: Text(
widget.genre.replaceAll('-', ' '),
style: Styles().subtitleText,
)),
);
}
}
31 changes: 16 additions & 15 deletions lib/widgets/spotify_attribute_widget.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,24 @@ class SpotifyAttribute extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Padding(
padding: const EdgeInsets.only(top: 8.0),
child: Text(
'Any and all metadata and cover art data is provided by Spotify and their respective services.',
textAlign: TextAlign.center,
style: Styles().defaultText,
),
Text(
'Any and all metadata and cover art data is provided by ',
style: Styles().defaultText,
),
Padding(
padding: const EdgeInsets.all(12.0),
child: Image.asset(
'assets/Spotify_Logo_RGB_Green.png',
height: 24.0,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Image.asset(
'assets/Spotify_Logo_RGB_Green.png',
height: 24.0,
),
Text(
' and their respective services.',
style: Styles().defaultText,
),
],
)
],
);
Expand Down
3 changes: 2 additions & 1 deletion lib/widgets/track_selector.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import 'package:daily_spotify/backend/spotify_api/auth.dart' as spotify_auth;
import 'package:daily_spotify/backend/database_manager.dart' as db;
import 'package:daily_spotify/widgets/card_view_widget.dart';
import 'package:daily_spotify/widgets/loading_indicator_widget.dart';
import 'package:daily_spotify/utils/request_access_token_without_auth_code.dart';
import 'package:daily_spotify/utils/default_config.dart';
import 'package:daily_spotify/styles.dart';

Expand Down Expand Up @@ -55,7 +56,7 @@ class _TrackSelectorState extends State<TrackSelector> {
}

Future<List<Track>?> getItemList() async {
AccessToken? accessToken = await spotify_auth.requestAccessToken(null);
AccessToken accessToken = await requestAccessTokenWithoutAuthCode(context);
List<Track> trackList =
await getUserTopItems(accessToken: accessToken!, type: Track);

Expand Down
10 changes: 5 additions & 5 deletions lib/widgets/track_view_widget.dart
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class TrackView extends StatelessWidget {
final Track track;
final Color averageColorOfImage;

static const List<int> flexValues = [4, 50, 20, 10];
static const List<int> flexValues = [4, 46, 20, 7];

@override
Widget build(BuildContext context) {
Expand All @@ -36,7 +36,7 @@ class TrackView extends StatelessWidget {
0.0,
0.3,
0.4,
0.75,
0.7,
],
colors: [
Styles().backgroundColor,
Expand Down Expand Up @@ -72,11 +72,13 @@ class TrackView extends StatelessWidget {
track.name,
style: Styles().titleText,
textAlign: TextAlign.center,
softWrap: true,
),
Text(
track.getArtists(),
style: Styles().subtitleText,
textAlign: TextAlign.center,
softWrap: true,
),
],
),
Expand All @@ -101,9 +103,7 @@ class TrackView extends StatelessWidget {
await openSong(track.spotifyHref);
}
},
style: Styles().unselectedElevatedButtonStyle.copyWith(
fixedSize:
MaterialStateProperty.all<Size>(const Size(150, 25))),
style: Styles().unselectedElevatedButtonStyle,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
Expand Down

0 comments on commit 3fea16e

Please sign in to comment.