diff --git a/Sources/dafl_project_flutter/android/app/src/main/AndroidManifest.xml b/Sources/dafl_project_flutter/android/app/src/main/AndroidManifest.xml
index 9b5ec5f..b3767c7 100644
--- a/Sources/dafl_project_flutter/android/app/src/main/AndroidManifest.xml
+++ b/Sources/dafl_project_flutter/android/app/src/main/AndroidManifest.xml
@@ -32,5 +32,8 @@
-
+
+
+
+
diff --git a/Sources/dafl_project_flutter/lib/api/api.dart b/Sources/dafl_project_flutter/lib/api/api.dart
index da39adf..5e2ced2 100644
--- a/Sources/dafl_project_flutter/lib/api/api.dart
+++ b/Sources/dafl_project_flutter/lib/api/api.dart
@@ -1,17 +1,25 @@
+import 'dart:convert';
import 'dart:math';
+import 'package:http/http.dart' as http;
class Api {
var clientId = '7ceb49d874b9404492246027e4d68cf8';
+ var clientSecret = '98f9cb960bf54ebbb9ad306e7ff919cb';
var redirectUri = 'https://daflmusic.000webhostapp.com/callback/';
var state;
- var scopes = 'user-read-private';
- var url;
-
+ String scopes = 'user-read-playback-state user-read-currently-playing';
var code;
+ var urlAuthorize;
+ String? access_token;
+ String token_type = 'Bearer ';
+ int? expires_in;
+ String? refresh_token;
+
+ var client = http.Client();
Api() {
state = generateRandomString();
- url = Uri.https('accounts.spotify.com', 'authorize', {
+ urlAuthorize = Uri.https('accounts.spotify.com', 'authorize', {
'client_id': clientId,
'response_type': 'code',
'redirect_uri': redirectUri,
@@ -21,13 +29,42 @@ class Api {
});
}
- verifyLogIn(Uri url) {
- if (verifyState(url.queryParameters['state'])) {
+ requestUserAuthorization(Uri url) {
+ if (url.queryParameters['state'] == state.toString()) {
code = url.queryParameters['code'];
+ requestAccessToken();
}
+ // TODO : implement the else
}
- bool verifyState(String? newState) => state == newState;
+ requestAccessToken() async {
+ var urlToken = Uri.https('accounts.spotify.com', 'api/token', {
+ 'code': code,
+ 'redirect_uri': redirectUri,
+ 'grant_type': 'authorization_code'
+ });
+ String credentials = "$clientId:$clientSecret";
+ String encodedLogs = base64.encode(utf8.encode(credentials));
+ var response = await client.post(urlToken, headers: {
+ 'Authorization': 'Basic $encodedLogs',
+ 'Content-Type': 'application/x-www-form-urlencoded'
+ });
+ var decodedResponse = jsonDecode(utf8.decode(response.bodyBytes)) as Map;
+ access_token = decodedResponse['access_token'];
+ expires_in = decodedResponse['expires_in'];
+ refresh_token = decodedResponse['refresh_token'];
+ getCurrentlyPlayingTrack();
+ }
+
+ getCurrentlyPlayingTrack() async {
+ var url =
+ Uri.https('api.spotify.com', 'v1/me/player/currently-playing', {});
+ var response = await client.post(url, headers: {
+ 'Authorization': '$token_type $access_token',
+ 'Content-Type': 'application/json'
+ });
+ // Problem while trying to get body
+ }
// for state value
String generateRandomString() {
diff --git a/Sources/dafl_project_flutter/lib/api/w_in_app_browser.dart b/Sources/dafl_project_flutter/lib/api/in_app_browser.dart
similarity index 53%
rename from Sources/dafl_project_flutter/lib/api/w_in_app_browser.dart
rename to Sources/dafl_project_flutter/lib/api/in_app_browser.dart
index 9a76215..0a84200 100644
--- a/Sources/dafl_project_flutter/lib/api/w_in_app_browser.dart
+++ b/Sources/dafl_project_flutter/lib/api/in_app_browser.dart
@@ -1,7 +1,6 @@
-import 'dart:convert';
import 'dart:io';
+import 'package:dafl_project_flutter/main.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
-import './api.dart';
class MyInAppBrowser extends InAppBrowser {
var options = InAppBrowserClassOptions(
@@ -10,11 +9,10 @@ class MyInAppBrowser extends InAppBrowser {
inAppWebViewGroupOptions: InAppWebViewGroupOptions(
crossPlatform: InAppWebViewOptions(javaScriptEnabled: true)));
- Api api;
-
- MyInAppBrowser(this.api) {
+ MyInAppBrowser() {
_debugBrowser();
- launchBrowser();
+ openUrlRequest(
+ urlRequest: URLRequest(url: MyApp.api.urlAuthorize), options: options);
}
_debugBrowser() async {
@@ -23,30 +21,11 @@ class MyInAppBrowser extends InAppBrowser {
}
}
- launchBrowser() {
- openUrlRequest(urlRequest: URLRequest(url: api.url), options: options);
- }
-
- @override
- Future onBrowserCreated() async {}
-
@override
Future onLoadStart(url) async {
- if (url!.origin + url!.path == api.redirectUri) {
- api.verifyLogIn(url);
+ if (url!.origin + url.path == MyApp.api.redirectUri) {
+ MyApp.api.requestUserAuthorization(url);
+ close();
}
- close();
}
-
- @override
- Future onLoadStop(url) async {}
-
- @override
- void onLoadError(url, code, message) {}
-
- @override
- void onProgressChanged(progress) {}
-
- @override
- void onExit() {}
}
diff --git a/Sources/dafl_project_flutter/lib/main.dart b/Sources/dafl_project_flutter/lib/main.dart
index f88c899..3232726 100644
--- a/Sources/dafl_project_flutter/lib/main.dart
+++ b/Sources/dafl_project_flutter/lib/main.dart
@@ -8,12 +8,14 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:provider/provider.dart';
import 'package:rive/rive.dart';
+import 'api/api.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
+ static Api api = Api();
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
diff --git a/Sources/dafl_project_flutter/lib/views/pages/sign_up/p_sign_up.dart b/Sources/dafl_project_flutter/lib/views/pages/sign_up/p_sign_up.dart
index 5cf07cb..22afa07 100644
--- a/Sources/dafl_project_flutter/lib/views/pages/sign_up/p_sign_up.dart
+++ b/Sources/dafl_project_flutter/lib/views/pages/sign_up/p_sign_up.dart
@@ -1,13 +1,12 @@
import 'package:dafl_project_flutter/api/api.dart';
+import 'package:dafl_project_flutter/main.dart';
import 'package:flutter/material.dart';
import 'package:page_transition/page_transition.dart';
-import '../../../api/w_in_app_browser.dart';
+import '../../../api/in_app_browser.dart';
import '../home/p_home.dart';
import '../sign_in/p_sign_in.dart';
class SignUpPage extends StatefulWidget {
- static Api api = Api();
-
const SignUpPage({Key? key}) : super(key: key);
@override
@@ -223,7 +222,7 @@ class _SignUpPageState extends State {
), // background// foreground
),
onPressed: () {
- MyInAppBrowser(SignUpPage.api);
+ MyInAppBrowser();
},
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
diff --git a/Sources/dafl_project_flutter/pubspec.lock b/Sources/dafl_project_flutter/pubspec.lock
index 2c97b71..a4b2a00 100644
--- a/Sources/dafl_project_flutter/pubspec.lock
+++ b/Sources/dafl_project_flutter/pubspec.lock
@@ -171,7 +171,7 @@ packages:
source: hosted
version: "0.15.1"
http:
- dependency: transitive
+ dependency: "direct main"
description:
name: http
url: "https://pub.dartlang.org"
diff --git a/Sources/dafl_project_flutter/pubspec.yaml b/Sources/dafl_project_flutter/pubspec.yaml
index 8298131..cd4b6a5 100644
--- a/Sources/dafl_project_flutter/pubspec.yaml
+++ b/Sources/dafl_project_flutter/pubspec.yaml
@@ -21,6 +21,7 @@ dependencies:
fluttertoast: ^8.1.1
vibration: ^1.7.6
flutter_inappwebview: ^5.7.1
+ http: ^0.13.5
dev_dependencies:
flutter_test: