From 885c338b302ec5c4b4a1965a5cd4a97e0896dd6a Mon Sep 17 00:00:00 2001 From: kelvin handoko <89412241+kelvinhandoko@users.noreply.github.com> Date: Sun, 23 Jun 2024 20:49:43 +0700 Subject: [PATCH] add spotify auth (#18) * update * feat: spotify auth --- .metadata | 13 +- android/app/build.gradle | 55 ++-- android/app/google-services.json | 29 -- android/app/src/main/AndroidManifest.xml | 48 +++- .../main/res/mipmap-hdpi/launcher_icon.png | Bin 618 -> 0 bytes .../main/res/mipmap-mdpi/launcher_icon.png | Bin 403 -> 0 bytes .../main/res/mipmap-xhdpi/launcher_icon.png | Bin 842 -> 0 bytes .../main/res/mipmap-xxhdpi/launcher_icon.png | Bin 1358 -> 0 bytes .../main/res/mipmap-xxxhdpi/launcher_icon.png | Bin 1969 -> 0 bytes android/build.gradle | 4 +- .../AppAuth-AppAuthCore_Privacy.build/dgph | Bin 112 -> 0 bytes .../AppAuth.build/dgph | Bin 112 -> 0 bytes .../Firebase.build/dgph | Bin 112 -> 0 bytes .../FirebaseAppCheckInterop.build/dgph | Bin 112 -> 0 bytes .../dgph | Bin 112 -> 0 bytes .../FirebaseAuth.build/dgph | Bin 112 -> 0 bytes .../dgph | Bin 112 -> 0 bytes .../FirebaseCore.build/dgph | Bin 112 -> 0 bytes .../dgph | Bin 112 -> 0 bytes .../FirebaseCoreInternal.build/dgph | Bin 112 -> 0 bytes .../Flutter.build/dgph | Bin 112 -> 0 bytes .../GTMAppAuth-GTMAppAuth_Privacy.build/dgph | Bin 112 -> 0 bytes .../GTMAppAuth.build/dgph | Bin 112 -> 0 bytes .../dgph | Bin 112 -> 0 bytes .../dgph | Bin 112 -> 0 bytes .../GTMSessionFetcher.build/dgph | Bin 112 -> 0 bytes .../GoogleSignIn-GoogleSignIn.build/dgph | Bin 112 -> 0 bytes .../GoogleSignIn.build/dgph | Bin 112 -> 0 bytes .../dgph | Bin 112 -> 0 bytes .../GoogleUtilities.build/dgph | Bin 112 -> 0 bytes .../Pods-Runner.build/dgph | Bin 112 -> 0 bytes .../Pods-RunnerTests.build/dgph | Bin 112 -> 0 bytes .../dgph | Bin 112 -> 0 bytes .../PromisesObjC.build/dgph | Bin 112 -> 0 bytes .../RecaptchaInterop.build/dgph | Bin 112 -> 0 bytes .../audioplayers_darwin.build/dgph | Bin 112 -> 0 bytes .../firebase_auth.build/dgph | Bin 112 -> 0 bytes .../firebase_core.build/dgph | Bin 112 -> 0 bytes .../dgph | Bin 112 -> 0 bytes .../google_sign_in_ios.build/dgph | Bin 112 -> 0 bytes .../dgph | Bin 112 -> 0 bytes .../path_provider_foundation.build/dgph | Bin 112 -> 0 bytes .../sqflite-sqflite_darwin_privacy.build/dgph | Bin 112 -> 0 bytes .../sqflite.build/dgph | Bin 112 -> 0 bytes android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- android/settings.gradle | 10 +- ios/Podfile.lock | 130 ++------- ios/Runner.xcodeproj/project.pbxproj | 18 -- ios/Runner/Info.plist | 123 +++++---- lib/config/route.dart | 12 +- lib/firebase_options.dart | 68 ----- lib/main.dart | 12 +- lib/providers/auth_provider.dart | 42 +++ lib/providers/custom_playlist_provider.dart | 45 --- lib/screens/library/library_screen.dart | 18 +- lib/screens/login/login_screen.dart | 26 +- lib/screens/search/search_screen.dart | 9 +- lib/screens/search/widget/search_appbar.dart | 95 ++++--- lib/services/auth_service.dart | 29 -- lib/services/custom_playlist.dart | 84 ------ lib/services/spotify.dart | 46 +++- lib/widget/custom_drawer.dart | 80 ++++-- pubspec.lock | 258 +++++++++--------- pubspec.yaml | 9 +- 65 files changed, 532 insertions(+), 735 deletions(-) delete mode 100644 android/app/google-services.json delete mode 100644 android/app/src/main/res/mipmap-hdpi/launcher_icon.png delete mode 100644 android/app/src/main/res/mipmap-mdpi/launcher_icon.png delete mode 100644 android/app/src/main/res/mipmap-xhdpi/launcher_icon.png delete mode 100644 android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png delete mode 100644 android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png delete mode 100644 android/build/ios/Pods.build/Release-iphonesimulator/AppAuth-AppAuthCore_Privacy.build/dgph delete mode 100644 android/build/ios/Pods.build/Release-iphonesimulator/AppAuth.build/dgph delete mode 100644 android/build/ios/Pods.build/Release-iphonesimulator/Firebase.build/dgph delete mode 100644 android/build/ios/Pods.build/Release-iphonesimulator/FirebaseAppCheckInterop.build/dgph delete mode 100644 android/build/ios/Pods.build/Release-iphonesimulator/FirebaseAuth-FirebaseAuth_Privacy.build/dgph delete mode 100644 android/build/ios/Pods.build/Release-iphonesimulator/FirebaseAuth.build/dgph delete mode 100644 android/build/ios/Pods.build/Release-iphonesimulator/FirebaseCore-FirebaseCore_Privacy.build/dgph delete mode 100644 android/build/ios/Pods.build/Release-iphonesimulator/FirebaseCore.build/dgph delete mode 100644 android/build/ios/Pods.build/Release-iphonesimulator/FirebaseCoreInternal-FirebaseCoreInternal_Privacy.build/dgph delete mode 100644 android/build/ios/Pods.build/Release-iphonesimulator/FirebaseCoreInternal.build/dgph delete mode 100644 android/build/ios/Pods.build/Release-iphonesimulator/Flutter.build/dgph delete mode 100644 android/build/ios/Pods.build/Release-iphonesimulator/GTMAppAuth-GTMAppAuth_Privacy.build/dgph delete mode 100644 android/build/ios/Pods.build/Release-iphonesimulator/GTMAppAuth.build/dgph delete mode 100644 android/build/ios/Pods.build/Release-iphonesimulator/GTMSessionFetcher-GTMSessionFetcher_Core_Privacy.build/dgph delete mode 100644 android/build/ios/Pods.build/Release-iphonesimulator/GTMSessionFetcher-GTMSessionFetcher_Full_Privacy.build/dgph delete mode 100644 android/build/ios/Pods.build/Release-iphonesimulator/GTMSessionFetcher.build/dgph delete mode 100644 android/build/ios/Pods.build/Release-iphonesimulator/GoogleSignIn-GoogleSignIn.build/dgph delete mode 100644 android/build/ios/Pods.build/Release-iphonesimulator/GoogleSignIn.build/dgph delete mode 100644 android/build/ios/Pods.build/Release-iphonesimulator/GoogleUtilities-GoogleUtilities_Privacy.build/dgph delete mode 100644 android/build/ios/Pods.build/Release-iphonesimulator/GoogleUtilities.build/dgph delete mode 100644 android/build/ios/Pods.build/Release-iphonesimulator/Pods-Runner.build/dgph delete mode 100644 android/build/ios/Pods.build/Release-iphonesimulator/Pods-RunnerTests.build/dgph delete mode 100644 android/build/ios/Pods.build/Release-iphonesimulator/PromisesObjC-FBLPromises_Privacy.build/dgph delete mode 100644 android/build/ios/Pods.build/Release-iphonesimulator/PromisesObjC.build/dgph delete mode 100644 android/build/ios/Pods.build/Release-iphonesimulator/RecaptchaInterop.build/dgph delete mode 100644 android/build/ios/Pods.build/Release-iphonesimulator/audioplayers_darwin.build/dgph delete mode 100644 android/build/ios/Pods.build/Release-iphonesimulator/firebase_auth.build/dgph delete mode 100644 android/build/ios/Pods.build/Release-iphonesimulator/firebase_core.build/dgph delete mode 100644 android/build/ios/Pods.build/Release-iphonesimulator/google_sign_in_ios-google_sign_in_ios_privacy.build/dgph delete mode 100644 android/build/ios/Pods.build/Release-iphonesimulator/google_sign_in_ios.build/dgph delete mode 100644 android/build/ios/Pods.build/Release-iphonesimulator/path_provider_foundation-path_provider_foundation_privacy.build/dgph delete mode 100644 android/build/ios/Pods.build/Release-iphonesimulator/path_provider_foundation.build/dgph delete mode 100644 android/build/ios/Pods.build/Release-iphonesimulator/sqflite-sqflite_darwin_privacy.build/dgph delete mode 100644 android/build/ios/Pods.build/Release-iphonesimulator/sqflite.build/dgph delete mode 100644 lib/firebase_options.dart create mode 100644 lib/providers/auth_provider.dart delete mode 100644 lib/providers/custom_playlist_provider.dart delete mode 100644 lib/services/auth_service.dart delete mode 100644 lib/services/custom_playlist.dart diff --git a/.metadata b/.metadata index 5d61cdb..65a4a37 100644 --- a/.metadata +++ b/.metadata @@ -4,7 +4,7 @@ # This file should be version controlled and should not be manually edited. version: - revision: "ba393198430278b6595976de84fe170f553cc728" + revision: "5dcb86f68f239346676ceb1ed1ea385bd215fba1" channel: "stable" project_type: app @@ -13,14 +13,11 @@ project_type: app migration: platforms: - platform: root - create_revision: ba393198430278b6595976de84fe170f553cc728 - base_revision: ba393198430278b6595976de84fe170f553cc728 + create_revision: 5dcb86f68f239346676ceb1ed1ea385bd215fba1 + base_revision: 5dcb86f68f239346676ceb1ed1ea385bd215fba1 - platform: android - create_revision: ba393198430278b6595976de84fe170f553cc728 - base_revision: ba393198430278b6595976de84fe170f553cc728 - - platform: ios - create_revision: ba393198430278b6595976de84fe170f553cc728 - base_revision: ba393198430278b6595976de84fe170f553cc728 + create_revision: 5dcb86f68f239346676ceb1ed1ea385bd215fba1 + base_revision: 5dcb86f68f239346676ceb1ed1ea385bd215fba1 # User provided section diff --git a/android/app/build.gradle b/android/app/build.gradle index b7307fd..4cef73c 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -1,75 +1,58 @@ plugins { id "com.android.application" - // START: FlutterFire Configuration - id 'com.google.gms.google-services' - // END: FlutterFire Configuration id "kotlin-android" + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. id "dev.flutter.flutter-gradle-plugin" } def localProperties = new Properties() -def localPropertiesFile = rootProject.file('local.properties') +def localPropertiesFile = rootProject.file("local.properties") if (localPropertiesFile.exists()) { - localPropertiesFile.withReader('UTF-8') { reader -> + localPropertiesFile.withReader("UTF-8") { reader -> localProperties.load(reader) } } -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +def flutterVersionCode = localProperties.getProperty("flutter.versionCode") if (flutterVersionCode == null) { - flutterVersionCode = '1' + flutterVersionCode = "1" } -def flutterVersionName = localProperties.getProperty('flutter.versionName') +def flutterVersionName = localProperties.getProperty("flutter.versionName") if (flutterVersionName == null) { - flutterVersionName = '1.0' + flutterVersionName = "1.0" } android { - namespace "com.kelvin.spotify_clone" - compileSdk flutter.compileSdkVersion - ndkVersion flutter.ndkVersion + namespace = "com.kelvin.spotify_clone" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = '1.8' - } - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 } defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.kelvin.spotify_clone" - multiDexEnabled true + applicationId = "com.kelvin.spotify_clone" // You can update the following values to match your application needs. // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. - minSdkVersion 23 - targetSdkVersion flutter.targetSdkVersion - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutterVersionCode.toInteger() + versionName = flutterVersionName } buildTypes { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig signingConfigs.debug + signingConfig = signingConfigs.debug } } } flutter { - source '../..' -} - -dependencies { - implementation 'androidx.multidex:multidex:2.0.1' - implementation platform('com.google.firebase:firebase-bom:33.0.0') - implementation 'com.google.firebase:firebase-auth' + source = "../.." } diff --git a/android/app/google-services.json b/android/app/google-services.json deleted file mode 100644 index 99e9349..0000000 --- a/android/app/google-services.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "project_info": { - "project_number": "716247414791", - "project_id": "spotify-clone-27d87", - "storage_bucket": "spotify-clone-27d87.appspot.com" - }, - "client": [ - { - "client_info": { - "mobilesdk_app_id": "1:716247414791:android:791c3ecbf239648f5dd2a2", - "android_client_info": { - "package_name": "com.kelvin.spotify_clone" - } - }, - "oauth_client": [], - "api_key": [ - { - "current_key": "AIzaSyCb5f1VIKleZGWaay_z_FO61bSS4fISD4A" - } - ], - "services": { - "appinvite_service": { - "other_platform_oauth_client": [] - } - } - } - ], - "configuration_version": "1" -} \ No newline at end of file diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 2fd66b5..35dedaa 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,5 +1,4 @@ - + @@ -7,36 +6,59 @@ - - - + android:icon="@mipmap/ic_launcher"> + + + + + - - + + + + + + + + + + - - + + - - + + diff --git a/android/app/src/main/res/mipmap-hdpi/launcher_icon.png b/android/app/src/main/res/mipmap-hdpi/launcher_icon.png deleted file mode 100644 index 5ec18eec39fbf5556742e2efa8613a534d15364e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 618 zcmV-w0+s!VP)uxC(V3z_DTK^npMr& z$AcCv2z{J@DuoE;4us~u1Ei8RUW20>3VH%h6CygF0oVq{e?kZv54t57D81-f3Np4d z^hh%Ogcza+0(e2u)eHkAGERkt0#p#oKyIUBX9Jj8<6k@ka|4}VWU7QGo$cZ^QA!I8 zY2y+q60CG-DGiAqvc!|cbadjQ&-D7#Nsz`X21>3Fbk9MGDrI!Fg~qGi$ZEN>)JUXL z8kbOp1A@YE;){gH>gtS$7aI{>OQ-tTKnG!*E6BB;ZtFtpol}%dg*Oq=xh||=1@2~M{>9{FzzWEGSRV+&9{Wu+GWO* ztess2YaQ0!rRB=hJ8DDaNJI8WaWa_>3|g7Np0dR&)xMLT#Uj{?f6PWU&}7(my=_!@ z?5k4;2C>LD!%+HEsmUy*2A9rd6anmX)xXgfeP z3!#p%;Fuh@G7fV39TQ*a_PZqsd5xNMmHXYC2yhy9^EQCK!)r*ewL0pq;?+5)?@~ diff --git a/android/app/src/main/res/mipmap-mdpi/launcher_icon.png b/android/app/src/main/res/mipmap-mdpi/launcher_icon.png deleted file mode 100644 index 355fcd73b1017984f0747eced0c9fd78e0e4f72e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 403 zcmV;E0c`$>P)eL_t(|0qvAcZo)7Sg(nhX%{b6~ zj5q+bx~Edg9_Rr;;so4(!Fc>P6B|`svB_f*@Z@!0LLImnS;6o$85oiRsu(n~CG5D_|c-@o33_`3RD;v(z z6NDDL6wAhkG+-GFX4B7ZMEuE)A%^e6;X6?ekwc7OQYsnrH(MLX31aYuY*ev46&ov6 z5*CJ7AcQ(>Hh$@GEYl@M(%P>`FjP$o!B9>Y89Sch%F}n*j(b(M_ZG%`H#K6&#D3sd zisE%#d_PoK*H~@td2s@p&lOhc!?`+D#v`1osw4Q<*>(Fm(7Yd}+`*v=q&p}Jd#HP^ x)*$b>O_@veF5$jxKL7D9nHsZZ&6@QlJpl-5bB6+w8a)62002ovPDHLkV1kLDuIT^( diff --git a/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png b/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png deleted file mode 100644 index 27ac402e7b9a5658690f8d7c9822aec48edebcd5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 842 zcmV-Q1GW5#P)}V+6Q4m$BXUm;&ts$bN(N#Vb+VX2>B`^b!>O0RxseAIMp_so3w=>%aLG zZxG;`Hq84V&~#^jT3nlHz@q@I#T3Ar4|?$cV*UU`bv#Os)V?294A}Yhy?Eeb&>og- z9>VqjMMe07J|aa3`Or!>+z7 zLIJBJpb3?SojatmI`ku`s>7E6p`z5uhuh)($xYV5>2wV5Wdy|7{#4M^0@%bWuO;A_ zxzfRFHQ-iKP?ZDB$0)@CMSumi2|yC1{I`(6%57{-WKM_><3E`PyChYgak?tnS1qGt zfZ9v&O%T}W$52iDz(g8Q-a3GF`Zfp@DE}x*98gl=&IWIY=7Gl7bsYhH_1&QIGnHqi zbxrc%Nh1cpQ3~i2@mm6s{aHJvfyIRRAm_UNKWRRI<8){~RJDv}X$!9^TLK8v=1%)S zv1*{Rokyx-(A8a+f{P_7)@F=S1aQ}GFbmm31VBWsfJTR7C^R$dXP=m%{h?QjouqXk z4=554Ui@sAcC82at$`f_jCEnRIkQhk%J0c6N$RLL9!_`wUhNFE`*dn`^?_B|8svth zf%_@;OZU7aCIA=rR5@i#_!yeDpJSj)0@r^$w;_;hpkIBrlE<{r0aigvl?0A^5o9th2DatWvR>3izOH{9-jb!ag0 zLfZqMDYh2*>VHNEf7j^F0?y(RYGc1^aKE<*WMyS#Wo2b$Wo2b$Wo2b$W&PLs1GeeU UjkD@$)c^nh07*qoM6N<$f)td8`Tzg` diff --git a/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png b/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png deleted file mode 100644 index e29127425f675e8e944b581af103d894dd2421d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1358 zcmV-U1+n^xP)4 zN<5u%tpn2@8*q9?b<%PyGqm?M!*GVcz|TfWELmEuzFdaWzK0xa>*;E>tBUG{s~3?#z3<-zvrtJ`}XH)pr0$I#h06rp!&?f>{N{coeAcMSNWh5gd=s+ z_&~Th^#a9gjoReIQT^4&k)%2U{CJ< zrEnPg5d}pYt;CxcNTh+-RRolXk=g`72_vRd1#>O6V_O{s;^;Jk!&m^6V~{k-3(7Ny zF(0VTGl;Pd9?(f9#~L_u_;Wc{qC5?Bg@O{Z%u<7a#0bzM0y-VRF(P09eSab-apmx- zbK)o??@d(>=wTd)H4r35f*t`VY3;yN0nj_-n^vma{)9jrsV?$$kN0u(E)P^3 z_&~4mu1)TR++^_~!iP7I6aY<@Lt3=$H6T65LDun#Z$Df*{%l_cNEHTRA3YIlPyH?k z$u*zM;2Nol%5`h&W5YjCI;ua`%{y%iP_QI}>h&0g7CfnJaT^o5wG)cxQ2uV<5 zOLNlJCSe=IVX-b11l2*17ztWK&~dyCChpWBvrET&=>qalhZLhgk8VACTxGOzLGIBe zL7$Kcdv>9It2I`tPmak!DjGq}KOfW?Afr^DUt(``TdU@uT|lm;I4HZMJ@tW3{}m|H z-5WnB&!o`**K*1&)_?fm|7kM@?j{IIk0suOLCOB^rV&tL=Wb>(P-5xExjukgWe^FR zwbKd#CCuJ8ZY%6^Mbu4>gFK*VRNZ@4tV9 z-H2i6ZHNd+rk#sg`7iv0ZbY4c+djPVU95?KMCh6O0Cn25N8qd@djVkBGhdg008aj>|p1U0F&jr zv4+j@=hqc3KCNoD><CaSiPGqICJOtWZtHB|$Sm#hchsMpu0d{uzFR4kA(Zv+l zzPw{Qc)bY}8w}9BSOiRAz_}j2IxN+aKq*L03{;HB7-26-;7K4rse#<26Fv z)1G-nQCbMugH4J|I?!9L-wow(c~Ey{Xg>j4l7uj%(L7F+^lBsJYmYgmLPS}y9)Pm{ z4Dju|F}=vXV#ev4t}oqz7U)ul!PB*!rOTEuF~bn7ai|JK`6}nyl1xnDaOQYW)u3|q zNOUYKe8!9x>N3IV?DI(Jpa|>{$@67^geO1Wxea`|}`!avc;Xz!s0q3`1BGZ%~tcR>D2EZJ%D4HC}OC9~YWS z{?}Y+cJ7Sn4{L3Idjn&GYt7jiyxl*0{IBoaZA#w7C5$=<4%Wo7lj)CI-rAq9-=aP{ zcmWDbuAhE9Ms-cNY%!imS5eWt(v>?9uRTMsj>4G_ zvgFJi#bjLUX^Dgz#xMcNJ)%hA6IK2fAmNfXsoeu@C@*#EYkDxHo}BLp()|eFD*d-V zb=R~A&ApeKRA^L_50@!1r6fe1NE}j|{`jF4Ld!&+xBkIA zqw$IS#-BsFjiQs4*=Rq5P;3pM<6~;b)HR+GKHS##qVvukb+q|bQT<6bs6vOYgvwta zWB5`itK)YMdouw6-L&OJvBB+;3tLx!JJJZ}&ss>w?jl#nSGx0#dryd(gZSJg`AYmB z(Umue4Mp_T_&n>$nMzOxCmu&F<MQ&o+2yt!i+CsWhm3xE{XYE*qQ1V<854NAB|-{-cWeb{1$Pv zqFmhJ7j!7yh36Il#Myj<_`tTE1&pBZj2{X_nQd8)ftS&;LwkHyK1ZWum@;s`tHFAoEpgSaK&eE%3g6Kj2piK^d(JYmI?+3{-_9=@1q&Qljr7_Wp!4V4rGh zElJzs+NgrEk~ci=ydXay2eXr}e(COQavVPFNm~6gG7zkvg`1^WXALp7T};i3e6<56 z)<%B&s#T)(d8y#%(vz7m+RWPJfH(tiXlzrQ2c*l1PAq1ytcoZ!4_TD;OJLJHgh9zQ zVv>h>IKgk0q4j1b(C_77;1)Q?O*{1>I>2%Gh|^Nd?T_>CoBOa?qYFVfu*!c74;W*z z-ig@7L!$UOMRCGCM3R+cM@vR)4=(Fes??IU7w3ktIaAzdn0zft13T~(_UbJJig|)+ z`rR?C?iv&3J3wpU*fG=NK~ z64&a7wemb^vx!^r)#(M779Xy8J?SMH3yK$D${7U4hvX{F#1Z9K8^T2@3sr~LPAQcG zN(d7^>v*E_#k;&awHy)cWe4);@-wjY{$zFno3-KvGUpC$7wng3en{-S{0RlxzbHEx z9&vedx(jl~rHG&vi%6OxQIvAne!8t{r5veP8G$~k$ue^}8)4-w`)!qI&=DAI^HrxU hYk3a;ACsJZPE45lU-`n}Prp7GI3I9#D7R;%{TJ3~ec}KB diff --git a/android/build.gradle b/android/build.gradle index bc157bd..d2ffbff 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -5,12 +5,12 @@ allprojects { } } -rootProject.buildDir = '../build' +rootProject.buildDir = "../build" subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" } subprojects { - project.evaluationDependsOn(':app') + project.evaluationDependsOn(":app") } tasks.register("clean", Delete) { diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/AppAuth-AppAuthCore_Privacy.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/AppAuth-AppAuthCore_Privacy.build/dgph deleted file mode 100644 index 01cd2a3425a55b80be387ad78bb447a24bd8de77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmZ>95AZP5Gce(HEKOH1vQ#iKFf!&aG_x`RB6AJ~21b1bM%K{c)S_YrCf@ASoU+Wk zjKsW@{Oo)NX7+-j{H)aE5(XCbw4BnClGGvwR^H-*{F2PH%J}4*{Jc~KHs;LyVg`1W Mfc%tVMxb#F01!AFr2qf` diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/AppAuth.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/AppAuth.build/dgph deleted file mode 100644 index 01cd2a3425a55b80be387ad78bb447a24bd8de77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmZ>95AZP5Gce(HEKOH1vQ#iKFf!&aG_x`RB6AJ~21b1bM%K{c)S_YrCf@ASoU+Wk zjKsW@{Oo)NX7+-j{H)aE5(XCbw4BnClGGvwR^H-*{F2PH%J}4*{Jc~KHs;LyVg`1W Mfc%tVMxb#F01!AFr2qf` diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/Firebase.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/Firebase.build/dgph deleted file mode 100644 index 01cd2a3425a55b80be387ad78bb447a24bd8de77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmZ>95AZP5Gce(HEKOH1vQ#iKFf!&aG_x`RB6AJ~21b1bM%K{c)S_YrCf@ASoU+Wk zjKsW@{Oo)NX7+-j{H)aE5(XCbw4BnClGGvwR^H-*{F2PH%J}4*{Jc~KHs;LyVg`1W Mfc%tVMxb#F01!AFr2qf` diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/FirebaseAppCheckInterop.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/FirebaseAppCheckInterop.build/dgph deleted file mode 100644 index 01cd2a3425a55b80be387ad78bb447a24bd8de77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmZ>95AZP5Gce(HEKOH1vQ#iKFf!&aG_x`RB6AJ~21b1bM%K{c)S_YrCf@ASoU+Wk zjKsW@{Oo)NX7+-j{H)aE5(XCbw4BnClGGvwR^H-*{F2PH%J}4*{Jc~KHs;LyVg`1W Mfc%tVMxb#F01!AFr2qf` diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/FirebaseAuth-FirebaseAuth_Privacy.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/FirebaseAuth-FirebaseAuth_Privacy.build/dgph deleted file mode 100644 index 01cd2a3425a55b80be387ad78bb447a24bd8de77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmZ>95AZP5Gce(HEKOH1vQ#iKFf!&aG_x`RB6AJ~21b1bM%K{c)S_YrCf@ASoU+Wk zjKsW@{Oo)NX7+-j{H)aE5(XCbw4BnClGGvwR^H-*{F2PH%J}4*{Jc~KHs;LyVg`1W Mfc%tVMxb#F01!AFr2qf` diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/FirebaseAuth.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/FirebaseAuth.build/dgph deleted file mode 100644 index 01cd2a3425a55b80be387ad78bb447a24bd8de77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmZ>95AZP5Gce(HEKOH1vQ#iKFf!&aG_x`RB6AJ~21b1bM%K{c)S_YrCf@ASoU+Wk zjKsW@{Oo)NX7+-j{H)aE5(XCbw4BnClGGvwR^H-*{F2PH%J}4*{Jc~KHs;LyVg`1W Mfc%tVMxb#F01!AFr2qf` diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/FirebaseCore-FirebaseCore_Privacy.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/FirebaseCore-FirebaseCore_Privacy.build/dgph deleted file mode 100644 index 01cd2a3425a55b80be387ad78bb447a24bd8de77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmZ>95AZP5Gce(HEKOH1vQ#iKFf!&aG_x`RB6AJ~21b1bM%K{c)S_YrCf@ASoU+Wk zjKsW@{Oo)NX7+-j{H)aE5(XCbw4BnClGGvwR^H-*{F2PH%J}4*{Jc~KHs;LyVg`1W Mfc%tVMxb#F01!AFr2qf` diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/FirebaseCore.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/FirebaseCore.build/dgph deleted file mode 100644 index 01cd2a3425a55b80be387ad78bb447a24bd8de77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmZ>95AZP5Gce(HEKOH1vQ#iKFf!&aG_x`RB6AJ~21b1bM%K{c)S_YrCf@ASoU+Wk zjKsW@{Oo)NX7+-j{H)aE5(XCbw4BnClGGvwR^H-*{F2PH%J}4*{Jc~KHs;LyVg`1W Mfc%tVMxb#F01!AFr2qf` diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/FirebaseCoreInternal-FirebaseCoreInternal_Privacy.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/FirebaseCoreInternal-FirebaseCoreInternal_Privacy.build/dgph deleted file mode 100644 index 01cd2a3425a55b80be387ad78bb447a24bd8de77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmZ>95AZP5Gce(HEKOH1vQ#iKFf!&aG_x`RB6AJ~21b1bM%K{c)S_YrCf@ASoU+Wk zjKsW@{Oo)NX7+-j{H)aE5(XCbw4BnClGGvwR^H-*{F2PH%J}4*{Jc~KHs;LyVg`1W Mfc%tVMxb#F01!AFr2qf` diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/FirebaseCoreInternal.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/FirebaseCoreInternal.build/dgph deleted file mode 100644 index 01cd2a3425a55b80be387ad78bb447a24bd8de77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmZ>95AZP5Gce(HEKOH1vQ#iKFf!&aG_x`RB6AJ~21b1bM%K{c)S_YrCf@ASoU+Wk zjKsW@{Oo)NX7+-j{H)aE5(XCbw4BnClGGvwR^H-*{F2PH%J}4*{Jc~KHs;LyVg`1W Mfc%tVMxb#F01!AFr2qf` diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/Flutter.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/Flutter.build/dgph deleted file mode 100644 index 01cd2a3425a55b80be387ad78bb447a24bd8de77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmZ>95AZP5Gce(HEKOH1vQ#iKFf!&aG_x`RB6AJ~21b1bM%K{c)S_YrCf@ASoU+Wk zjKsW@{Oo)NX7+-j{H)aE5(XCbw4BnClGGvwR^H-*{F2PH%J}4*{Jc~KHs;LyVg`1W Mfc%tVMxb#F01!AFr2qf` diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/GTMAppAuth-GTMAppAuth_Privacy.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/GTMAppAuth-GTMAppAuth_Privacy.build/dgph deleted file mode 100644 index 01cd2a3425a55b80be387ad78bb447a24bd8de77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmZ>95AZP5Gce(HEKOH1vQ#iKFf!&aG_x`RB6AJ~21b1bM%K{c)S_YrCf@ASoU+Wk zjKsW@{Oo)NX7+-j{H)aE5(XCbw4BnClGGvwR^H-*{F2PH%J}4*{Jc~KHs;LyVg`1W Mfc%tVMxb#F01!AFr2qf` diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/GTMAppAuth.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/GTMAppAuth.build/dgph deleted file mode 100644 index 01cd2a3425a55b80be387ad78bb447a24bd8de77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmZ>95AZP5Gce(HEKOH1vQ#iKFf!&aG_x`RB6AJ~21b1bM%K{c)S_YrCf@ASoU+Wk zjKsW@{Oo)NX7+-j{H)aE5(XCbw4BnClGGvwR^H-*{F2PH%J}4*{Jc~KHs;LyVg`1W Mfc%tVMxb#F01!AFr2qf` diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/GTMSessionFetcher-GTMSessionFetcher_Core_Privacy.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/GTMSessionFetcher-GTMSessionFetcher_Core_Privacy.build/dgph deleted file mode 100644 index 01cd2a3425a55b80be387ad78bb447a24bd8de77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmZ>95AZP5Gce(HEKOH1vQ#iKFf!&aG_x`RB6AJ~21b1bM%K{c)S_YrCf@ASoU+Wk zjKsW@{Oo)NX7+-j{H)aE5(XCbw4BnClGGvwR^H-*{F2PH%J}4*{Jc~KHs;LyVg`1W Mfc%tVMxb#F01!AFr2qf` diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/GTMSessionFetcher-GTMSessionFetcher_Full_Privacy.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/GTMSessionFetcher-GTMSessionFetcher_Full_Privacy.build/dgph deleted file mode 100644 index 01cd2a3425a55b80be387ad78bb447a24bd8de77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmZ>95AZP5Gce(HEKOH1vQ#iKFf!&aG_x`RB6AJ~21b1bM%K{c)S_YrCf@ASoU+Wk zjKsW@{Oo)NX7+-j{H)aE5(XCbw4BnClGGvwR^H-*{F2PH%J}4*{Jc~KHs;LyVg`1W Mfc%tVMxb#F01!AFr2qf` diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/GTMSessionFetcher.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/GTMSessionFetcher.build/dgph deleted file mode 100644 index 01cd2a3425a55b80be387ad78bb447a24bd8de77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmZ>95AZP5Gce(HEKOH1vQ#iKFf!&aG_x`RB6AJ~21b1bM%K{c)S_YrCf@ASoU+Wk zjKsW@{Oo)NX7+-j{H)aE5(XCbw4BnClGGvwR^H-*{F2PH%J}4*{Jc~KHs;LyVg`1W Mfc%tVMxb#F01!AFr2qf` diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/GoogleSignIn-GoogleSignIn.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/GoogleSignIn-GoogleSignIn.build/dgph deleted file mode 100644 index 01cd2a3425a55b80be387ad78bb447a24bd8de77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmZ>95AZP5Gce(HEKOH1vQ#iKFf!&aG_x`RB6AJ~21b1bM%K{c)S_YrCf@ASoU+Wk zjKsW@{Oo)NX7+-j{H)aE5(XCbw4BnClGGvwR^H-*{F2PH%J}4*{Jc~KHs;LyVg`1W Mfc%tVMxb#F01!AFr2qf` diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/GoogleSignIn.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/GoogleSignIn.build/dgph deleted file mode 100644 index 01cd2a3425a55b80be387ad78bb447a24bd8de77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmZ>95AZP5Gce(HEKOH1vQ#iKFf!&aG_x`RB6AJ~21b1bM%K{c)S_YrCf@ASoU+Wk zjKsW@{Oo)NX7+-j{H)aE5(XCbw4BnClGGvwR^H-*{F2PH%J}4*{Jc~KHs;LyVg`1W Mfc%tVMxb#F01!AFr2qf` diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/GoogleUtilities-GoogleUtilities_Privacy.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/GoogleUtilities-GoogleUtilities_Privacy.build/dgph deleted file mode 100644 index 01cd2a3425a55b80be387ad78bb447a24bd8de77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmZ>95AZP5Gce(HEKOH1vQ#iKFf!&aG_x`RB6AJ~21b1bM%K{c)S_YrCf@ASoU+Wk zjKsW@{Oo)NX7+-j{H)aE5(XCbw4BnClGGvwR^H-*{F2PH%J}4*{Jc~KHs;LyVg`1W Mfc%tVMxb#F01!AFr2qf` diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/GoogleUtilities.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/GoogleUtilities.build/dgph deleted file mode 100644 index 01cd2a3425a55b80be387ad78bb447a24bd8de77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmZ>95AZP5Gce(HEKOH1vQ#iKFf!&aG_x`RB6AJ~21b1bM%K{c)S_YrCf@ASoU+Wk zjKsW@{Oo)NX7+-j{H)aE5(XCbw4BnClGGvwR^H-*{F2PH%J}4*{Jc~KHs;LyVg`1W Mfc%tVMxb#F01!AFr2qf` diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/Pods-Runner.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/Pods-Runner.build/dgph deleted file mode 100644 index 01cd2a3425a55b80be387ad78bb447a24bd8de77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmZ>95AZP5Gce(HEKOH1vQ#iKFf!&aG_x`RB6AJ~21b1bM%K{c)S_YrCf@ASoU+Wk zjKsW@{Oo)NX7+-j{H)aE5(XCbw4BnClGGvwR^H-*{F2PH%J}4*{Jc~KHs;LyVg`1W Mfc%tVMxb#F01!AFr2qf` diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/Pods-RunnerTests.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/Pods-RunnerTests.build/dgph deleted file mode 100644 index 01cd2a3425a55b80be387ad78bb447a24bd8de77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmZ>95AZP5Gce(HEKOH1vQ#iKFf!&aG_x`RB6AJ~21b1bM%K{c)S_YrCf@ASoU+Wk zjKsW@{Oo)NX7+-j{H)aE5(XCbw4BnClGGvwR^H-*{F2PH%J}4*{Jc~KHs;LyVg`1W Mfc%tVMxb#F01!AFr2qf` diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/PromisesObjC-FBLPromises_Privacy.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/PromisesObjC-FBLPromises_Privacy.build/dgph deleted file mode 100644 index 01cd2a3425a55b80be387ad78bb447a24bd8de77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmZ>95AZP5Gce(HEKOH1vQ#iKFf!&aG_x`RB6AJ~21b1bM%K{c)S_YrCf@ASoU+Wk zjKsW@{Oo)NX7+-j{H)aE5(XCbw4BnClGGvwR^H-*{F2PH%J}4*{Jc~KHs;LyVg`1W Mfc%tVMxb#F01!AFr2qf` diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/PromisesObjC.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/PromisesObjC.build/dgph deleted file mode 100644 index 01cd2a3425a55b80be387ad78bb447a24bd8de77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmZ>95AZP5Gce(HEKOH1vQ#iKFf!&aG_x`RB6AJ~21b1bM%K{c)S_YrCf@ASoU+Wk zjKsW@{Oo)NX7+-j{H)aE5(XCbw4BnClGGvwR^H-*{F2PH%J}4*{Jc~KHs;LyVg`1W Mfc%tVMxb#F01!AFr2qf` diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/RecaptchaInterop.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/RecaptchaInterop.build/dgph deleted file mode 100644 index 01cd2a3425a55b80be387ad78bb447a24bd8de77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmZ>95AZP5Gce(HEKOH1vQ#iKFf!&aG_x`RB6AJ~21b1bM%K{c)S_YrCf@ASoU+Wk zjKsW@{Oo)NX7+-j{H)aE5(XCbw4BnClGGvwR^H-*{F2PH%J}4*{Jc~KHs;LyVg`1W Mfc%tVMxb#F01!AFr2qf` diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/audioplayers_darwin.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/audioplayers_darwin.build/dgph deleted file mode 100644 index 01cd2a3425a55b80be387ad78bb447a24bd8de77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmZ>95AZP5Gce(HEKOH1vQ#iKFf!&aG_x`RB6AJ~21b1bM%K{c)S_YrCf@ASoU+Wk zjKsW@{Oo)NX7+-j{H)aE5(XCbw4BnClGGvwR^H-*{F2PH%J}4*{Jc~KHs;LyVg`1W Mfc%tVMxb#F01!AFr2qf` diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/firebase_auth.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/firebase_auth.build/dgph deleted file mode 100644 index 01cd2a3425a55b80be387ad78bb447a24bd8de77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmZ>95AZP5Gce(HEKOH1vQ#iKFf!&aG_x`RB6AJ~21b1bM%K{c)S_YrCf@ASoU+Wk zjKsW@{Oo)NX7+-j{H)aE5(XCbw4BnClGGvwR^H-*{F2PH%J}4*{Jc~KHs;LyVg`1W Mfc%tVMxb#F01!AFr2qf` diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/firebase_core.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/firebase_core.build/dgph deleted file mode 100644 index 01cd2a3425a55b80be387ad78bb447a24bd8de77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmZ>95AZP5Gce(HEKOH1vQ#iKFf!&aG_x`RB6AJ~21b1bM%K{c)S_YrCf@ASoU+Wk zjKsW@{Oo)NX7+-j{H)aE5(XCbw4BnClGGvwR^H-*{F2PH%J}4*{Jc~KHs;LyVg`1W Mfc%tVMxb#F01!AFr2qf` diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/google_sign_in_ios-google_sign_in_ios_privacy.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/google_sign_in_ios-google_sign_in_ios_privacy.build/dgph deleted file mode 100644 index 01cd2a3425a55b80be387ad78bb447a24bd8de77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmZ>95AZP5Gce(HEKOH1vQ#iKFf!&aG_x`RB6AJ~21b1bM%K{c)S_YrCf@ASoU+Wk zjKsW@{Oo)NX7+-j{H)aE5(XCbw4BnClGGvwR^H-*{F2PH%J}4*{Jc~KHs;LyVg`1W Mfc%tVMxb#F01!AFr2qf` diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/google_sign_in_ios.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/google_sign_in_ios.build/dgph deleted file mode 100644 index 01cd2a3425a55b80be387ad78bb447a24bd8de77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmZ>95AZP5Gce(HEKOH1vQ#iKFf!&aG_x`RB6AJ~21b1bM%K{c)S_YrCf@ASoU+Wk zjKsW@{Oo)NX7+-j{H)aE5(XCbw4BnClGGvwR^H-*{F2PH%J}4*{Jc~KHs;LyVg`1W Mfc%tVMxb#F01!AFr2qf` diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/path_provider_foundation-path_provider_foundation_privacy.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/path_provider_foundation-path_provider_foundation_privacy.build/dgph deleted file mode 100644 index 01cd2a3425a55b80be387ad78bb447a24bd8de77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmZ>95AZP5Gce(HEKOH1vQ#iKFf!&aG_x`RB6AJ~21b1bM%K{c)S_YrCf@ASoU+Wk zjKsW@{Oo)NX7+-j{H)aE5(XCbw4BnClGGvwR^H-*{F2PH%J}4*{Jc~KHs;LyVg`1W Mfc%tVMxb#F01!AFr2qf` diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/path_provider_foundation.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/path_provider_foundation.build/dgph deleted file mode 100644 index 01cd2a3425a55b80be387ad78bb447a24bd8de77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmZ>95AZP5Gce(HEKOH1vQ#iKFf!&aG_x`RB6AJ~21b1bM%K{c)S_YrCf@ASoU+Wk zjKsW@{Oo)NX7+-j{H)aE5(XCbw4BnClGGvwR^H-*{F2PH%J}4*{Jc~KHs;LyVg`1W Mfc%tVMxb#F01!AFr2qf` diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/sqflite-sqflite_darwin_privacy.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/sqflite-sqflite_darwin_privacy.build/dgph deleted file mode 100644 index 01cd2a3425a55b80be387ad78bb447a24bd8de77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmZ>95AZP5Gce(HEKOH1vQ#iKFf!&aG_x`RB6AJ~21b1bM%K{c)S_YrCf@ASoU+Wk zjKsW@{Oo)NX7+-j{H)aE5(XCbw4BnClGGvwR^H-*{F2PH%J}4*{Jc~KHs;LyVg`1W Mfc%tVMxb#F01!AFr2qf` diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/sqflite.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/sqflite.build/dgph deleted file mode 100644 index 01cd2a3425a55b80be387ad78bb447a24bd8de77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmZ>95AZP5Gce(HEKOH1vQ#iKFf!&aG_x`RB6AJ~21b1bM%K{c)S_YrCf@ASoU+Wk zjKsW@{Oo)NX7+-j{H)aE5(XCbw4BnClGGvwR^H-*{F2PH%J}4*{Jc~KHs;LyVg`1W Mfc%tVMxb#F01!AFr2qf` diff --git a/android/gradle.properties b/android/gradle.properties index 598d13f..3b5b324 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G +org.gradle.jvmargs=-Xmx4G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 3c85cfe..e1ca574 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip diff --git a/android/settings.gradle b/android/settings.gradle index c79eaa7..536165d 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -5,10 +5,9 @@ pluginManagement { def flutterSdkPath = properties.getProperty("flutter.sdk") assert flutterSdkPath != null, "flutter.sdk not set in local.properties" return flutterSdkPath - } - settings.ext.flutterSdkPath = flutterSdkPath() + }() - includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle") + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") repositories { google() @@ -20,10 +19,7 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" id "com.android.application" version "7.3.0" apply false - // START: FlutterFire Configuration - id "com.google.gms.google-services" version "4.3.15" apply false - // END: FlutterFire Configuration - id "org.jetbrains.kotlin.android" version "1.9.24" apply false + id "org.jetbrains.kotlin.android" version "1.7.10" apply false } include ":app" diff --git a/ios/Podfile.lock b/ios/Podfile.lock index aaa7afe..0347009 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1,148 +1,54 @@ PODS: - - AppAuth (1.7.5): - - AppAuth/Core (= 1.7.5) - - AppAuth/ExternalUserAgent (= 1.7.5) - - AppAuth/Core (1.7.5) - - AppAuth/ExternalUserAgent (1.7.5): - - AppAuth/Core - audioplayers_darwin (0.0.1): - Flutter - - Firebase/Auth (10.25.0): - - Firebase/CoreOnly - - FirebaseAuth (~> 10.25.0) - - Firebase/CoreOnly (10.25.0): - - FirebaseCore (= 10.25.0) - - firebase_auth (4.19.5): - - Firebase/Auth (= 10.25.0) - - firebase_core - - Flutter - - firebase_core (2.31.0): - - Firebase/CoreOnly (= 10.25.0) - - Flutter - - FirebaseAppCheckInterop (10.25.0) - - FirebaseAuth (10.25.0): - - FirebaseAppCheckInterop (~> 10.17) - - FirebaseCore (~> 10.0) - - GoogleUtilities/AppDelegateSwizzler (~> 7.8) - - GoogleUtilities/Environment (~> 7.8) - - GTMSessionFetcher/Core (< 4.0, >= 2.1) - - RecaptchaInterop (~> 100.0) - - FirebaseCore (10.25.0): - - FirebaseCoreInternal (~> 10.0) - - GoogleUtilities/Environment (~> 7.12) - - GoogleUtilities/Logger (~> 7.12) - - FirebaseCoreInternal (10.25.0): - - "GoogleUtilities/NSData+zlib (~> 7.8)" - Flutter (1.0.0) - - google_sign_in_ios (0.0.1): - - AppAuth (>= 1.7.4) + - flutter_web_auth (0.5.0): - Flutter - - FlutterMacOS - - GoogleSignIn (~> 7.1) - - GTMSessionFetcher (>= 3.4.0) - - GoogleSignIn (7.1.0): - - AppAuth (< 2.0, >= 1.7.3) - - GTMAppAuth (< 5.0, >= 4.1.1) - - GTMSessionFetcher/Core (~> 3.3) - - GoogleUtilities/AppDelegateSwizzler (7.13.3): - - GoogleUtilities/Environment - - GoogleUtilities/Logger - - GoogleUtilities/Network - - GoogleUtilities/Privacy - - GoogleUtilities/Environment (7.13.3): - - GoogleUtilities/Privacy - - PromisesObjC (< 3.0, >= 1.2) - - GoogleUtilities/Logger (7.13.3): - - GoogleUtilities/Environment - - GoogleUtilities/Privacy - - GoogleUtilities/Network (7.13.3): - - GoogleUtilities/Logger - - "GoogleUtilities/NSData+zlib" - - GoogleUtilities/Privacy - - GoogleUtilities/Reachability - - "GoogleUtilities/NSData+zlib (7.13.3)": - - GoogleUtilities/Privacy - - GoogleUtilities/Privacy (7.13.3) - - GoogleUtilities/Reachability (7.13.3): - - GoogleUtilities/Logger - - GoogleUtilities/Privacy - - GTMAppAuth (4.1.1): - - AppAuth/Core (~> 1.7) - - GTMSessionFetcher/Core (< 4.0, >= 3.3) - - GTMSessionFetcher (3.4.1): - - GTMSessionFetcher/Full (= 3.4.1) - - GTMSessionFetcher/Core (3.4.1) - - GTMSessionFetcher/Full (3.4.1): - - GTMSessionFetcher/Core - path_provider_foundation (0.0.1): - Flutter - FlutterMacOS - - PromisesObjC (2.4.0) - - RecaptchaInterop (100.0.0) + - shared_preferences_foundation (0.0.1): + - Flutter + - FlutterMacOS - sqflite (0.0.3): - Flutter - FlutterMacOS + - url_launcher_ios (0.0.1): + - Flutter DEPENDENCIES: - audioplayers_darwin (from `.symlinks/plugins/audioplayers_darwin/ios`) - - firebase_auth (from `.symlinks/plugins/firebase_auth/ios`) - - firebase_core (from `.symlinks/plugins/firebase_core/ios`) - Flutter (from `Flutter`) - - google_sign_in_ios (from `.symlinks/plugins/google_sign_in_ios/darwin`) + - flutter_web_auth (from `.symlinks/plugins/flutter_web_auth/ios`) - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) + - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) - sqflite (from `.symlinks/plugins/sqflite/darwin`) - -SPEC REPOS: - trunk: - - AppAuth - - Firebase - - FirebaseAppCheckInterop - - FirebaseAuth - - FirebaseCore - - FirebaseCoreInternal - - GoogleSignIn - - GoogleUtilities - - GTMAppAuth - - GTMSessionFetcher - - PromisesObjC - - RecaptchaInterop + - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) EXTERNAL SOURCES: audioplayers_darwin: :path: ".symlinks/plugins/audioplayers_darwin/ios" - firebase_auth: - :path: ".symlinks/plugins/firebase_auth/ios" - firebase_core: - :path: ".symlinks/plugins/firebase_core/ios" Flutter: :path: Flutter - google_sign_in_ios: - :path: ".symlinks/plugins/google_sign_in_ios/darwin" + flutter_web_auth: + :path: ".symlinks/plugins/flutter_web_auth/ios" path_provider_foundation: :path: ".symlinks/plugins/path_provider_foundation/darwin" + shared_preferences_foundation: + :path: ".symlinks/plugins/shared_preferences_foundation/darwin" sqflite: :path: ".symlinks/plugins/sqflite/darwin" + url_launcher_ios: + :path: ".symlinks/plugins/url_launcher_ios/ios" SPEC CHECKSUMS: - AppAuth: 501c04eda8a8d11f179dbe8637b7a91bb7e5d2fa audioplayers_darwin: 877d9a4d06331c5c374595e46e16453ac7eafa40 - Firebase: 0312a2352584f782ea56f66d91606891d4607f06 - firebase_auth: 76ea642e91a9e914b3af751a416046ce1a965cf4 - firebase_core: 0b39f4f424e02eecabb2356ddf331fa07b772af8 - FirebaseAppCheckInterop: 5da5ce93e8797a215e3f677fb0654b74e736c8b8 - FirebaseAuth: c0f93dcc570c9da2bffb576969d793e95c344fbb - FirebaseCore: 7ec4d0484817f12c3373955bc87762d96842d483 - FirebaseCoreInternal: 910a81992c33715fec9263ca7381d59ab3a750b7 Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 - google_sign_in_ios: 07375bfbf2620bc93a602c0e27160d6afc6ead38 - GoogleSignIn: d4281ab6cf21542b1cfaff85c191f230b399d2db - GoogleUtilities: ea963c370a38a8069cc5f7ba4ca849a60b6d7d15 - GTMAppAuth: f69bd07d68cd3b766125f7e072c45d7340dea0de - GTMSessionFetcher: 8000756fc1c19d2e5697b90311f7832d2e33f6cd + flutter_web_auth: c25208760459cec375a3c39f6a8759165ca0fa4d path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 - PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 - RecaptchaInterop: 7d1a4a01a6b2cb1610a47ef3f85f0c411434cb21 + shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec + url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe PODFILE CHECKSUM: 1afb412608b8e1daa398fb36d853e787f0d44a02 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index e7bc656..8c1582d 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -202,7 +202,6 @@ 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, AD391FFF678BDCD13589FD5A /* [CP] Embed Pods Frameworks */, - 3B92086DEF000E17E9046345 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -291,23 +290,6 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 3B92086DEF000E17E9046345 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; 8A4C96B6F750C210D430AEBA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index b92b626..35df4e9 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -2,66 +2,71 @@ -FlutterDeepLinkingEnabled - -GIDClientID -716247414791-di6i0kdd77u99bdl43sbdmc0h9pa9923.apps.googleusercontent.com -CFBundleURLTypes - - - CFBundleTypeRole - Editor - CFBundleURLName - 192.168.100.243 - CFBundleURLSchemes + FlutterDeepLinkingEnabled + + GIDClientID + 716247414791-di6i0kdd77u99bdl43sbdmc0h9pa9923.apps.googleusercontent.com + CFBundleURLTypes - com.googleusercontent.apps.716247414791-di6i0kdd77u99bdl43sbdmc0h9pa9923 - appscheme + + CFBundleTypeRole + Editor + CFBundleURLName + com.kelvin.spotify_clone + CFBundleURLSchemes + + myapp + + - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleDisplayName - Spotify Clone - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - spotify_clone - CFBundlePackageType - APPL - CFBundleShortVersionString - $(FLUTTER_BUILD_NAME) - CFBundleSignature - ???? - CFBundleVersion - $(FLUTTER_BUILD_NUMBER) - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - CADisableMinimumFrameDurationOnPhone - - UIApplicationSupportsIndirectInputEvents - + LSApplicationQueriesSchemes + + http + https + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Spotify Clone + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + spotify_clone + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + diff --git a/lib/config/route.dart b/lib/config/route.dart index 7ae78b8..452314d 100644 --- a/lib/config/route.dart +++ b/lib/config/route.dart @@ -1,4 +1,5 @@ -import 'package:firebase_auth/firebase_auth.dart'; +import 'dart:developer'; + import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:spotify_clone/screens/category_detail/category_detail.dart'; @@ -12,6 +13,7 @@ import 'package:spotify_clone/screens/queue/queue_list_screen.dart'; import 'package:spotify_clone/screens/search_music/search_music_screens.dart'; import 'package:spotify_clone/screens/search/search_screen.dart'; import 'package:spotify_clone/screens/library/library_screen.dart'; +import 'package:spotify_clone/services/spotify.dart'; import '../screens/playlist/playlist_screen.dart'; @@ -135,6 +137,7 @@ class AppRouter { GoRoute( path: LibraryScreen.routeName, pageBuilder: (context, state) { + debugPrint(state.matchedLocation); return const MaterialPage( child: LibraryScreen(), ); @@ -149,10 +152,9 @@ class AppRouter { }), ], redirect: (BuildContext context, GoRouterState state) async { - final bool loggedIn = FirebaseAuth.instance.currentUser != null; - final bool loggingIn = state.matchedLocation == LoginScreen.routeName; - if (!loggedIn) return LoginScreen.routeName; - if (loggingIn) return MyHomePage.routeName; + if (!await SpotifyService.isUserAuthenticated()) { + return LoginScreen.routeName; + } return null; }, diff --git a/lib/firebase_options.dart b/lib/firebase_options.dart deleted file mode 100644 index 92c363b..0000000 --- a/lib/firebase_options.dart +++ /dev/null @@ -1,68 +0,0 @@ -// File generated by FlutterFire CLI. -// ignore_for_file: type=lint -import 'package:firebase_core/firebase_core.dart' show FirebaseOptions; -import 'package:flutter/foundation.dart' - show defaultTargetPlatform, kIsWeb, TargetPlatform; - -/// Default [FirebaseOptions] for use with your Firebase apps. -/// -/// Example: -/// ```dart -/// import 'firebase_options.dart'; -/// // ... -/// await Firebase.initializeApp( -/// options: DefaultFirebaseOptions.currentPlatform, -/// ); -/// ``` -class DefaultFirebaseOptions { - static FirebaseOptions get currentPlatform { - if (kIsWeb) { - throw UnsupportedError( - 'DefaultFirebaseOptions have not been configured for web - ' - 'you can reconfigure this by running the FlutterFire CLI again.', - ); - } - switch (defaultTargetPlatform) { - case TargetPlatform.android: - return android; - case TargetPlatform.iOS: - return ios; - case TargetPlatform.macOS: - throw UnsupportedError( - 'DefaultFirebaseOptions have not been configured for macos - ' - 'you can reconfigure this by running the FlutterFire CLI again.', - ); - case TargetPlatform.windows: - throw UnsupportedError( - 'DefaultFirebaseOptions have not been configured for windows - ' - 'you can reconfigure this by running the FlutterFire CLI again.', - ); - case TargetPlatform.linux: - throw UnsupportedError( - 'DefaultFirebaseOptions have not been configured for linux - ' - 'you can reconfigure this by running the FlutterFire CLI again.', - ); - default: - throw UnsupportedError( - 'DefaultFirebaseOptions are not supported for this platform.', - ); - } - } - - static const FirebaseOptions android = FirebaseOptions( - apiKey: 'AIzaSyCb5f1VIKleZGWaay_z_FO61bSS4fISD4A', - appId: '1:716247414791:android:791c3ecbf239648f5dd2a2', - messagingSenderId: '716247414791', - projectId: 'spotify-clone-27d87', - storageBucket: 'spotify-clone-27d87.appspot.com', - ); - - static const FirebaseOptions ios = FirebaseOptions( - apiKey: 'AIzaSyClhib10AmhoVtldDkGZHOZG66fVGh_ODQ', - appId: '1:716247414791:ios:755a1bed388bfa8e5dd2a2', - messagingSenderId: '716247414791', - projectId: 'spotify-clone-27d87', - storageBucket: 'spotify-clone-27d87.appspot.com', - iosBundleId: 'com.kelvin.spotifyClone', - ); -} diff --git a/lib/main.dart b/lib/main.dart index cbf98cc..5f8e743 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,11 +1,9 @@ -import 'package:firebase_auth/firebase_auth.dart'; -import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:go_router/go_router.dart'; import 'package:provider/provider.dart'; import 'package:spotify_clone/config/route.dart'; -import 'package:spotify_clone/firebase_options.dart'; +import 'package:spotify_clone/providers/auth_provider.dart'; import 'package:spotify_clone/providers/category_provider.dart'; import 'package:spotify_clone/providers/music_player_provider.dart'; import 'package:spotify_clone/providers/music_provider.dart'; @@ -16,14 +14,9 @@ final GlobalKey navigatorKey = GlobalKey(); void main() async { WidgetsFlutterBinding.ensureInitialized(); await dotenv.load(fileName: ".env"); - await Firebase.initializeApp( - options: DefaultFirebaseOptions.currentPlatform, - ); + final GoRouter router = AppRouter.router; - FirebaseAuth.instance.authStateChanges().listen((User? user) { - router.refresh(); - }); runApp( const MyApp(), ); @@ -40,6 +33,7 @@ class MyApp extends StatelessWidget { ChangeNotifierProvider(create: (context) => SearchProvider()), ChangeNotifierProvider(create: (context) => MusicPlayerProvider()), ChangeNotifierProvider(create: (context) => CategoryProvider()), + ChangeNotifierProvider(create: (context) => AuthProvider()) ], child: MaterialApp.router( routerDelegate: AppRouter.router.routerDelegate, diff --git a/lib/providers/auth_provider.dart b/lib/providers/auth_provider.dart new file mode 100644 index 0000000..6275481 --- /dev/null +++ b/lib/providers/auth_provider.dart @@ -0,0 +1,42 @@ +import 'dart:ffi'; + +import 'package:flutter/foundation.dart'; +import 'package:spotify/spotify.dart'; +import 'package:spotify_clone/services/spotify.dart'; + +class AuthProvider extends ChangeNotifier { + AuthProvider() { + _getUser(); + } + + User? _user; + + User? get user => _user; + + bool _isLoading = false; + + bool get isLoading => _isLoading; + + void _setLoading(bool value) { + _isLoading = value; + notifyListeners(); + } + + Future _getUser() async { + try { + _setLoading(true); + _user = await SpotifyService.getMe(); + notifyListeners(); + } catch (e) { + print(e); + } finally { + _setLoading(false); + } + } + + Future login() async { + await SpotifyService.authenticate(); + _user = await SpotifyService.getMe(); + notifyListeners(); + } +} diff --git a/lib/providers/custom_playlist_provider.dart b/lib/providers/custom_playlist_provider.dart deleted file mode 100644 index 63ad211..0000000 --- a/lib/providers/custom_playlist_provider.dart +++ /dev/null @@ -1,45 +0,0 @@ -import 'package:firebase_auth/firebase_auth.dart'; -import 'package:flutter/foundation.dart'; -import 'package:spotify_clone/model/custom_playlist.dart'; -import 'package:spotify_clone/services/custom_playlist.dart'; - -//TODO : buat provider untuk custom playlist -//di provider ini nanti bisa CRUD custom playlist kita -// dan nnti mau ditampilkan di library -// untuk semua fetching data itu dari CustomPlaylistService - -class CustomPlaylistProvider extends ChangeNotifier { - final _customPlaylistService = CustomPlaylistService(); - - CustomPlaylistProvider() { - _getUser(); - getAllPlaylist(); - } - - User? _user; - - void _getUser() { - _user = FirebaseAuth.instance.currentUser; - notifyListeners(); - } - - final List _customPlaylists = []; - - List get customPlaylists => _customPlaylists; - - Future getAllPlaylist() async { - List playlist = - await _customPlaylistService.getAllCustomPlaylists(_user?.uid ?? ''); - _customPlaylists.addAll(playlist); - notifyListeners(); - } - - // TODO: buat fungsi untuk menambahkan playlist user ke firebase - Future addPlaylist() async {} - - // TODO: buat fungsi untuk menghapus playlist user ke firebase - Future removePlaylist() async {} - - // TODO: buat fungsi untuk mengambil playlist detail ke firebase - Future getPlaylistDetail(String id) async {} -} diff --git a/lib/screens/library/library_screen.dart b/lib/screens/library/library_screen.dart index 2f08849..cf1a3ad 100644 --- a/lib/screens/library/library_screen.dart +++ b/lib/screens/library/library_screen.dart @@ -1,20 +1,26 @@ import 'package:flutter/material.dart'; -class LibraryScreen extends StatelessWidget { - static const routeName = '/library'; +class LibraryScreen extends StatefulWidget { + static const String routeName = '/library'; const LibraryScreen({super.key}); + @override + State createState() => _LibraryScreenState(); +} - //TODO: buat screen untuk library +class _LibraryScreenState extends State { @override Widget build(BuildContext context) { - return const Scaffold( + return Scaffold( body: SafeArea( child: Column( children: [ - Expanded( - child: Text("ini adalah library"), + Center( + child: Text( + 'Library', + style: Theme.of(context).textTheme.bodyLarge, + ), ), ], ), diff --git a/lib/screens/login/login_screen.dart b/lib/screens/login/login_screen.dart index 4dadab4..7025740 100644 --- a/lib/screens/login/login_screen.dart +++ b/lib/screens/login/login_screen.dart @@ -1,9 +1,12 @@ import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; -import 'package:spotify_clone/services/auth_service.dart'; +import 'package:go_router/go_router.dart'; +import 'package:spotify_clone/screens/home/home_screen.dart'; +import 'package:spotify_clone/services/spotify.dart'; class LoginScreen extends StatefulWidget { static const routeName = '/login'; + const LoginScreen({super.key}); @override @@ -11,6 +14,11 @@ class LoginScreen extends StatefulWidget { } class _LoginScreenState extends State { + @override + void initState() { + super.initState(); + } + @override Widget build(BuildContext context) { return Scaffold( @@ -49,22 +57,26 @@ class _LoginScreenState extends State { width: double.infinity, child: TextButton( onPressed: () async { - await AuthService.logInWithGoogle(); + await SpotifyService.authenticate(); + if (context.mounted) { + context.go(MyHomePage.routeName); + } }, style: ButtonStyle( - padding: MaterialStateProperty.all( + padding: WidgetStateProperty.all( const EdgeInsets.all(15), ), - shape: MaterialStateProperty - .all(RoundedRectangleBorder( + shape: WidgetStateProperty.all( + RoundedRectangleBorder( borderRadius: BorderRadius.circular(36.0), side: const BorderSide(color: Colors.white)))), child: const Row( children: [ - FaIcon(FontAwesomeIcons.google, color: Colors.white), + FaIcon(FontAwesomeIcons.spotify, + color: Color.fromRGBO(29, 185, 84, 1)), Expanded( child: Center( - child: Text('Continue with Google', + child: Text('Continue with Spotify', style: TextStyle( color: Colors.white, fontWeight: FontWeight.bold, diff --git a/lib/screens/search/search_screen.dart b/lib/screens/search/search_screen.dart index 4383a4e..0515eb5 100644 --- a/lib/screens/search/search_screen.dart +++ b/lib/screens/search/search_screen.dart @@ -5,6 +5,7 @@ import 'package:spotify_clone/screens/search/widget/search_button.dart'; class SearchScreens extends StatefulWidget { static const routeName = '/search'; + const SearchScreens({super.key}); @override @@ -12,15 +13,11 @@ class SearchScreens extends StatefulWidget { } class _SearchScreensState extends State { - @override - void initState() { - super.initState(); - } - @override Widget build(BuildContext context) { return Scaffold( - appBar: searchAppBar(context), + appBar: const PreferredSize( + preferredSize: Size.fromHeight(50), child: SearchAppbar()), body: SafeArea( child: Padding( padding: const EdgeInsets.symmetric(horizontal: 10), diff --git a/lib/screens/search/widget/search_appbar.dart b/lib/screens/search/widget/search_appbar.dart index 16fb075..6f81b3f 100644 --- a/lib/screens/search/widget/search_appbar.dart +++ b/lib/screens/search/widget/search_appbar.dart @@ -1,39 +1,70 @@ -import 'package:firebase_auth/firebase_auth.dart'; +import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import 'package:shimmer/shimmer.dart'; +import 'package:spotify_clone/providers/auth_provider.dart'; import 'package:spotify_clone/screens/common/main_screen.dart'; -AppBar searchAppBar(BuildContext context) { - final user = FirebaseAuth.instance.currentUser; +class SearchAppbar extends StatelessWidget { + const SearchAppbar({super.key}); - return AppBar( - automaticallyImplyLeading: false, - title: Row( - children: [ - GestureDetector( - onTap: () { - scaffoldKey.currentState?.openDrawer(); - }, - child: CircleAvatar( - radius: 14, - child: user?.photoURL != null - ? ClipOval( - child: Image.network( - user!.photoURL!, - fit: BoxFit.cover, - ), - ) - : const Icon(Icons.person), + @override + Widget build(BuildContext context) { + return AppBar( + automaticallyImplyLeading: false, + title: Row( + children: [ + GestureDetector( + onTap: () { + scaffoldKey.currentState?.openDrawer(); + }, + child: + Consumer(builder: (context, userProvider, child) { + if (userProvider.isLoading) { + return const CircularProgressIndicator(); + } + return CachedNetworkImage( + height: 36, + width: 36, + imageUrl: userProvider.user?.images?.first.url ?? "", + imageBuilder: (context, imageProvider) => Container( + width: 36.0, + height: 36.0, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(50), + image: DecorationImage( + image: imageProvider, + fit: BoxFit.cover, + ), + ), + ), + placeholder: (context, url) => Shimmer.fromColors( + baseColor: Colors.black.withOpacity(.5), + highlightColor: Colors.grey[100]!, + child: Container( + color: Colors.black.withOpacity(.6), + height: 50.0, + ), + ), + errorWidget: (context, url, error) => const SizedBox( + width: 50, + height: 50, + child: Center( + child: Icon(Icons.error), + ), + )); + }), ), - ), - const SizedBox(width: 5), - const Text( - 'Search', - style: TextStyle( - fontWeight: FontWeight.bold, + const SizedBox(width: 10), + const Text( + 'Search', + style: TextStyle( + fontWeight: FontWeight.bold, + ), ), - ), - ], - ), - centerTitle: false, - ); + ], + ), + centerTitle: false, + ); + } } diff --git a/lib/services/auth_service.dart b/lib/services/auth_service.dart deleted file mode 100644 index 69274ea..0000000 --- a/lib/services/auth_service.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:firebase_auth/firebase_auth.dart'; -import 'package:google_sign_in/google_sign_in.dart'; - -const List scopes = [ - 'email', -]; - -class AuthService { - static Future logInWithGoogle() async { - final GoogleSignIn googleSignIn = GoogleSignIn( - scopes: scopes, - ); - // Trigger the authentication flow - final GoogleSignInAccount? googleUser = await googleSignIn.signIn(); - - // Obtain the auth details from the request - final GoogleSignInAuthentication? googleAuth = - await googleUser?.authentication; - - // Create a new credential - final credential = GoogleAuthProvider.credential( - accessToken: googleAuth?.accessToken, - idToken: googleAuth?.idToken, - ); - - // Once signed in, return the UserCredential - return await FirebaseAuth.instance.signInWithCredential(credential); - } -} diff --git a/lib/services/custom_playlist.dart b/lib/services/custom_playlist.dart deleted file mode 100644 index 428a404..0000000 --- a/lib/services/custom_playlist.dart +++ /dev/null @@ -1,84 +0,0 @@ -import 'dart:async'; - -import 'package:cloud_firestore/cloud_firestore.dart'; -import 'package:spotify_clone/model/custom_playlist.dart'; - -abstract class CustomPlaylistServiceBase { - Future createCustomPlaylist(String name); - - Future updateCustomPlaylist( - String? name, String? description, String? imageUrl); - - Future> getAllCustomPlaylists(String userId); - - Future deleteCustomPlaylist(String id); - - Future getPlaylistDetail(String id); - - Future addSongToCustomPlaylist(String playlistId, String songId); - - Future removeSongFromCustomPlaylist(String playlistId, String songId); - - Future deleteAllSongsFromCustomPlaylist(String playlistId); -} - -// TODO: implement semua method yang ada pada CustomPlaylistServiceBase - -class CustomPlaylistService implements CustomPlaylistServiceBase { - final FirebaseFirestore _db = FirebaseFirestore.instance; - - @override - Future> getAllCustomPlaylists(String userId) async { - final querySnapshot = await _db - .collection('playlists') - .where('userId', isEqualTo: userId) - .get(); - if (querySnapshot.docs.length.isNaN) return []; - return querySnapshot.docs - .map((doc) => CustomPlaylist.fromJson(doc.data())) - .toList(); - } - - @override - Future addSongToCustomPlaylist(String playlistId, String songId) { - // TODO: implement addSongToCustomPlaylist - throw UnimplementedError(); - } - - @override - Future createCustomPlaylist(String name) { - // TODO: implement createCustomPlaylist - throw UnimplementedError(); - } - - @override - Future deleteAllSongsFromCustomPlaylist(String playlistId) { - // TODO: implement deleteAllSongsFromCustomPlaylist - throw UnimplementedError(); - } - - @override - Future deleteCustomPlaylist(String id) { - // TODO: implement deleteCustomPlaylist - throw UnimplementedError(); - } - - @override - Future getPlaylistDetail(String id) { - // TODO: implement getPlaylistDetail - throw UnimplementedError(); - } - - @override - Future removeSongFromCustomPlaylist(String playlistId, String songId) { - // TODO: implement removeSongFromCustomPlaylist - throw UnimplementedError(); - } - - @override - Future updateCustomPlaylist( - String? name, String? description, String? imageUrl) { - // TODO: implement updateCustomPlaylist - throw UnimplementedError(); - } -} diff --git a/lib/services/spotify.dart b/lib/services/spotify.dart index 9c676b9..badff35 100644 --- a/lib/services/spotify.dart +++ b/lib/services/spotify.dart @@ -1,11 +1,53 @@ +import 'dart:io'; + +import 'package:flutter_web_auth/flutter_web_auth.dart'; +import 'package:shared_preferences/shared_preferences.dart'; import 'package:spotify/spotify.dart'; import 'package:spotify_clone/constants/credentials.dart'; import 'package:spotify_clone/model/playlist_extension.dart'; +import 'package:url_launcher/url_launcher.dart'; + +final SpotifyApiCredentials _credentials = + SpotifyApiCredentials(Credentials.clientId, Credentials.clientSecret); -final _spotifyApi = SpotifyApi( - SpotifyApiCredentials(Credentials.clientId, Credentials.clientSecret)); +const _redirectUri = 'myapp://auth/auth'; class SpotifyService { + static SpotifyApi _spotifyApi = SpotifyApi(_credentials); + static final _grant = SpotifyApi.authorizationCodeGrant(_credentials); + static final Uri _authUri = _grant.getAuthorizationUrl( + Uri.parse(_redirectUri), + scopes: [ + ...AuthorizationScope.user.all, + AuthorizationScope.library.read, + ...AuthorizationScope.playlist.all, + ], + ); + + static Future getMe() async { + final me = await _spotifyApi.me.get(); + return me; + } + + static Future isUserAuthenticated() async { + final cred = await _spotifyApi.getCredentials(); + return cred.fullyQualified; + } + + static Future authenticate() async { + try { + final res = await FlutterWebAuth.authenticate( + url: _authUri.toString(), callbackUrlScheme: "myapp"); + + final credential = await _spotifyApi.getCredentials(); + if (credential.fullyQualified) return; + + _spotifyApi = SpotifyApi.fromAuthCodeGrant(_grant, res.toString()); + } catch (e) { + throw Exception("Failed to launch"); + } + } + static Future?> getTopTracks() async { final response = await _spotifyApi.playlists.featured.getPage(10); return response.items?.toList(); diff --git a/lib/widget/custom_drawer.dart b/lib/widget/custom_drawer.dart index 21f5141..27493b0 100644 --- a/lib/widget/custom_drawer.dart +++ b/lib/widget/custom_drawer.dart @@ -1,6 +1,7 @@ -import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/material.dart'; -import 'package:google_sign_in/google_sign_in.dart'; +import 'package:go_router/go_router.dart'; +import 'package:spotify_clone/screens/login/login_screen.dart'; +import 'package:spotify_clone/services/spotify.dart'; class CustomDrawer extends StatefulWidget { const CustomDrawer({super.key}); @@ -10,7 +11,6 @@ class CustomDrawer extends StatefulWidget { } class _CustomDrawerState extends State { - final _user = FirebaseAuth.instance.currentUser; @override Widget build(BuildContext context) { return Drawer( @@ -20,24 +20,61 @@ class _CustomDrawerState extends State { children: [ Column( children: [ - ListTile( - title: Text( - _user?.displayName ?? 'Guest', - style: Theme.of(context).textTheme.bodyMedium?.copyWith( - fontWeight: FontWeight.bold, + FutureBuilder( + future: SpotifyService.getMe(), + builder: (context, snapshot) { + if (snapshot.connectionState == ConnectionState.waiting) { + return ListTile( + leading: const CircularProgressIndicator(), + title: Text( + 'Loading...', + style: + Theme.of(context).textTheme.bodyMedium?.copyWith( + fontWeight: FontWeight.bold, + ), ), - ), - leading: CircleAvatar( - radius: 24, - child: _user?.photoURL != null - ? ClipOval( - child: Image.network( - _user!.photoURL!, - fit: BoxFit.cover, - ), - ) - : const Icon(Icons.person), - ), + ); + } else if (snapshot.hasError) { + return ListTile( + leading: const Icon(Icons.error), + title: Text( + 'Error', + style: + Theme.of(context).textTheme.bodyMedium?.copyWith( + fontWeight: FontWeight.bold, + ), + ), + ); + } else if (snapshot.hasData) { + final user = snapshot.data; + final imageUrl = user?.images?.isNotEmpty == true + ? user!.images!.first.url + : 'https://jsonplaceholder.com'; + return ListTile( + leading: CircleAvatar( + backgroundImage: NetworkImage(imageUrl!), + ), + title: Text( + user?.displayName ?? 'Guest', + style: + Theme.of(context).textTheme.bodyMedium?.copyWith( + fontWeight: FontWeight.bold, + ), + ), + ); + } else { + return ListTile( + leading: const Icon(Icons.error), + title: Text( + 'Error', + style: + Theme.of(context).textTheme.bodyMedium?.copyWith( + fontWeight: FontWeight.bold, + ), + ), + ); + } + }, ), Divider( color: Colors.white.withOpacity(0.2), @@ -49,8 +86,7 @@ class _CustomDrawerState extends State { backgroundColor: Colors.white, ), onPressed: () { - FirebaseAuth.instance.signOut(); - GoogleSignIn().signOut(); + context.go(LoginScreen.routeName); }, child: const Text('Log out', style: TextStyle( diff --git a/pubspec.lock b/pubspec.lock index 0eefc64..d426b6a 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1,14 +1,6 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: - _flutterfire_internals: - dependency: transitive - description: - name: _flutterfire_internals - sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" - url: "https://pub.dev" - source: hosted - version: "1.3.35" archive: dependency: transitive description: @@ -161,30 +153,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.1" - cloud_firestore: - dependency: "direct main" - description: - name: cloud_firestore - sha256: a0f161b92610e078b4962d7e6ebeb66dc9cce0ada3514aeee442f68165d78185 - url: "https://pub.dev" - source: hosted - version: "4.17.5" - cloud_firestore_platform_interface: - dependency: transitive - description: - name: cloud_firestore_platform_interface - sha256: "6a55b319f8d33c307396b9104512e8130a61904528ab7bd8b5402678fca54b81" - url: "https://pub.dev" - source: hosted - version: "6.2.5" - cloud_firestore_web: - dependency: transitive - description: - name: cloud_firestore_web - sha256: "89dfa1304d3da48b3039abbb2865e3d30896ef858e569a16804a99f4362283a9" - url: "https://pub.dev" - source: hosted - version: "3.12.5" collection: dependency: transitive description: @@ -241,54 +209,6 @@ packages: url: "https://pub.dev" source: hosted version: "7.0.0" - firebase_auth: - dependency: "direct main" - description: - name: firebase_auth - sha256: f0a75f61992d036e4c46ad0e9febd364d98aa2c092690a5475cb1421a8243cfe - url: "https://pub.dev" - source: hosted - version: "4.19.5" - firebase_auth_platform_interface: - dependency: transitive - description: - name: firebase_auth_platform_interface - sha256: feb77258404309ffc7761c78e1c0ad2ed5e4fdc378e035619e2cc13be4397b62 - url: "https://pub.dev" - source: hosted - version: "7.2.6" - firebase_auth_web: - dependency: transitive - description: - name: firebase_auth_web - sha256: "6d527f357da2bf93a67a42b423aa92943104a0c290d1d72ad9a42c779d501cd2" - url: "https://pub.dev" - source: hosted - version: "5.11.5" - firebase_core: - dependency: "direct main" - description: - name: firebase_core - sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" - url: "https://pub.dev" - source: hosted - version: "2.32.0" - firebase_core_platform_interface: - dependency: transitive - description: - name: firebase_core_platform_interface - sha256: c437ae5d17e6b5cc7981cf6fd458a5db4d12979905f9aafd1fea930428a9fe63 - url: "https://pub.dev" - source: hosted - version: "5.0.0" - firebase_core_web: - dependency: transitive - description: - name: firebase_core_web - sha256: "43d9e951ac52b87ae9cc38ecdcca1e8fa7b52a1dd26a96085ba41ce5108db8e9" - url: "https://pub.dev" - source: hosted - version: "2.17.0" fixnum: dependency: transitive description: @@ -355,6 +275,14 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_web_auth: + dependency: "direct main" + description: + name: flutter_web_auth + sha256: a69fa8f43b9e4d86ac72176bf747b735e7b977dd7cf215076d95b87cb05affdd + url: "https://pub.dev" + source: hosted + version: "0.5.0" flutter_web_plugins: dependency: transitive description: flutter @@ -384,54 +312,6 @@ packages: url: "https://pub.dev" source: hosted version: "13.2.5" - google_identity_services_web: - dependency: transitive - description: - name: google_identity_services_web - sha256: "9482364c9f8b7bd36902572ebc3a7c2b5c8ee57a9c93e6eb5099c1a9ec5265d8" - url: "https://pub.dev" - source: hosted - version: "0.3.1+1" - google_sign_in: - dependency: "direct main" - description: - name: google_sign_in - sha256: "0b8787cb9c1a68ad398e8010e8c8766bfa33556d2ab97c439fb4137756d7308f" - url: "https://pub.dev" - source: hosted - version: "6.2.1" - google_sign_in_android: - dependency: transitive - description: - name: google_sign_in_android - sha256: "7647893c65e6720973f0e579051c8f84b877b486614d9f70a404259c41a4632e" - url: "https://pub.dev" - source: hosted - version: "6.1.23" - google_sign_in_ios: - dependency: transitive - description: - name: google_sign_in_ios - sha256: a058c9880be456f21e2e8571c1126eaacd570bdc5b6c6d9d15aea4bdf22ca9fe - url: "https://pub.dev" - source: hosted - version: "5.7.6" - google_sign_in_platform_interface: - dependency: transitive - description: - name: google_sign_in_platform_interface - sha256: "1f6e5787d7a120cc0359ddf315c92309069171306242e181c09472d1b00a2971" - url: "https://pub.dev" - source: hosted - version: "2.4.5" - google_sign_in_web: - dependency: transitive - description: - name: google_sign_in_web - sha256: fc0f14ed45ea616a6cfb4d1c7534c2221b7092cc4f29a709f0c3053cc3e821bd - url: "https://pub.dev" - source: hosted - version: "0.12.4" html: dependency: transitive description: @@ -696,6 +576,62 @@ packages: url: "https://pub.dev" source: hosted version: "0.3.8" + shared_preferences: + dependency: "direct main" + description: + name: shared_preferences + sha256: d3bbe5553a986e83980916ded2f0b435ef2e1893dfaa29d5a7a790d0eca12180 + url: "https://pub.dev" + source: hosted + version: "2.2.3" + shared_preferences_android: + dependency: transitive + description: + name: shared_preferences_android + sha256: "93d0ec9dd902d85f326068e6a899487d1f65ffcd5798721a95330b26c8131577" + url: "https://pub.dev" + source: hosted + version: "2.2.3" + shared_preferences_foundation: + dependency: transitive + description: + name: shared_preferences_foundation + sha256: "0a8a893bf4fd1152f93fec03a415d11c27c74454d96e2318a7ac38dd18683ab7" + url: "https://pub.dev" + source: hosted + version: "2.4.0" + shared_preferences_linux: + dependency: transitive + description: + name: shared_preferences_linux + sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + shared_preferences_platform_interface: + dependency: transitive + description: + name: shared_preferences_platform_interface + sha256: "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + shared_preferences_web: + dependency: transitive + description: + name: shared_preferences_web + sha256: "9aee1089b36bd2aafe06582b7d7817fd317ef05fc30e6ba14bff247d0933042a" + url: "https://pub.dev" + source: hosted + version: "2.3.0" + shared_preferences_windows: + dependency: transitive + description: + name: shared_preferences_windows + sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59" + url: "https://pub.dev" + source: hosted + version: "2.3.2" shimmer: dependency: "direct main" description: @@ -805,6 +741,70 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + url_launcher: + dependency: "direct main" + description: + name: url_launcher + sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3" + url: "https://pub.dev" + source: hosted + version: "6.3.0" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: ceb2625f0c24ade6ef6778d1de0b2e44f2db71fded235eb52295247feba8c5cf + url: "https://pub.dev" + source: hosted + version: "6.3.3" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "7068716403343f6ba4969b4173cbf3b84fc768042124bc2c011e5d782b24fe89" + url: "https://pub.dev" + source: hosted + version: "6.3.0" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811 + url: "https://pub.dev" + source: hosted + version: "3.1.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: "8d9e750d8c9338601e709cd0885f95825086bd8b642547f26bda435aade95d8a" + url: "https://pub.dev" + source: hosted + version: "2.3.1" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: ecf9725510600aa2bb6d7ddabe16357691b6d2805f66216a97d1b881e21beff7 + url: "https://pub.dev" + source: hosted + version: "3.1.1" uuid: dependency: transitive description: @@ -887,4 +887,4 @@ packages: version: "2.2.1" sdks: dart: ">=3.4.0 <4.0.0" - flutter: ">=3.19.0" + flutter: ">=3.22.0" diff --git a/pubspec.yaml b/pubspec.yaml index 074bdca..90fc2ad 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -51,15 +51,14 @@ dependencies: flutter_sticky_header: ^0.6.5 shimmer: ^3.0.0 cached_network_image: ^3.3.1 + shared_preferences: ^2.2.3 loading_animation_widget: ^1.2.1 font_awesome_flutter: ^10.7.0 - firebase_core: ^2.30.1 - google_sign_in: ^6.2.1 - firebase_auth: ^4.19.4 - cloud_firestore: ^4.17.5 + url_launcher: ^6.3.0 + flutter_web_auth: ^0.5.0 + - dev_dependencies: flutter_launcher_icons: ^0.13.1 flutter_test: