Compare commits

..

242 Commits

Author SHA1 Message Date
Rayhân HASSOU 3fb79fcb30 Mise à jour de 'README.md'
continuous-integration/drone/push Build is passing Details
1 year ago
David D'ALMEIDA 28d58c398a Mise à jour de 'README.md'
continuous-integration/drone/push Build is passing Details
1 year ago
Rayhân HASSOU a2eb549ba2 Merge pull request 'CORRECT_GRAMMARY' (#73) from CORRECT_GRAMMARY into master
continuous-integration/drone/push Build is passing Details
1 year ago
Rayhân HASSOU b08b5434ac Mise à jour de 'Sources/justMUSIC/lib/screens/login_screen.dart'
continuous-integration/drone/push Build is passing Details
1 year ago
Rayhân HASSOU 210e4e4d4e Mise à jour de 'Sources/justMUSIC/lib/screens/welcome_screen.dart'
continuous-integration/drone/push Build is passing Details
1 year ago
Emre KARTAL 67c734aaf3 Correct historic capsules 🐛
continuous-integration/drone/push Build is passing Details
1 year ago
Emre KARTAL efc86170a8 change class name
continuous-integration/drone/push Build is passing Details
1 year ago
Emre KARTAL 7699c1b883 add Capsule collection
continuous-integration/drone/push Build is passing Details
1 year ago
Emre KARTAL 9db264c0d1 Mise à jour de 'Sources/justMUSIC/lib/screens/forget_password_screen.dart'
continuous-integration/drone/push Build is passing Details
1 year ago
Emre KARTAL db866e7955 Transférer les fichiers vers 'Documentation/Diagrammes'
continuous-integration/drone/push Build is passing Details
1 year ago
Emre KARTAL d4eaefc03c Update README.md
continuous-integration/drone/push Build is passing Details
1 year ago
Emre KARTAL 5efab7ea60 Merge pull request 'FIX/FEED_PAGINATION' (#62) from FIX/FEED_PAGINATION into master
continuous-integration/drone/push Build is passing Details
1 year ago
Emre KARTAL 2908d00b0f fix feeds pagination 🔨
continuous-integration/drone/push Build is passing Details
1 year ago
Emre KARTAL d17f5d7687 fix feeds pagination 🔨
1 year ago
Lucas DELANIER d9df95b6d2 trigger method when end of the feed
continuous-integration/drone/push Build is passing Details
1 year ago
Lucas DELANIER f951b513aa add tooltip over historic capsule
continuous-integration/drone/push Build is passing Details
1 year ago
Lucas DELANIER b84d8394ac bind delete user
continuous-integration/drone/push Build is passing Details
1 year ago
Lucas DELANIER 30c5d2248f fix loading image
continuous-integration/drone/push Build is passing Details
1 year ago
Lucas DELANIER d74ac5d9ec fix keyboard type
continuous-integration/drone/push Build is passing Details
1 year ago
Lucas DELANIER dc61eae0d4 fix ios app
continuous-integration/drone/push Build is passing Details
1 year ago
Lucas DELANIER 08856fe818 historic page and profil page responsive
continuous-integration/drone/push Build is failing Details
1 year ago
Lucas DELANIER d45d9b53ec Merge branch 'fix/web-images'
continuous-integration/drone/push Build is failing Details
1 year ago
Lucas DELANIER 2d6a3c54ff fix somes issues
1 year ago
Emre KARTAL 83968d90a5 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
1 year ago
Emre KARTAL f4bd188e2e fix somes issues
continuous-integration/drone/push Build is passing Details
1 year ago
Emre KARTAL 374ff13888 fix somes issues
1 year ago
Lucas DELANIER 6d96f4548e fix somes issues
continuous-integration/drone/push Build is passing Details
1 year ago
Lucas DELANIER d741611493 fix somes issues
continuous-integration/drone/push Build is passing Details
1 year ago
Lucas DELANIER 770b08a10b fix somes issues
continuous-integration/drone/push Build is passing Details
1 year ago
Lucas DELANIER a4c238d8e1 fix somes issues
continuous-integration/drone/push Build is passing Details
1 year ago
Lucas DELANIER 5cacac45ee fix somes issues
continuous-integration/drone/push Build is passing Details
1 year ago
Lucas DELANIER 111a25957e fix somes issues
continuous-integration/drone/push Build is passing Details
1 year ago
Lucas DELANIER fbdef7af11 fix somes issues
continuous-integration/drone/push Build is passing Details
1 year ago
Lucas DELANIER 225a994e80 fix somes issues
continuous-integration/drone/push Build is passing Details
1 year ago
Lucas DELANIER 3c0a626932 fix somes issues
continuous-integration/drone/push Build is passing Details
1 year ago
Lucas DELANIER 3e3a2102b5 fix somes issues
continuous-integration/drone/push Build is passing Details
1 year ago
Lucas DELANIER 58cdbbb048 fix somes issues
continuous-integration/drone/push Build is passing Details
1 year ago
Lucas DELANIER 5b743d49c7 fix somes issues
continuous-integration/drone/push Build is passing Details
1 year ago
Lucas DELANIER a3b3b4d9d2 fix somes issues
continuous-integration/drone/push Build is passing Details
1 year ago
Lucas DELANIER cec3369577 fix somes issues
continuous-integration/drone/push Build is passing Details
1 year ago
Lucas DELANIER fdc2c79d0d fix somes issues
continuous-integration/drone/push Build is passing Details
1 year ago
Lucas DELANIER 77c1afd5ee fix somes issues
continuous-integration/drone/push Build is passing Details
1 year ago
Lucas DELANIER f6d2aaad36 Merge remote-tracking branch 'origin/master'
continuous-integration/drone/push Build is passing Details
1 year ago
Lucas DELANIER 918144ac9c fix somes issues
1 year ago
Lucas DELANIER 8e6172463a Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
1 year ago
Lucas DELANIER 92df1cbc49 fix somes issues
continuous-integration/drone/push Build is failing Details
1 year ago
Emre KARTAL a3d529193e Merge pull request 'DRONE' (#61) from DRONE into master
continuous-integration/drone/push Build is failing Details
1 year ago
Emre KARTAL eb7d43990e Correct error localisation and sign in for WEB
1 year ago
Emre KARTAL 88c7db41f0 Mise à jour de 'Sources/justMUSIC/firebase.json'
1 year ago
Emre KARTAL f1522eb002 Mise à jour de '.drone.yml'
1 year ago
Emre KARTAL e67653675e Remove windows files
continuous-integration/drone/push Build is passing Details
1 year ago
Emre KARTAL 252b6f196e Mise à jour de 'README.md'
continuous-integration/drone/push Build was killed Details
1 year ago
Emre KARTAL 87cc08276e Merge remote-tracking branch 'origin/DRONE' into DRONE
continuous-integration/drone/push Build is passing Details
1 year ago
Emre KARTAL 21175b0160 Correct error navigator
1 year ago
Emre KARTAL 63c7116d36 Mise à jour de 'Sources/justMUSIC/firebase.json'
continuous-integration/drone/push Build is failing Details
1 year ago
Emre KARTAL 8ec1619ad6 delete useless files
continuous-integration/drone/push Build is failing Details
1 year ago
Emre KARTAL 034e384ded For deploy web
1 year ago
Emre KARTAL 7491ff813d Mise à jour de 'Sources/justMUSIC/firebase.json'
continuous-integration/drone/push Build is failing Details
1 year ago
Emre KARTAL 250f9cdca8 Mise à jour de 'Sources/justMUSIC/firebase.json'
continuous-integration/drone/push Build is failing Details
1 year ago
Emre KARTAL f9315759bd For deploy web
continuous-integration/drone/push Build is failing Details
1 year ago
Emre KARTAL 3d7f368724 Ajouter 'Sources/justMUSIC/firebase.json'
continuous-integration/drone/push Build is failing Details
1 year ago
Emre KARTAL 1b3102d9ff Build WEB
continuous-integration/drone/push Build is failing Details
1 year ago
Emre KARTAL 191a760ab6 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
1 year ago
Emre KARTAL 6342b123e3 For drone
continuous-integration/drone/push Build is failing Details
1 year ago
Emre KARTAL 5a722101a6 For drone
continuous-integration/drone/push Build is failing Details
1 year ago
Emre KARTAL 7bcbc64205 Upgrade
continuous-integration/drone/push Build is failing Details
1 year ago
Emre KARTAL 096a4be8a9 Transférer les fichiers vers 'Sources/justMUSIC/lib/values'
continuous-integration/drone/push Build is failing Details
1 year ago
Emre KARTAL f352b6cdfc Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
1 year ago
Emre KARTAL 743fe18792 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
1 year ago
Emre KARTAL dcea6407f4 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
1 year ago
Emre KARTAL 08ca1e72dc Change SDK min version
continuous-integration/drone/push Build is failing Details
1 year ago
Emre KARTAL d657dfe0c9 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
1 year ago
Emre KARTAL 693a47bfd8 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
1 year ago
Emre KARTAL 224e8d3667 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
1 year ago
Emre KARTAL 10393685d8 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
1 year ago
Emre KARTAL 2861b14e7d Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
1 year ago
Emre KARTAL b61603dbf1 Merge pull request 'fix somes issues' (#60) from fix/fix-issues into master
continuous-integration/drone/push Build is passing Details
1 year ago
Emre KARTAL e70e2aee42 Fix error Google sign in for ios 🐛
continuous-integration/drone/push Build is passing Details
1 year ago
Lucas DELANIER 7dc0ed5a96 fix somes issues
continuous-integration/drone/push Build is passing Details
1 year ago
Emre KARTAL 88524290ad Change ios for localisation and notification
continuous-integration/drone/push Build is passing Details
1 year ago
Lucas DELANIER 3af1116215 safearea on top for ios
continuous-integration/drone/push Build is passing Details
1 year ago
Emre KARTAL 2140c77f8b naming convention
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL 6ffd84abb2 Error order 🐛
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL 923fc02d49 Update getPosts 🔨
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas DELANIER 45b0f68323 Merge remote-tracking branch 'origin/master'
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL b80dba28a3 Mise à jour de 'README.md'
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL 23e502f5d1 Mise à jour de 'README.md'
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL 3a126b1f5a Mise à jour de 'Sources/justMUSIC/.gitignore'
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL 924f602671 Supprimer 'Sources/justMUSIC/lib/values/keys.dart'
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas DELANIER 46879f6765 ios
2 years ago
Emre KARTAL b9537c726f Mise à jour de 'Sources/justMUSIC/.gitignore'
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL 20d3944c13 Mise à jour de 'Sources/justMUSIC/.gitignore'
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL a55e27c4f4 Change android package name and correct error notification token 🔨
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL d4493fc128 Mise à jour de 'privacy-policy.md'
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL e57b3b55e6 Ajouter 'privacy-policy'
continuous-integration/drone/push Build is passing Details
2 years ago
root e3017fad2a Merge with HISTORIC_CAPSULE_LDE 🔀
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL c03be279ee Add sendNotifyLike, sendNotifyLike and deleteComment functions and update deleteUser function
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier db48302aa0 fix date 2 digits
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier e776abfeab stay connected! display info when empty collection song and possibility to delete song from collection in the list when logpress
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier 1ac6d85f59 fix likes
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier 2b6182f5d0 fix probleme with date displaying "hier" when display date
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier d714e18cbb fix probleme with date displaying "hier" when display date
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier 08434c6902 add label to inform user of the current selected list
2 years ago
Lucas Delanier 83f87e4ed3 Merge branch 'LIKES_POST_LDE-EKA' into SAVE_SONG_LDE
2 years ago
Lucas Delanier 1017257e76 add label to inform user of the current selected list
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier fd4cb7b483 Merge branch 'SAVE_SONG_LDE'
2 years ago
Lucas Delanier 1f772b5343 add label to inform user of the current selected list
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier b6d77d582b saved song
2 years ago
Lucas Delanier 2ac95d384c saved song
2 years ago
Emre KARTAL ee88c97446 Add likes functions
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier a8bbb0b066 saved song
2 years ago
Emre KARTAL 6d6da9f2e1 Merge with 'SAVE_SONG_LDE'
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier 7cb82b0f62 Merge remote-tracking branch 'origin/master'
2 years ago
Emre KARTAL 927b671955 Change likes
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier d88a92fcf3 Merge branch 'SAVE_SONG_LDE'
2 years ago
Lucas Delanier 5d254431db saved song
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL 8c8f5e65d7 Merge with 'GOOGLE_EKA' branch
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL deb97c0a09 Merge remote-tracking branch 'origin/GOOGLE_EKA' into GOOGLE_EKA
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL 31ee70e83f filtered pseudo
2 years ago
Emre KARTAL a21f3f42da For web
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL cf0accfc47 Connection with google done
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier 3b9a39407d historic page
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier 7b9f81b543 Merge branch 'master' into HISTORIC_CAPSULE_LDE
2 years ago
Lucas Delanier c725e355c7 historic page
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL 4474c95247 Merge branch 'master' of https://codefirst.iut.uca.fr/git/justDEV/justMusic
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL 6c80a6b1aa add function for get History Capsules
2 years ago
Lucas Delanier bb064697a0 Merge remote-tracking branch 'origin/master'
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier 55294f9b8a perisst
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL d45a724d01 Merge pull request 'RESET_PASSWORD_EKA' (#52) from RESET_PASSWORD_EKA into master
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL cb1fbb43db Forgot password done
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL a96d17891f Forgot password done
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier 8a561bd4ed change password
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier c2df7f2512 change password
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier 7b8a9182dd change pp
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL 75ca7ba086 Starting SignInWithGoogle 🔨
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier 552db38458 change % in top bar
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL c5e42a40ec Merge pull request 'VERIFY_MAIL_EKA' (#48) from VERIFY_MAIL_EKA into master
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier ddcfdc9d99 change % in top bar
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL d1565f7c2e UI Verify Screen done
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL f5721be47f page redirect
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL 02dc68e458 Verify email done
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL ebc09e5969 add functions for update image and pseudo
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier ddf6bf8638 add icon
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier 73789d9620 add icon
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier 4036f02391 add icon
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier 18eacc6e56 Merge branch 'master' into SAVE_SONG_LDE
2 years ago
Lucas Delanier 2302e3941e add icon
2 years ago
Emre KARTAL a7cb743f8b Merge pull request 'FAVORITE_MUSICS_EKA' (#45) from FAVORITE_MUSICS_EKA into master
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL 1c53052523 Merge branch 'master' into FAVORITE_MUSICS_EKA
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL e738a92cfd Merge add and delete Favorite Music Functions
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier d67acfea4e add icon
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier 9c3f3024cc Merge branch 'PROFIL_PAGE_LDE'
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier 6ffe34bd4f add icon
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier 95c90cc25a add icon
2 years ago
Lucas Delanier cff55c26ee add icon
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier adf3897417 add icon
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier eb551aefa9 recap component
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL c8b93c51cd Get, add and delete Favorite Musics done
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier b502084aff Merge branch 'master' into PROFIL_PAGE_LDE
2 years ago
Lucas Delanier 2e266b85c2 recap component
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL 120735e0c6 Add functions recapSevenDays and sendNotifyComment
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL 5125645e5c Merge remote-tracking branch 'origin/master'
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL 5672edc715 Add function for delete User
2 years ago
Lucas Delanier 43e0e279bd enfinnnnnnnnnn
continuous-integration/drone/push Build is passing Details
2 years ago
emre.kartal 46a11ded7c Merge branch 'NEW_REFRESH_LDE'
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL fd9b015fa3 Merge pull request 'NOTIFICATION_EKA' (#42) from NOTIFICATION_EKA into master
continuous-integration/drone/push Build is passing Details
2 years ago
emre.kartal 2240bcefa6 Fix error conflicts
continuous-integration/drone/push Build is passing Details
2 years ago
emre.kartal 2c9b8c1336 Merge with master
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL 1a723656fe Add Key Serveur and test work
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier 10f2b967a8 enfinnnnnnnnnn
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier 6396a8dba8 enfinnnnnnnnnn
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL 5ef83b3340 Add Function sendPushMessage and fix error UserService
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier 2ed4b1e515 change refresh feed
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier cc227a97a3 change text artist and title
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier 67b4dd0f58 change text artist and title
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier 929f090464 change text artist and title
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL e4364cfb1e Starting Notification
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL eece9357ec Merge pull request 'change text artist and title' (#40) from STAY_CONNECTED_LDE into master
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier 10846dcbc7 change text artist and title
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL c276e7ae1e Add Comment and get Comments done
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier 0eb850e830 Merge remote-tracking branch 'origin/master'
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier 69f6ccab70 change text artist and title
2 years ago
Emre KARTAL 8e5fec03a4 add function getMusicsWithNameOrArtistName
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier 53a8d37534 increase touchable size of topbar
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier 717da702c1 new dot appearance schema
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier 5de5f0c964 Merge remote-tracking branch 'origin/master'
2 years ago
Lucas Delanier d4a6bb2cd7 new dot appearance schema
2 years ago
Emre KARTAL 6b34e03a6c Merge pull request 'V2_MODALE_LDE' (#35) from V2_MODALE_LDE into master
continuous-integration/drone/push Build is passing Details
2 years ago
Lucas Delanier c3ddbb345b new dot appearance schema
2 years ago
Emre KARTAL 366bcb2417 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL 970e29ee1b Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is passing Details
2 years ago
Emre KARTAL 94e08624c0 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
2 years ago
Emre KARTAL 3563ba8d10 Add .drone.yml
continuous-integration/drone/push Build is failing Details
2 years ago
Lucas Delanier cbf6ef9ab2 new dot appearance schema
2 years ago
Lucas Delanier be51ffa21f OMG WHAT A BEAUTIFULL DETAIL PAGE 🔥
2 years ago
Lucas Delanier 43393eb5e1 OMG WHAT A BEAUTIFULL DETAIL PAGE 🔥
2 years ago
Emre KARTAL 73cf66db55 Merge pull request 'POSTS_FRIENDS_EKA-LDE' (#33) from POSTS_FRIENDS_EKA-LDE into master
2 years ago
Emre KARTAL f758136e08 Fix error 🐛
2 years ago
Emre KARTAL 6c473af261 Improved functions
2 years ago
Lucas Delanier 70a12290d7 Merge branch 'POSTS_FRIENDS_EKA-LDE'
2 years ago
Lucas Delanier 22e2b2ebb4 Merge remote-tracking branch 'origin/POSTS_FRIENDS_EKA-LDE' into POSTS_FRIENDS_EKA-LDE
2 years ago
Lucas Delanier 79ca1a81e5 animation when post
2 years ago
Lucas Delanier 34b6e52ffc animation when post
2 years ago
Emre KARTAL 4e3db6aebb Merge pull request 'POSTS_FRIENDS_EKA-LDE' (#32) from POSTS_FRIENDS_EKA-LDE into master
2 years ago
Emre KARTAL 51434401db get Posts Friends done
2 years ago
Lucas Delanier 3771b40a49 animation when post
2 years ago
Lucas Delanier 6e614e2100 add friend is live !!!
2 years ago
Lucas Delanier 5c8950a2ad add friend is live !!!
2 years ago
Emre KARTAL 1fe178c662 add function AddOrDeleteFriend
2 years ago
Lucas Delanier 00219afacb manage search friend
2 years ago
Emre KARTAL 8e5e386d79 Add getPostsFriends and getUsersByUniqueId
2 years ago
Emre KARTAL 10b947cb4e Refresh User Current
2 years ago
Emre KARTAL 99932c9e2c Merge pull request 'NOTIF_AVAILABLE_EKA-LDE' (#31) from NOTIF_AVAILABLE_EKA-LDE into master
2 years ago
Lucas Delanier 5668d2ff36 fix notif with text but still error gestion mutliple notif
2 years ago
Emre KARTAL 4609237105 Add function getAvailable
2 years ago
Emre KARTAL 23433e799f Merge pull request 'EMPTY_LIST_LDE' (#30) from EMPTY_LIST_LDE into master
2 years ago
Lucas Delanier 26cae65b42 beautifull app when empty friend list and fix empty description
2 years ago
Lucas Delanier 0115e2d29f beautifull app when empty friend list and fix empty description
2 years ago
Lucas Delanier 0cebb7bbef beautifull app when empty friend list and fix empty description
2 years ago
Lucas Delanier b0ed6b3934 get post
2 years ago
Lucas Delanier 93e83bb335 get post
2 years ago
Lucas Delanier b250a9de2e get post
2 years ago
Lucas Delanier 67ab17e7d7 get post
2 years ago
Lucas Delanier d0045fc66f get post
2 years ago
Lucas Delanier a00f9370f6 get post
2 years ago
root a46f6325ba Increment done and improvement on the model done
2 years ago
Lucas Delanier 79d975e05a get post
2 years ago
Lucas Delanier 20def43443 get post
2 years ago
Lucas Delanier 50bee2f529 get post
2 years ago
Emre KARTAL 44b6477101 Starting get capsules 🔨
2 years ago
Emre KARTAL 271cefff0c Fix pseudo
2 years ago
Lucas Delanier d19ab6b368 increase tap size for button
2 years ago
Lucas Delanier 8d96fe5b18 add friend page and copy clipboard id
2 years ago
Lucas Delanier 225203ca28 post capsule
2 years ago
Lucas Delanier 497120a057 post capsule
2 years ago
Lucas Delanier 60ee9d2700 post capsule
2 years ago
Lucas Delanier de013faa30 post capsule
2 years ago
Lucas Delanier d028568030 quit page
2 years ago
root e8b896365d Add post done
2 years ago
root 20981223a2 Merge branch 'master' into posts_EKA-DDA
2 years ago
root 8ef2bba431 Add PostService and PostMapper
2 years ago
Emre KARTAL 5b91346f06 Merge pull request 'callback info' (#29) from CALLBACK_IMAGE into master
2 years ago

@ -0,0 +1,43 @@
kind: pipeline
type: docker
name: JustMusic
trigger:
event:
- push
steps:
- name: app-build
image: ghcr.io/cirruslabs/flutter:3.13.9
commands:
- cd ./Sources/justMUSIC/
- flutter build apk
- name: build-web
image: ghcr.io/cirruslabs/flutter:3.13.9
environment:
FIREBASE_TOKEN:
from_secret: FIREBASE_TOKEN
commands:
- cd ./Sources/justMUSIC/
- flutter build web --web-renderer canvaskit
- curl -sL https://firebase.tools | bash
- firebase deploy --token $${FIREBASE_TOKEN}
when:
branch:
- PROD-WEB
- name: code-analysis
image: ghcr.io/cirruslabs/flutter:3.13.9
environment:
SONAR_TOKEN:
from_secret: SONAR_TOKEN
commands:
- export SONAR_SCANNER_VERSION=4.7.0.2747
- export SONAR_SCANNER_HOME=$HOME/.sonar/sonar-scanner-$SONAR_SCANNER_VERSION-linux
- curl --create-dirs -sSLo $HOME/.sonar/sonar-scanner.zip https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-$SONAR_SCANNER_VERSION-linux.zip
- unzip -o $HOME/.sonar/sonar-scanner.zip -d $HOME/.sonar/
- export PATH=$SONAR_SCANNER_HOME/bin:$PATH
- export SONAR_SCANNER_OPTS="-server"
- sonar-scanner -D sonar.projectKey=JustMusic -D sonar.sources=./Sources/justMUSIC -D sonar.host.url=https://codefirst.iut.uca.fr/sonar
ddepends_on: [app-build]

@ -12,6 +12,144 @@
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/firebase_core/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/firebase_core/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/firebase_core/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/geolocator_apple/example/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/geolocator_apple/example/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/geolocator_apple/example/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/google_sign_in_ios/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/google_sign_in_ios/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/google_sign_in_ios/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/firebase_auth/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/firebase_auth/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/firebase_auth/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/sqflite/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/sqflite/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/sqflite/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/sqflite/example/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/sqflite/example/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/sqflite/example/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/path_provider_foundation/example/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/path_provider_foundation/example/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/path_provider_foundation/example/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/image_picker_ios/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/image_picker_ios/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/image_picker_ios/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/firebase_core/example/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/firebase_core/example/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/firebase_core/example/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/firebase_storage/example/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/firebase_storage/example/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/firebase_storage/example/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/google_sign_in_ios/example/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/google_sign_in_ios/example/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/google_sign_in_ios/example/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/path_provider_foundation/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/path_provider_foundation/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/path_provider_foundation/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/firebase_auth/example/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/firebase_auth/example/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/firebase_auth/example/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/cloud_firestore/example/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/cloud_firestore/example/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/cloud_firestore/example/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/image_picker_ios/example/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/image_picker_ios/example/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/image_picker_ios/example/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/geolocator_apple/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/geolocator_apple/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/geolocator_apple/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/cloud_firestore/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/cloud_firestore/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/cloud_firestore/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/firebase_messaging/example/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/firebase_messaging/example/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/firebase_messaging/example/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/flutter_keyboard_visibility/example/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/flutter_keyboard_visibility/example/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/flutter_keyboard_visibility/example/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/audioplayers_darwin/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/audioplayers_darwin/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/audioplayers_darwin/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/firebase_messaging/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/firebase_messaging/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/firebase_messaging/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/firebase_storage/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/firebase_storage/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/firebase_storage/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/flutter_keyboard_visibility/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/flutter_keyboard_visibility/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justmusic/ios/.symlinks/plugins/flutter_keyboard_visibility/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/firebase_storage/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/firebase_storage/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/firebase_storage/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/cloud_firestore/example/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/cloud_firestore/example/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/cloud_firestore/example/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/firebase_auth/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/firebase_auth/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/firebase_auth/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/path_provider_foundation/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/path_provider_foundation/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/path_provider_foundation/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/firebase_auth/example/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/firebase_auth/example/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/firebase_auth/example/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/google_sign_in_ios/example/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/google_sign_in_ios/example/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/google_sign_in_ios/example/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/audioplayers_darwin/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/audioplayers_darwin/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/audioplayers_darwin/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/firebase_storage/example/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/firebase_storage/example/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/firebase_storage/example/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/geolocator_apple/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/geolocator_apple/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/geolocator_apple/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/flutter_keyboard_visibility/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/flutter_keyboard_visibility/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/flutter_keyboard_visibility/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/sqflite/example/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/sqflite/example/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/sqflite/example/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/firebase_messaging/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/firebase_messaging/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/firebase_messaging/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/firebase_core/example/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/firebase_core/example/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/firebase_core/example/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/flutter_keyboard_visibility/example/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/flutter_keyboard_visibility/example/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/flutter_keyboard_visibility/example/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/firebase_messaging/example/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/firebase_messaging/example/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/firebase_messaging/example/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/firebase_core/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/firebase_core/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/firebase_core/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/sqflite/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/sqflite/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/sqflite/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/cloud_firestore/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/cloud_firestore/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/cloud_firestore/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/image_picker_ios/example/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/image_picker_ios/example/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/image_picker_ios/example/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/image_picker_ios/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/image_picker_ios/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/image_picker_ios/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/google_sign_in_ios/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/google_sign_in_ios/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/google_sign_in_ios/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/geolocator_apple/example/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/geolocator_apple/example/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/geolocator_apple/example/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/path_provider_foundation/example/build" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/path_provider_foundation/example/.pub" />
<excludeFolder url="file://$MODULE_DIR$/Sources/justMUSIC/ios/.symlinks/plugins/path_provider_foundation/example/.dart_tool" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />

File diff suppressed because it is too large Load Diff

@ -1,26 +1,27 @@
<component name="libraryTable">
<library name="Dart SDK">
<CLASSES>
<root url="file://$PROJECT_DIR$/../../../../src/flutter/bin/cache/dart-sdk/lib/async" />
<root url="file://$PROJECT_DIR$/../../../../src/flutter/bin/cache/dart-sdk/lib/cli" />
<root url="file://$PROJECT_DIR$/../../../../src/flutter/bin/cache/dart-sdk/lib/collection" />
<root url="file://$PROJECT_DIR$/../../../../src/flutter/bin/cache/dart-sdk/lib/convert" />
<root url="file://$PROJECT_DIR$/../../../../src/flutter/bin/cache/dart-sdk/lib/core" />
<root url="file://$PROJECT_DIR$/../../../../src/flutter/bin/cache/dart-sdk/lib/developer" />
<root url="file://$PROJECT_DIR$/../../../../src/flutter/bin/cache/dart-sdk/lib/ffi" />
<root url="file://$PROJECT_DIR$/../../../../src/flutter/bin/cache/dart-sdk/lib/html" />
<root url="file://$PROJECT_DIR$/../../../../src/flutter/bin/cache/dart-sdk/lib/indexed_db" />
<root url="file://$PROJECT_DIR$/../../../../src/flutter/bin/cache/dart-sdk/lib/io" />
<root url="file://$PROJECT_DIR$/../../../../src/flutter/bin/cache/dart-sdk/lib/isolate" />
<root url="file://$PROJECT_DIR$/../../../../src/flutter/bin/cache/dart-sdk/lib/js" />
<root url="file://$PROJECT_DIR$/../../../../src/flutter/bin/cache/dart-sdk/lib/js_interop" />
<root url="file://$PROJECT_DIR$/../../../../src/flutter/bin/cache/dart-sdk/lib/js_util" />
<root url="file://$PROJECT_DIR$/../../../../src/flutter/bin/cache/dart-sdk/lib/math" />
<root url="file://$PROJECT_DIR$/../../../../src/flutter/bin/cache/dart-sdk/lib/mirrors" />
<root url="file://$PROJECT_DIR$/../../../../src/flutter/bin/cache/dart-sdk/lib/svg" />
<root url="file://$PROJECT_DIR$/../../../../src/flutter/bin/cache/dart-sdk/lib/typed_data" />
<root url="file://$PROJECT_DIR$/../../../../src/flutter/bin/cache/dart-sdk/lib/web_audio" />
<root url="file://$PROJECT_DIR$/../../../../src/flutter/bin/cache/dart-sdk/lib/web_gl" />
<root url="file:///opt/homebrew/opt/dart/libexec/lib/async" />
<root url="file:///opt/homebrew/opt/dart/libexec/lib/cli" />
<root url="file:///opt/homebrew/opt/dart/libexec/lib/collection" />
<root url="file:///opt/homebrew/opt/dart/libexec/lib/convert" />
<root url="file:///opt/homebrew/opt/dart/libexec/lib/core" />
<root url="file:///opt/homebrew/opt/dart/libexec/lib/developer" />
<root url="file:///opt/homebrew/opt/dart/libexec/lib/ffi" />
<root url="file:///opt/homebrew/opt/dart/libexec/lib/html" />
<root url="file:///opt/homebrew/opt/dart/libexec/lib/indexed_db" />
<root url="file:///opt/homebrew/opt/dart/libexec/lib/io" />
<root url="file:///opt/homebrew/opt/dart/libexec/lib/isolate" />
<root url="file:///opt/homebrew/opt/dart/libexec/lib/js" />
<root url="file:///opt/homebrew/opt/dart/libexec/lib/js_interop" />
<root url="file:///opt/homebrew/opt/dart/libexec/lib/js_interop_unsafe" />
<root url="file:///opt/homebrew/opt/dart/libexec/lib/js_util" />
<root url="file:///opt/homebrew/opt/dart/libexec/lib/math" />
<root url="file:///opt/homebrew/opt/dart/libexec/lib/mirrors" />
<root url="file:///opt/homebrew/opt/dart/libexec/lib/svg" />
<root url="file:///opt/homebrew/opt/dart/libexec/lib/typed_data" />
<root url="file:///opt/homebrew/opt/dart/libexec/lib/web_audio" />
<root url="file:///opt/homebrew/opt/dart/libexec/lib/web_gl" />
</CLASSES>
<JAVADOC />
<SOURCES />

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 844 KiB

@ -4,8 +4,10 @@
---
&nbsp; ![Firebase](https://img.shields.io/badge/Firebase-FFCA28.svg?style=for-the-badge&logo=Firebase&logoColor=black)
&nbsp; ![Dart](https://img.shields.io/badge/Dart-000?style=for-the-badge&logo=dart&logoColor=blue&color=white)
&nbsp; ![Flutter](https://img.shields.io/badge/Flutter-000?style=for-the-badge&logo=flutter&logoColor=blue&color=white)
&nbsp; ![Spotify](https://img.shields.io/badge/Spotify-1DB954.svg?style=for-the-badge&logo=Spotify&logoColor=white)
---
@ -31,13 +33,15 @@ JustMusic est un projet collaboratif à but lucratif pour Android/IOS utilisant
C'est un réseau social donc l'utilisateur pourra publier et commenter des posts. Il pourra s'abonner à d'autre utilisateurs pour voir leurs post sur son fil d'actualité.
**Lien pour tester la version web:** [Just Music](https://justmusic-435d5.web.app) 🎶
## Répartition du Gitlab
La racine de notre gitlab est composé de deux dossier essentielles au projet:
[**src**](src) : **Code de l'application**
[**Sources**](Sources) : **Code de l'application**
[**doc**](doc) : **Regroupe l'entièreté de la documentation**
[**Documentation**](Documentation) : **Regroupe l'entièreté de la documentation**
</br>
@ -45,10 +49,33 @@ La racine de notre gitlab est composé de deux dossier essentielles au projet:
## Fonctionnement
<div align = center>
<img src="Documentation/Images/Overview.png" />
</div>
### Feeds
Une fois authentifié vous aurez la possibilité de voir les posts capsules de vos amis, de voir les musiques qu'ils mettent en avant accompagner éventuellement d'une image, d'une description, de leurs localisations... (Vous n'avez pas d'amis, pas de soucis, cliquer seulement sur l'icon en haut a gauche de la page pour suivre nimporte quel personne que vous voulez), Mais aussi juste d'un simple mouvement du doigt swiper pour vous retrouvez sur la page Discovery où vous verrais les posts récents en tendance dans le monde 🌎
Amuser vous à cliquer sur les posts pour ecouter la music mais aussi connaître les détails et savoir qui a commenter 💬 et liker ❤️. Si la musique vous plaît enregistrer la et vous la retrouverez lorsque vous aurez envie de poster.
### Post
Pour participer à cette aventure musicale avec des gens du monde entier, cliquez simplement sur l'icône JustMusic. Gardez à l'esprit que vous ne pourrez poster qu'une fois par jour, donc réfléchissez bien à la musique que vous souhaitez mettre en avant. N'hésitez pas à ajouter une photo et une description pour rendre votre publication plus chaleureuse 😃.
### Profil
Consultez l'aperçu de votre profil pour savoir combien de personnes vous suivent et que vous suivez. Vous pouvez également voir le nombre de capsules que vous avez publiées, personnaliser les paramètres de votre compte selon vos préférences, et explorez votre historique de capsules pour vous remémorer vos précédentes publications 🎧.
#### Bonne aventure musicale 🎵🌟
## Deploiement
- [x] &nbsp; ![IOS](https://img.shields.io/badge/IOS-000?style=for-the-badge&logo=apple&logoColor=black&color=white)
- [x] &nbsp; ![Android](https://img.shields.io/badge/Android-000?style=for-the-badge&logo=android&logoColor=white&color=green)
- [x] &nbsp; ![Safari](https://img.shields.io/badge/Safari-000000.svg?style=for-the-badge&logo=Safari&logoColor=white)
## Techniciens
@ -57,10 +84,10 @@ La racine de notre gitlab est composé de deux dossier essentielles au projet:
<img src ="https://codefirst.iut.uca.fr/git/avatars/6a3835d734392fccff3949f7c82a63b9?size=870" height="50px">
</a>
<a href = "https://codefirst.iut.uca.fr/git/emre.kartal">
<img src ="https://codefirst.iut.uca.fr/git/avatars/402cf312e853192f42c0135a888725c2?size=870" height="50px">
<img src ="https://codefirst.iut.uca.fr/git/avatars/1ff65c9c5ab0e8c8883fb48adbcf972f?size=870" height="50px">
</a>
<a href = "https://codefirst.iut.uca.fr/git/david.d_almeida">
<img src ="https://codefirst.iut.uca.fr/git/avatars/0f8eaaad1e26d3de644ca522eccaea7c?size=870" height="50px">
<img src ="https://codefirst.iut.uca.fr/git/avatars/a16fa2dc52ceae18d8923c91121caa66?size=870" height="50px">
</a>
<a href = "https://codefirst.iut.uca.fr/git/rayhan.hassou">
<img src ="https://codefirst.iut.uca.fr/git/avatars/84062b2bb326d9e9154a9859b375e599?size=870" height="50px">

@ -0,0 +1,5 @@
{
"projects": {
"default": "justmusic-435d5"
}
}

@ -30,7 +30,7 @@ migrate_working_dir/
.packages
.pub-cache/
.pub/
.lib/values/keys.dart
lib/values/keys.dart
/build/
# Symbolication related

@ -1,30 +1,45 @@
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
# This file should be version controlled.
version:
revision: f468f3366c26a5092eb964a230ce7892fda8f2f8
channel: stable
project_type: app
# Tracks metadata for the flutter migrate command
migration:
platforms:
- platform: root
create_revision: f468f3366c26a5092eb964a230ce7892fda8f2f8
base_revision: f468f3366c26a5092eb964a230ce7892fda8f2f8
- platform: android
create_revision: f468f3366c26a5092eb964a230ce7892fda8f2f8
base_revision: f468f3366c26a5092eb964a230ce7892fda8f2f8
# User provided section
# List of Local paths (relative to this file) that should be
# ignored by the migrate tool.
#
# Files that are not part of the templates will be ignored by default.
unmanaged_files:
- 'lib/main.dart'
- 'ios/Runner.xcodeproj/project.pbxproj'
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
# This file should be version controlled and should not be manually edited.
version:
revision: "db7ef5bf9f59442b0e200a90587e8fa5e0c6336a"
channel: "stable"
project_type: app
# Tracks metadata for the flutter migrate command
migration:
platforms:
- platform: root
create_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
base_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
- platform: android
create_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
base_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
- platform: ios
create_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
base_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
- platform: linux
create_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
base_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
- platform: macos
create_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
base_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
- platform: web
create_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
base_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
- platform: windows
create_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
base_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
# User provided section
# List of Local paths (relative to this file) that should be
# ignored by the migrate tool.
#
# Files that are not part of the templates will be ignored by default.
unmanaged_files:
- 'lib/main.dart'
- 'ios/Runner.xcodeproj/project.pbxproj'

@ -24,10 +24,11 @@ if (flutterVersionName == null) {
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'com.google.gms.google-services'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android {
namespace "com.example.justmusic"
namespace "com.justdev.justmusic"
compileSdkVersion 33
ndkVersion flutter.ndkVersion
@ -47,7 +48,7 @@ android {
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.example.justmusic"
applicationId "com.justdev.justmusic"
// 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 19

@ -12,6 +12,58 @@
"package_name": "com.example.justmusic"
}
},
"oauth_client": [
{
"client_id": "994903990520-a3im0ap1qqrs6j2u97v302v119e4jgbo.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "com.example.justmusic",
"certificate_hash": "b08e11598626ceeaaf75c6a3f71dce7af0846a07"
}
},
{
"client_id": "994903990520-tbbnoqubdo6eeo1d5iv94g7dofsdjnma.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "com.example.justmusic",
"certificate_hash": "883f6f500f08166c76009ec56ce77d98bb9fb831"
}
},
{
"client_id": "994903990520-rdk6ldrmbi71ddqt84qfhtuficm7ngon.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyCjkofl0nvfzQqRZPv_-H99WoyYa7O660g"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "994903990520-9jsnq9ipdn7smk7tlbdd20i7j6sl3jcd.apps.googleusercontent.com",
"client_type": 3
},
{
"client_id": "994903990520-n6jd98ena56kb1tvtrd67tvb5et3nfbf.apps.googleusercontent.com",
"client_type": 2,
"ios_info": {
"bundle_id": "com.example.justmusic"
}
}
]
}
}
},
{
"client_info": {
"mobilesdk_app_id": "1:994903990520:android:056f0394b9fb14410a9b0d",
"android_client_info": {
"package_name": "com.justdev.justmusic"
}
},
"oauth_client": [
{
"client_id": "994903990520-rdk6ldrmbi71ddqt84qfhtuficm7ngon.apps.googleusercontent.com",

@ -1,9 +1,6 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.justmusic">
<!-- The INTERNET permission is required for development. Specifically,
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
package="com.justdev.justmusic">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>

@ -1,9 +1,10 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.justmusic">
package="com.justdev.justmusic">
<application
android:label="justmusic"
android:label="JustMUSIC"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher">
<activity
android:name=".MainActivity"
android:exported="true"
@ -31,5 +32,7 @@ package="com.example.justmusic">
android:name="flutterEmbedding"
android:value="2" />
</application>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>

@ -1,4 +1,4 @@
package com.example.justmusic
package com.justdev.justmusic
import io.flutter.embedding.android.FlutterActivity

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="?android:colorBackground" />
<item android:drawable="@android:color/black" />
<!-- You can insert your own image assets here -->
<!-- <item>

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/white" />
<item android:drawable="@android:color/black" />
<!-- You can insert your own image assets here -->
<!-- <item>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 544 B

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 442 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 721 B

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

@ -1,9 +1,6 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.justmusic">
<!-- The INTERNET permission is required for development. Specifically,
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1 @@
{"nm":"newScene","ddd":0,"h":506,"w":246,"meta":{"g":"LottieFiles Figma v38"},"layers":[{"ty":4,"nm":"","sr":1,"st":0,"op":55,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"nm":"","it":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[18.31699999999998,-14.117000000000019],[0,0],[4.924000000000007,-5.552999999999997],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.176000000000016,8.12299999999999],[0,0],[-4.0330000000000155,15.050000000000011],[0,0],[0,0]],"o":[[-15.049000000000007,-4.031999999999982],[0,0],[-8.12299999999999,-2.1759999999999877],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[7.271000000000015,-1.488999999999976],[0,0],[21.383999999999986,-8.803999999999974],[0,0],[0,0],[0,0]],"v":[[229.562,323.522],[173.235,338.521],[161.993,335.509],[142.666,343.701],[136.075,351.133],[146.207,353.848],[156.351,356.566],[164.059,369.916],[171.766,383.266],[169.048,393.41],[166.333,403.542],[176.065,401.551],[192.823,388.908],[195.836,377.666],[236.989,336.385],[239.707,326.24],[229.562,323.522]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[1.0389999999999873,-3.8759999999999764],[3.8770000000000095,1.038000000000011],[-1.0389999999999873,3.8770000000000095],[-3.8770000000000095,-1.0389999999999873]],"o":[[3.8760000000000048,1.038000000000011],[-1.0390000000000157,3.8770000000000095],[-3.8770000000000095,-1.0389999999999873],[1.038000000000011,-3.8770000000000095],[0,0]],"v":[[205.989,339.775],[211.127,348.674],[202.227,353.813],[197.089,344.913],[205.989,339.775]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[-7.138000000000005,4.120999999999981],[0,0],[0,0]],"o":[[0,0],[-6.4269999999999925,3.7110000000000127],[0,0],[0,0],[0,0],[0,0]],"v":[[149.08,369.664],[144.63,372.233],[132.909,387.9],[152.338,385.583],[156.788,383.014],[149.08,369.664]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":0,"k":[0.0471,0.0471,0.0471]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[90],"t":0},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[90],"t":5},{"s":[0],"t":25}]},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":0},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":5},{"s":[100],"t":25}]}}]}],"ind":1}],"v":"5.7.0","fr":60,"op":55,"ip":0,"assets":[]}

@ -0,0 +1,3 @@
<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.75444 22.8646C3.50887 24.619 6.3326 24.619 11.9801 24.619C17.6275 24.619 20.4513 24.619 22.2056 22.8646C23.9601 21.1102 23.9601 18.2864 23.9601 12.639C23.9601 6.99153 23.9601 4.16781 22.2056 2.41338C20.4513 0.658936 17.6275 0.658936 11.9801 0.658936C6.3326 0.658936 3.50887 0.658936 1.75444 2.41338C0 4.16781 0 6.99153 0 12.639C0 18.2864 0 21.1102 1.75444 22.8646ZM12.8785 9.0449C12.8785 8.54868 12.4762 8.1464 11.98 8.1464C11.4838 8.1464 11.0815 8.54868 11.0815 9.0449V11.7404H8.38597C7.88974 11.7404 7.48746 12.1427 7.48746 12.6389C7.48746 13.1351 7.88974 13.5374 8.38597 13.5374H11.0815V16.2329C11.0815 16.7291 11.4838 17.1314 11.98 17.1314C12.4762 17.1314 12.8785 16.7291 12.8785 16.2329V13.5374H15.574C16.0702 13.5374 16.4725 13.1351 16.4725 12.6389C16.4725 12.1427 16.0702 11.7404 15.574 11.7404H12.8785V9.0449Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 989 B

@ -0,0 +1,4 @@
<svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.1376 26.2263L12.4586 25.6842C12.9728 24.8153 13.23 24.3809 13.6396 24.1386C14.0493 23.8962 14.5835 23.8791 15.6522 23.8449C16.6542 23.8129 17.3278 23.7254 17.9035 23.487C19.1159 22.9847 20.0791 22.0215 20.5812 20.8092C20.958 19.8999 20.958 18.7473 20.958 16.4418V15.4523C20.958 12.213 20.958 10.5934 20.2288 9.4036C19.8208 8.73784 19.261 8.1781 18.5953 7.77012C17.4056 7.04102 15.7859 7.04102 12.5466 7.04102H9.57799C6.33874 7.04102 4.71912 7.04102 3.52933 7.77012C2.86357 8.1781 2.30383 8.73784 1.89586 9.4036C1.16675 10.5934 1.16675 12.213 1.16675 15.4523V16.4418C1.16675 18.7473 1.16675 19.8999 1.54337 20.8092C2.04555 22.0215 3.00875 22.9847 4.2211 23.487C4.79692 23.7254 5.47037 23.8129 6.4724 23.8449C7.54104 23.8791 8.07536 23.8962 8.48499 24.1386C8.89463 24.3809 9.15178 24.8153 9.66608 25.6842L9.98698 26.2263C10.4651 27.0341 11.6595 27.0341 12.1376 26.2263ZM15.3917 16.9366C16.0748 16.9366 16.6286 16.3828 16.6286 15.6996C16.6286 15.0165 16.0748 14.4627 15.3917 14.4627C14.7085 14.4627 14.1547 15.0165 14.1547 15.6996C14.1547 16.3828 14.7085 16.9366 15.3917 16.9366ZM12.2993 15.6996C12.2993 16.3828 11.7455 16.9366 11.0623 16.9366C10.3792 16.9366 9.82539 16.3828 9.82539 15.6996C9.82539 15.0165 10.3792 14.4627 11.0623 14.4627C11.7455 14.4627 12.2993 15.0165 12.2993 15.6996ZM6.73301 16.9366C7.41616 16.9366 7.96997 16.3828 7.96997 15.6996C7.96997 15.0165 7.41616 14.4627 6.73301 14.4627C6.04987 14.4627 5.49606 15.0165 5.49606 15.6996C5.49606 16.3828 6.04987 16.9366 6.73301 16.9366Z" fill="white"/>
<path opacity="0.5" d="M18.0669 1.16675C19.545 1.16674 20.7203 1.16673 21.6629 1.25636C22.6294 1.34826 23.4467 1.54089 24.1747 1.987C24.9237 2.44597 25.5533 3.07568 26.0123 3.82466C26.4584 4.55264 26.651 5.36984 26.743 6.33639C26.8326 7.279 26.8326 8.45442 26.8326 9.93242V10.9419C26.8326 11.9938 26.8326 12.8305 26.7862 13.5089C26.7389 14.2031 26.6401 14.799 26.4088 15.3571C25.8439 16.7211 24.7603 17.8047 23.3964 18.3696C23.3623 18.3837 23.328 18.3974 23.2936 18.4105C23.129 18.4734 22.9878 18.5274 22.864 18.5676H20.9389C20.9578 17.9854 20.9578 17.2921 20.9578 16.4419V15.4523C20.9578 12.2131 20.9578 10.5935 20.2286 9.40368C19.8207 8.73792 19.2609 8.17818 18.5952 7.77021C17.4054 7.0411 15.7857 7.0411 12.5465 7.0411H9.57783C8.42819 7.0411 7.48256 7.0411 6.68774 7.07369V5.14823C6.72591 5.01598 6.7782 4.86439 6.83956 4.68646C6.94394 4.38384 7.07586 4.09764 7.24315 3.82466C7.70211 3.07568 8.33182 2.44597 9.0808 1.987C9.80878 1.54089 10.626 1.34826 11.5925 1.25636C12.5352 1.16673 13.7105 1.16674 15.1885 1.16675H18.0669Z" fill="#8B8B8B"/>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 345 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

@ -0,0 +1,3 @@
<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M10.1328 22.8086C6.62274 20.1042 2.5 16.9278 2.5 11.4214C2.5 5.34276 9.3752 1.03189 15 6.87585L17.5 9.37416C17.8661 9.74021 18.4597 9.7401 18.8259 9.37391C19.1919 9.00774 19.1917 8.41415 18.8256 8.0481L16.4106 5.63396C21.7106 1.75393 27.5 5.84338 27.5 11.4214C27.5 16.9278 23.3772 20.1042 19.8671 22.8086C19.5024 23.0897 19.1441 23.3657 18.7979 23.6387C17.5 24.6618 16.25 25.6251 15 25.6251C13.75 25.6251 12.5 24.6618 11.2022 23.6387C10.8559 23.3657 10.4977 23.0897 10.1328 22.8086Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 611 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 983 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

@ -0,0 +1,5 @@
<svg width="27" height="26" viewBox="0 0 27 26" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M24.7935 13.0001C24.7935 7.01699 19.9432 2.16675 13.9602 2.16675C7.97708 2.16675 3.12683 7.01699 3.12683 13.0001C3.12683 18.9831 7.97708 23.8334 13.9602 23.8334C19.9432 23.8334 24.7935 18.9831 24.7935 13.0001Z" fill="white"/>
<path d="M13.9602 6.77075C14.4089 6.77075 14.7727 7.13452 14.7727 7.58325V14.0833C14.7727 14.532 14.4089 14.8958 13.9602 14.8958C13.5115 14.8958 13.1477 14.532 13.1477 14.0833V7.58325C13.1477 7.13452 13.5115 6.77075 13.9602 6.77075Z" fill="#515151"/>
<path d="M13.9602 18.4167C14.5585 18.4167 15.0435 17.9317 15.0435 17.3333C15.0435 16.735 14.5585 16.25 13.9602 16.25C13.3618 16.25 12.8768 16.735 12.8768 17.3333C12.8768 17.9317 13.3618 18.4167 13.9602 18.4167Z" fill="#515151"/>
</svg>

After

Width:  |  Height:  |  Size: 818 B

@ -0,0 +1,4 @@
<svg width="31" height="30" viewBox="0 0 31 30" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M16.6571 21.8771C16.4792 22.0747 16.226 22.1875 15.9602 22.1875C15.6945 22.1875 15.4412 22.0747 15.2633 21.8771L11.5134 17.7105C11.167 17.3256 11.1982 16.7329 11.5831 16.3865C11.9679 16.0401 12.5607 16.0714 12.9071 16.4561L15.0227 18.8069V8.75002H5.96021C5.77152 8.75006 5.51671 8.7501 5.33521 8.74756V16.25C5.33521 20.9641 5.3352 23.3211 6.79967 24.7855C8.26414 26.25 10.6212 26.25 15.3352 26.25H16.5852C21.2992 26.25 23.6563 26.25 25.1207 24.7855C26.5852 23.3211 26.5852 20.9641 26.5852 16.25V8.74756C26.4037 8.7501 26.1488 8.75006 25.9602 8.75002H16.8977V18.8069L19.0133 16.4561C19.3597 16.0714 19.9525 16.0401 20.3373 16.3865C20.7222 16.7329 20.7535 17.3256 20.4071 17.7105L16.6571 21.8771Z" fill="white"/>
<path d="M3.46021 6.25C3.46021 5.07149 3.46021 4.48224 3.82632 4.11611C4.19244 3.75 4.78169 3.75 5.9602 3.75H25.9602C27.1387 3.75 27.728 3.75 28.0941 4.11611C28.4602 4.48224 28.4602 5.07149 28.4602 6.25C28.4602 7.42851 28.4602 8.01776 28.0941 8.38389C27.728 8.75 27.1387 8.75 25.9602 8.75H5.9602C4.78169 8.75 4.19244 8.75 3.82632 8.38389C3.46021 8.01776 3.46021 7.42851 3.46021 6.25Z" fill="#515151"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

@ -0,0 +1,17 @@
{
"hosting": {
"site": "justmusic-435d5",
"public": "build/web",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"rewrites": [
{
"source": "**",
"destination": "/index.html"
}
]
}
}

@ -1 +1,2 @@
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "Generated.xcconfig"

@ -1 +1,2 @@
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Generated.xcconfig"

@ -0,0 +1,44 @@
# Uncomment this line to define a global platform for your project
platform :ios, '11.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
project 'Runner', {
'Debug' => :debug,
'Profile' => :release,
'Release' => :release,
}
def flutter_root
generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
unless File.exist?(generated_xcode_build_settings_path)
raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
end
File.foreach(generated_xcode_build_settings_path) do |line|
matches = line.match(/FLUTTER_ROOT\=(.*)/)
return matches[1].strip if matches
end
raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
end
require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
flutter_ios_podfile_setup
target 'Runner' do
use_frameworks!
use_modular_headers!
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
target 'RunnerTests' do
inherit! :search_paths
end
end
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
end
end

@ -0,0 +1,958 @@
PODS:
- abseil/algorithm (1.20220623.0):
- abseil/algorithm/algorithm (= 1.20220623.0)
- abseil/algorithm/container (= 1.20220623.0)
- abseil/algorithm/algorithm (1.20220623.0):
- abseil/base/config
- abseil/algorithm/container (1.20220623.0):
- abseil/algorithm/algorithm
- abseil/base/core_headers
- abseil/meta/type_traits
- abseil/base (1.20220623.0):
- abseil/base/atomic_hook (= 1.20220623.0)
- abseil/base/base (= 1.20220623.0)
- abseil/base/base_internal (= 1.20220623.0)
- abseil/base/config (= 1.20220623.0)
- abseil/base/core_headers (= 1.20220623.0)
- abseil/base/dynamic_annotations (= 1.20220623.0)
- abseil/base/endian (= 1.20220623.0)
- abseil/base/errno_saver (= 1.20220623.0)
- abseil/base/fast_type_id (= 1.20220623.0)
- abseil/base/log_severity (= 1.20220623.0)
- abseil/base/malloc_internal (= 1.20220623.0)
- abseil/base/prefetch (= 1.20220623.0)
- abseil/base/pretty_function (= 1.20220623.0)
- abseil/base/raw_logging_internal (= 1.20220623.0)
- abseil/base/spinlock_wait (= 1.20220623.0)
- abseil/base/strerror (= 1.20220623.0)
- abseil/base/throw_delegate (= 1.20220623.0)
- abseil/base/atomic_hook (1.20220623.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/base/base (1.20220623.0):
- abseil/base/atomic_hook
- abseil/base/base_internal
- abseil/base/config
- abseil/base/core_headers
- abseil/base/dynamic_annotations
- abseil/base/log_severity
- abseil/base/raw_logging_internal
- abseil/base/spinlock_wait
- abseil/meta/type_traits
- abseil/base/base_internal (1.20220623.0):
- abseil/base/config
- abseil/meta/type_traits
- abseil/base/config (1.20220623.0)
- abseil/base/core_headers (1.20220623.0):
- abseil/base/config
- abseil/base/dynamic_annotations (1.20220623.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/base/endian (1.20220623.0):
- abseil/base/base
- abseil/base/config
- abseil/base/core_headers
- abseil/base/errno_saver (1.20220623.0):
- abseil/base/config
- abseil/base/fast_type_id (1.20220623.0):
- abseil/base/config
- abseil/base/log_severity (1.20220623.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/base/malloc_internal (1.20220623.0):
- abseil/base/base
- abseil/base/base_internal
- abseil/base/config
- abseil/base/core_headers
- abseil/base/dynamic_annotations
- abseil/base/raw_logging_internal
- abseil/base/prefetch (1.20220623.0):
- abseil/base/config
- abseil/base/pretty_function (1.20220623.0)
- abseil/base/raw_logging_internal (1.20220623.0):
- abseil/base/atomic_hook
- abseil/base/config
- abseil/base/core_headers
- abseil/base/errno_saver
- abseil/base/log_severity
- abseil/base/spinlock_wait (1.20220623.0):
- abseil/base/base_internal
- abseil/base/core_headers
- abseil/base/errno_saver
- abseil/base/strerror (1.20220623.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/base/errno_saver
- abseil/base/throw_delegate (1.20220623.0):
- abseil/base/config
- abseil/base/raw_logging_internal
- abseil/cleanup/cleanup (1.20220623.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/cleanup/cleanup_internal
- abseil/cleanup/cleanup_internal (1.20220623.0):
- abseil/base/base_internal
- abseil/base/core_headers
- abseil/utility/utility
- abseil/container/common (1.20220623.0):
- abseil/meta/type_traits
- abseil/types/optional
- abseil/container/compressed_tuple (1.20220623.0):
- abseil/utility/utility
- abseil/container/container_memory (1.20220623.0):
- abseil/base/config
- abseil/memory/memory
- abseil/meta/type_traits
- abseil/utility/utility
- abseil/container/fixed_array (1.20220623.0):
- abseil/algorithm/algorithm
- abseil/base/config
- abseil/base/core_headers
- abseil/base/dynamic_annotations
- abseil/base/throw_delegate
- abseil/container/compressed_tuple
- abseil/memory/memory
- abseil/container/flat_hash_map (1.20220623.0):
- abseil/algorithm/container
- abseil/base/core_headers
- abseil/container/container_memory
- abseil/container/hash_function_defaults
- abseil/container/raw_hash_map
- abseil/memory/memory
- abseil/container/flat_hash_set (1.20220623.0):
- abseil/algorithm/container
- abseil/base/core_headers
- abseil/container/container_memory
- abseil/container/hash_function_defaults
- abseil/container/raw_hash_set
- abseil/memory/memory
- abseil/container/hash_function_defaults (1.20220623.0):
- abseil/base/config
- abseil/hash/hash
- abseil/strings/cord
- abseil/strings/strings
- abseil/container/hash_policy_traits (1.20220623.0):
- abseil/meta/type_traits
- abseil/container/hashtable_debug_hooks (1.20220623.0):
- abseil/base/config
- abseil/container/hashtablez_sampler (1.20220623.0):
- abseil/base/base
- abseil/base/config
- abseil/base/core_headers
- abseil/debugging/stacktrace
- abseil/memory/memory
- abseil/profiling/exponential_biased
- abseil/profiling/sample_recorder
- abseil/synchronization/synchronization
- abseil/utility/utility
- abseil/container/inlined_vector (1.20220623.0):
- abseil/algorithm/algorithm
- abseil/base/core_headers
- abseil/base/throw_delegate
- abseil/container/inlined_vector_internal
- abseil/memory/memory
- abseil/container/inlined_vector_internal (1.20220623.0):
- abseil/base/core_headers
- abseil/container/compressed_tuple
- abseil/memory/memory
- abseil/meta/type_traits
- abseil/types/span
- abseil/container/layout (1.20220623.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/meta/type_traits
- abseil/strings/strings
- abseil/types/span
- abseil/utility/utility
- abseil/container/raw_hash_map (1.20220623.0):
- abseil/base/throw_delegate
- abseil/container/container_memory
- abseil/container/raw_hash_set
- abseil/container/raw_hash_set (1.20220623.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/base/endian
- abseil/base/prefetch
- abseil/container/common
- abseil/container/compressed_tuple
- abseil/container/container_memory
- abseil/container/hash_policy_traits
- abseil/container/hashtable_debug_hooks
- abseil/container/hashtablez_sampler
- abseil/memory/memory
- abseil/meta/type_traits
- abseil/numeric/bits
- abseil/utility/utility
- abseil/debugging/debugging_internal (1.20220623.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/base/dynamic_annotations
- abseil/base/errno_saver
- abseil/base/raw_logging_internal
- abseil/debugging/demangle_internal (1.20220623.0):
- abseil/base/base
- abseil/base/config
- abseil/base/core_headers
- abseil/debugging/stacktrace (1.20220623.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/debugging/debugging_internal
- abseil/debugging/symbolize (1.20220623.0):
- abseil/base/base
- abseil/base/config
- abseil/base/core_headers
- abseil/base/dynamic_annotations
- abseil/base/malloc_internal
- abseil/base/raw_logging_internal
- abseil/debugging/debugging_internal
- abseil/debugging/demangle_internal
- abseil/strings/strings
- abseil/functional/any_invocable (1.20220623.0):
- abseil/base/base_internal
- abseil/base/config
- abseil/base/core_headers
- abseil/meta/type_traits
- abseil/utility/utility
- abseil/functional/bind_front (1.20220623.0):
- abseil/base/base_internal
- abseil/container/compressed_tuple
- abseil/meta/type_traits
- abseil/utility/utility
- abseil/functional/function_ref (1.20220623.0):
- abseil/base/base_internal
- abseil/base/core_headers
- abseil/meta/type_traits
- abseil/hash/city (1.20220623.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/base/endian
- abseil/hash/hash (1.20220623.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/base/endian
- abseil/container/fixed_array
- abseil/functional/function_ref
- abseil/hash/city
- abseil/hash/low_level_hash
- abseil/meta/type_traits
- abseil/numeric/int128
- abseil/strings/strings
- abseil/types/optional
- abseil/types/variant
- abseil/utility/utility
- abseil/hash/low_level_hash (1.20220623.0):
- abseil/base/config
- abseil/base/endian
- abseil/numeric/bits
- abseil/numeric/int128
- abseil/memory (1.20220623.0):
- abseil/memory/memory (= 1.20220623.0)
- abseil/memory/memory (1.20220623.0):
- abseil/base/core_headers
- abseil/meta/type_traits
- abseil/meta (1.20220623.0):
- abseil/meta/type_traits (= 1.20220623.0)
- abseil/meta/type_traits (1.20220623.0):
- abseil/base/config
- abseil/numeric/bits (1.20220623.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/numeric/int128 (1.20220623.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/numeric/bits
- abseil/numeric/representation (1.20220623.0):
- abseil/base/config
- abseil/profiling/exponential_biased (1.20220623.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/profiling/sample_recorder (1.20220623.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/synchronization/synchronization
- abseil/time/time
- abseil/random/distributions (1.20220623.0):
- abseil/base/base_internal
- abseil/base/config
- abseil/base/core_headers
- abseil/meta/type_traits
- abseil/numeric/bits
- abseil/random/internal/distribution_caller
- abseil/random/internal/fast_uniform_bits
- abseil/random/internal/fastmath
- abseil/random/internal/generate_real
- abseil/random/internal/iostream_state_saver
- abseil/random/internal/traits
- abseil/random/internal/uniform_helper
- abseil/random/internal/wide_multiply
- abseil/strings/strings
- abseil/random/internal/distribution_caller (1.20220623.0):
- abseil/base/config
- abseil/base/fast_type_id
- abseil/utility/utility
- abseil/random/internal/fast_uniform_bits (1.20220623.0):
- abseil/base/config
- abseil/meta/type_traits
- abseil/random/internal/traits
- abseil/random/internal/fastmath (1.20220623.0):
- abseil/numeric/bits
- abseil/random/internal/generate_real (1.20220623.0):
- abseil/meta/type_traits
- abseil/numeric/bits
- abseil/random/internal/fastmath
- abseil/random/internal/traits
- abseil/random/internal/iostream_state_saver (1.20220623.0):
- abseil/meta/type_traits
- abseil/numeric/int128
- abseil/random/internal/nonsecure_base (1.20220623.0):
- abseil/base/core_headers
- abseil/container/inlined_vector
- abseil/meta/type_traits
- abseil/random/internal/pool_urbg
- abseil/random/internal/salted_seed_seq
- abseil/random/internal/seed_material
- abseil/types/span
- abseil/random/internal/pcg_engine (1.20220623.0):
- abseil/base/config
- abseil/meta/type_traits
- abseil/numeric/bits
- abseil/numeric/int128
- abseil/random/internal/fastmath
- abseil/random/internal/iostream_state_saver
- abseil/random/internal/platform (1.20220623.0):
- abseil/base/config
- abseil/random/internal/pool_urbg (1.20220623.0):
- abseil/base/base
- abseil/base/config
- abseil/base/core_headers
- abseil/base/endian
- abseil/base/raw_logging_internal
- abseil/random/internal/randen
- abseil/random/internal/seed_material
- abseil/random/internal/traits
- abseil/random/seed_gen_exception
- abseil/types/span
- abseil/random/internal/randen (1.20220623.0):
- abseil/base/raw_logging_internal
- abseil/random/internal/platform
- abseil/random/internal/randen_hwaes
- abseil/random/internal/randen_slow
- abseil/random/internal/randen_engine (1.20220623.0):
- abseil/base/endian
- abseil/meta/type_traits
- abseil/random/internal/iostream_state_saver
- abseil/random/internal/randen
- abseil/random/internal/randen_hwaes (1.20220623.0):
- abseil/base/config
- abseil/random/internal/platform
- abseil/random/internal/randen_hwaes_impl
- abseil/random/internal/randen_hwaes_impl (1.20220623.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/numeric/int128
- abseil/random/internal/platform
- abseil/random/internal/randen_slow (1.20220623.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/base/endian
- abseil/numeric/int128
- abseil/random/internal/platform
- abseil/random/internal/salted_seed_seq (1.20220623.0):
- abseil/container/inlined_vector
- abseil/meta/type_traits
- abseil/random/internal/seed_material
- abseil/types/optional
- abseil/types/span
- abseil/random/internal/seed_material (1.20220623.0):
- abseil/base/core_headers
- abseil/base/dynamic_annotations
- abseil/base/raw_logging_internal
- abseil/random/internal/fast_uniform_bits
- abseil/strings/strings
- abseil/types/optional
- abseil/types/span
- abseil/random/internal/traits (1.20220623.0):
- abseil/base/config
- abseil/numeric/bits
- abseil/numeric/int128
- abseil/random/internal/uniform_helper (1.20220623.0):
- abseil/base/config
- abseil/meta/type_traits
- abseil/numeric/int128
- abseil/random/internal/traits
- abseil/random/internal/wide_multiply (1.20220623.0):
- abseil/base/config
- abseil/numeric/bits
- abseil/numeric/int128
- abseil/random/internal/traits
- abseil/random/random (1.20220623.0):
- abseil/random/distributions
- abseil/random/internal/nonsecure_base
- abseil/random/internal/pcg_engine
- abseil/random/internal/pool_urbg
- abseil/random/internal/randen_engine
- abseil/random/seed_sequences
- abseil/random/seed_gen_exception (1.20220623.0):
- abseil/base/config
- abseil/random/seed_sequences (1.20220623.0):
- abseil/base/config
- abseil/random/internal/pool_urbg
- abseil/random/internal/salted_seed_seq
- abseil/random/internal/seed_material
- abseil/random/seed_gen_exception
- abseil/types/span
- abseil/status/status (1.20220623.0):
- abseil/base/atomic_hook
- abseil/base/core_headers
- abseil/base/raw_logging_internal
- abseil/base/strerror
- abseil/container/inlined_vector
- abseil/debugging/stacktrace
- abseil/debugging/symbolize
- abseil/functional/function_ref
- abseil/strings/cord
- abseil/strings/str_format
- abseil/strings/strings
- abseil/types/optional
- abseil/status/statusor (1.20220623.0):
- abseil/base/base
- abseil/base/core_headers
- abseil/base/raw_logging_internal
- abseil/meta/type_traits
- abseil/status/status
- abseil/strings/strings
- abseil/types/variant
- abseil/utility/utility
- abseil/strings/cord (1.20220623.0):
- abseil/base/base
- abseil/base/config
- abseil/base/core_headers
- abseil/base/endian
- abseil/base/raw_logging_internal
- abseil/container/fixed_array
- abseil/container/inlined_vector
- abseil/functional/function_ref
- abseil/meta/type_traits
- abseil/numeric/bits
- abseil/strings/cord_internal
- abseil/strings/cordz_functions
- abseil/strings/cordz_info
- abseil/strings/cordz_statistics
- abseil/strings/cordz_update_scope
- abseil/strings/cordz_update_tracker
- abseil/strings/internal
- abseil/strings/str_format
- abseil/strings/strings
- abseil/types/optional
- abseil/types/span
- abseil/strings/cord_internal (1.20220623.0):
- abseil/base/base_internal
- abseil/base/config
- abseil/base/core_headers
- abseil/base/endian
- abseil/base/raw_logging_internal
- abseil/base/throw_delegate
- abseil/container/compressed_tuple
- abseil/container/inlined_vector
- abseil/container/layout
- abseil/functional/function_ref
- abseil/meta/type_traits
- abseil/strings/strings
- abseil/types/span
- abseil/strings/cordz_functions (1.20220623.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/base/raw_logging_internal
- abseil/profiling/exponential_biased
- abseil/strings/cordz_handle (1.20220623.0):
- abseil/base/base
- abseil/base/config
- abseil/base/raw_logging_internal
- abseil/synchronization/synchronization
- abseil/strings/cordz_info (1.20220623.0):
- abseil/base/base
- abseil/base/config
- abseil/base/core_headers
- abseil/base/raw_logging_internal
- abseil/container/inlined_vector
- abseil/debugging/stacktrace
- abseil/strings/cord_internal
- abseil/strings/cordz_functions
- abseil/strings/cordz_handle
- abseil/strings/cordz_statistics
- abseil/strings/cordz_update_tracker
- abseil/synchronization/synchronization
- abseil/types/span
- abseil/strings/cordz_statistics (1.20220623.0):
- abseil/base/config
- abseil/strings/cordz_update_tracker
- abseil/strings/cordz_update_scope (1.20220623.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/strings/cord_internal
- abseil/strings/cordz_info
- abseil/strings/cordz_update_tracker
- abseil/strings/cordz_update_tracker (1.20220623.0):
- abseil/base/config
- abseil/strings/internal (1.20220623.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/base/endian
- abseil/base/raw_logging_internal
- abseil/meta/type_traits
- abseil/strings/str_format (1.20220623.0):
- abseil/strings/str_format_internal
- abseil/strings/str_format_internal (1.20220623.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/functional/function_ref
- abseil/meta/type_traits
- abseil/numeric/bits
- abseil/numeric/int128
- abseil/numeric/representation
- abseil/strings/strings
- abseil/types/optional
- abseil/types/span
- abseil/utility/utility
- abseil/strings/strings (1.20220623.0):
- abseil/base/base
- abseil/base/config
- abseil/base/core_headers
- abseil/base/endian
- abseil/base/raw_logging_internal
- abseil/base/throw_delegate
- abseil/memory/memory
- abseil/meta/type_traits
- abseil/numeric/bits
- abseil/numeric/int128
- abseil/strings/internal
- abseil/synchronization/graphcycles_internal (1.20220623.0):
- abseil/base/base
- abseil/base/base_internal
- abseil/base/config
- abseil/base/core_headers
- abseil/base/malloc_internal
- abseil/base/raw_logging_internal
- abseil/synchronization/kernel_timeout_internal (1.20220623.0):
- abseil/base/core_headers
- abseil/base/raw_logging_internal
- abseil/time/time
- abseil/synchronization/synchronization (1.20220623.0):
- abseil/base/atomic_hook
- abseil/base/base
- abseil/base/base_internal
- abseil/base/config
- abseil/base/core_headers
- abseil/base/dynamic_annotations
- abseil/base/malloc_internal
- abseil/base/raw_logging_internal
- abseil/debugging/stacktrace
- abseil/debugging/symbolize
- abseil/synchronization/graphcycles_internal
- abseil/synchronization/kernel_timeout_internal
- abseil/time/time
- abseil/time (1.20220623.0):
- abseil/time/internal (= 1.20220623.0)
- abseil/time/time (= 1.20220623.0)
- abseil/time/internal (1.20220623.0):
- abseil/time/internal/cctz (= 1.20220623.0)
- abseil/time/internal/cctz (1.20220623.0):
- abseil/time/internal/cctz/civil_time (= 1.20220623.0)
- abseil/time/internal/cctz/time_zone (= 1.20220623.0)
- abseil/time/internal/cctz/civil_time (1.20220623.0):
- abseil/base/config
- abseil/time/internal/cctz/time_zone (1.20220623.0):
- abseil/base/config
- abseil/time/internal/cctz/civil_time
- abseil/time/time (1.20220623.0):
- abseil/base/base
- abseil/base/core_headers
- abseil/base/raw_logging_internal
- abseil/numeric/int128
- abseil/strings/strings
- abseil/time/internal/cctz/civil_time
- abseil/time/internal/cctz/time_zone
- abseil/types (1.20220623.0):
- abseil/types/any (= 1.20220623.0)
- abseil/types/bad_any_cast (= 1.20220623.0)
- abseil/types/bad_any_cast_impl (= 1.20220623.0)
- abseil/types/bad_optional_access (= 1.20220623.0)
- abseil/types/bad_variant_access (= 1.20220623.0)
- abseil/types/compare (= 1.20220623.0)
- abseil/types/optional (= 1.20220623.0)
- abseil/types/span (= 1.20220623.0)
- abseil/types/variant (= 1.20220623.0)
- abseil/types/any (1.20220623.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/base/fast_type_id
- abseil/meta/type_traits
- abseil/types/bad_any_cast
- abseil/utility/utility
- abseil/types/bad_any_cast (1.20220623.0):
- abseil/base/config
- abseil/types/bad_any_cast_impl
- abseil/types/bad_any_cast_impl (1.20220623.0):
- abseil/base/config
- abseil/base/raw_logging_internal
- abseil/types/bad_optional_access (1.20220623.0):
- abseil/base/config
- abseil/base/raw_logging_internal
- abseil/types/bad_variant_access (1.20220623.0):
- abseil/base/config
- abseil/base/raw_logging_internal
- abseil/types/compare (1.20220623.0):
- abseil/base/core_headers
- abseil/meta/type_traits
- abseil/types/optional (1.20220623.0):
- abseil/base/base_internal
- abseil/base/config
- abseil/base/core_headers
- abseil/memory/memory
- abseil/meta/type_traits
- abseil/types/bad_optional_access
- abseil/utility/utility
- abseil/types/span (1.20220623.0):
- abseil/algorithm/algorithm
- abseil/base/core_headers
- abseil/base/throw_delegate
- abseil/meta/type_traits
- abseil/types/variant (1.20220623.0):
- abseil/base/base_internal
- abseil/base/config
- abseil/base/core_headers
- abseil/meta/type_traits
- abseil/types/bad_variant_access
- abseil/utility/utility
- abseil/utility/utility (1.20220623.0):
- abseil/base/base_internal
- abseil/base/config
- abseil/meta/type_traits
- AppAuth (1.6.2):
- AppAuth/Core (= 1.6.2)
- AppAuth/ExternalUserAgent (= 1.6.2)
- AppAuth/Core (1.6.2)
- AppAuth/ExternalUserAgent (1.6.2):
- AppAuth/Core
- audioplayers_darwin (0.0.1):
- Flutter
- BoringSSL-GRPC (0.0.24):
- BoringSSL-GRPC/Implementation (= 0.0.24)
- BoringSSL-GRPC/Interface (= 0.0.24)
- BoringSSL-GRPC/Implementation (0.0.24):
- BoringSSL-GRPC/Interface (= 0.0.24)
- BoringSSL-GRPC/Interface (0.0.24)
- cloud_firestore (4.8.4):
- Firebase/Firestore (= 10.12.0)
- firebase_core
- Flutter
- nanopb (< 2.30910.0, >= 2.30908.0)
- Firebase/Auth (10.12.0):
- Firebase/CoreOnly
- FirebaseAuth (~> 10.12.0)
- Firebase/CoreOnly (10.12.0):
- FirebaseCore (= 10.12.0)
- Firebase/Firestore (10.12.0):
- Firebase/CoreOnly
- FirebaseFirestore (~> 10.12.0)
- Firebase/Messaging (10.12.0):
- Firebase/CoreOnly
- FirebaseMessaging (~> 10.12.0)
- Firebase/Storage (10.12.0):
- Firebase/CoreOnly
- FirebaseStorage (~> 10.12.0)
- firebase_auth (4.7.2):
- Firebase/Auth (= 10.12.0)
- firebase_core
- Flutter
- firebase_core (2.15.0):
- Firebase/CoreOnly (= 10.12.0)
- Flutter
- firebase_messaging (14.6.5):
- Firebase/Messaging (= 10.12.0)
- firebase_core
- Flutter
- firebase_storage (11.2.5):
- Firebase/Storage (= 10.12.0)
- firebase_core
- Flutter
- FirebaseAppCheckInterop (10.14.0)
- FirebaseAuth (10.12.0):
- FirebaseAppCheckInterop (~> 10.0)
- FirebaseCore (~> 10.0)
- GoogleUtilities/AppDelegateSwizzler (~> 7.8)
- GoogleUtilities/Environment (~> 7.8)
- GTMSessionFetcher/Core (< 4.0, >= 2.1)
- FirebaseAuthInterop (10.14.0)
- FirebaseCore (10.12.0):
- FirebaseCoreInternal (~> 10.0)
- GoogleUtilities/Environment (~> 7.8)
- GoogleUtilities/Logger (~> 7.8)
- FirebaseCoreExtension (10.14.0):
- FirebaseCore (~> 10.0)
- FirebaseCoreInternal (10.14.0):
- "GoogleUtilities/NSData+zlib (~> 7.8)"
- FirebaseFirestore (10.12.0):
- abseil/algorithm (~> 1.20220623.0)
- abseil/base (~> 1.20220623.0)
- abseil/container/flat_hash_map (~> 1.20220623.0)
- abseil/memory (~> 1.20220623.0)
- abseil/meta (~> 1.20220623.0)
- abseil/strings/strings (~> 1.20220623.0)
- abseil/time (~> 1.20220623.0)
- abseil/types (~> 1.20220623.0)
- FirebaseCore (~> 10.0)
- "gRPC-C++ (~> 1.50.1)"
- leveldb-library (~> 1.22)
- nanopb (< 2.30910.0, >= 2.30908.0)
- FirebaseInstallations (10.14.0):
- FirebaseCore (~> 10.0)
- GoogleUtilities/Environment (~> 7.8)
- GoogleUtilities/UserDefaults (~> 7.8)
- PromisesObjC (~> 2.1)
- FirebaseMessaging (10.12.0):
- FirebaseCore (~> 10.0)
- FirebaseInstallations (~> 10.0)
- GoogleDataTransport (~> 9.2)
- GoogleUtilities/AppDelegateSwizzler (~> 7.8)
- GoogleUtilities/Environment (~> 7.8)
- GoogleUtilities/Reachability (~> 7.8)
- GoogleUtilities/UserDefaults (~> 7.8)
- nanopb (< 2.30910.0, >= 2.30908.0)
- FirebaseStorage (10.12.0):
- FirebaseAppCheckInterop (~> 10.0)
- FirebaseAuthInterop (~> 10.0)
- FirebaseCore (~> 10.0)
- FirebaseCoreExtension (~> 10.0)
- GTMSessionFetcher/Core (< 4.0, >= 2.1)
- Flutter (1.0.0)
- flutter_keyboard_visibility (0.0.1):
- Flutter
- FMDB (2.7.5):
- FMDB/standard (= 2.7.5)
- FMDB/standard (2.7.5)
- geolocator_apple (1.2.0):
- Flutter
- google_sign_in_ios (0.0.1):
- Flutter
- GoogleSignIn (~> 6.2)
- GoogleDataTransport (9.2.5):
- GoogleUtilities/Environment (~> 7.7)
- nanopb (< 2.30910.0, >= 2.30908.0)
- PromisesObjC (< 3.0, >= 1.2)
- GoogleSignIn (6.2.4):
- AppAuth (~> 1.5)
- GTMAppAuth (~> 1.3)
- GTMSessionFetcher/Core (< 3.0, >= 1.1)
- GoogleUtilities/AppDelegateSwizzler (7.11.5):
- GoogleUtilities/Environment
- GoogleUtilities/Logger
- GoogleUtilities/Network
- GoogleUtilities/Environment (7.11.5):
- PromisesObjC (< 3.0, >= 1.2)
- GoogleUtilities/Logger (7.11.5):
- GoogleUtilities/Environment
- GoogleUtilities/Network (7.11.5):
- GoogleUtilities/Logger
- "GoogleUtilities/NSData+zlib"
- GoogleUtilities/Reachability
- "GoogleUtilities/NSData+zlib (7.11.5)"
- GoogleUtilities/Reachability (7.11.5):
- GoogleUtilities/Logger
- GoogleUtilities/UserDefaults (7.11.5):
- GoogleUtilities/Logger
- "gRPC-C++ (1.50.1)":
- "gRPC-C++/Implementation (= 1.50.1)"
- "gRPC-C++/Interface (= 1.50.1)"
- "gRPC-C++/Implementation (1.50.1)":
- abseil/base/base (= 1.20220623.0)
- abseil/base/core_headers (= 1.20220623.0)
- abseil/cleanup/cleanup (= 1.20220623.0)
- abseil/container/flat_hash_map (= 1.20220623.0)
- abseil/container/flat_hash_set (= 1.20220623.0)
- abseil/container/inlined_vector (= 1.20220623.0)
- abseil/functional/any_invocable (= 1.20220623.0)
- abseil/functional/bind_front (= 1.20220623.0)
- abseil/functional/function_ref (= 1.20220623.0)
- abseil/hash/hash (= 1.20220623.0)
- abseil/memory/memory (= 1.20220623.0)
- abseil/meta/type_traits (= 1.20220623.0)
- abseil/random/random (= 1.20220623.0)
- abseil/status/status (= 1.20220623.0)
- abseil/status/statusor (= 1.20220623.0)
- abseil/strings/cord (= 1.20220623.0)
- abseil/strings/str_format (= 1.20220623.0)
- abseil/strings/strings (= 1.20220623.0)
- abseil/synchronization/synchronization (= 1.20220623.0)
- abseil/time/time (= 1.20220623.0)
- abseil/types/optional (= 1.20220623.0)
- abseil/types/span (= 1.20220623.0)
- abseil/types/variant (= 1.20220623.0)
- abseil/utility/utility (= 1.20220623.0)
- "gRPC-C++/Interface (= 1.50.1)"
- gRPC-Core (= 1.50.1)
- "gRPC-C++/Interface (1.50.1)"
- gRPC-Core (1.50.1):
- gRPC-Core/Implementation (= 1.50.1)
- gRPC-Core/Interface (= 1.50.1)
- gRPC-Core/Implementation (1.50.1):
- abseil/base/base (= 1.20220623.0)
- abseil/base/core_headers (= 1.20220623.0)
- abseil/container/flat_hash_map (= 1.20220623.0)
- abseil/container/flat_hash_set (= 1.20220623.0)
- abseil/container/inlined_vector (= 1.20220623.0)
- abseil/functional/any_invocable (= 1.20220623.0)
- abseil/functional/bind_front (= 1.20220623.0)
- abseil/functional/function_ref (= 1.20220623.0)
- abseil/hash/hash (= 1.20220623.0)
- abseil/memory/memory (= 1.20220623.0)
- abseil/meta/type_traits (= 1.20220623.0)
- abseil/random/random (= 1.20220623.0)
- abseil/status/status (= 1.20220623.0)
- abseil/status/statusor (= 1.20220623.0)
- abseil/strings/cord (= 1.20220623.0)
- abseil/strings/str_format (= 1.20220623.0)
- abseil/strings/strings (= 1.20220623.0)
- abseil/synchronization/synchronization (= 1.20220623.0)
- abseil/time/time (= 1.20220623.0)
- abseil/types/optional (= 1.20220623.0)
- abseil/types/span (= 1.20220623.0)
- abseil/types/variant (= 1.20220623.0)
- abseil/utility/utility (= 1.20220623.0)
- BoringSSL-GRPC (= 0.0.24)
- gRPC-Core/Interface (= 1.50.1)
- gRPC-Core/Interface (1.50.1)
- GTMAppAuth (1.3.1):
- AppAuth/Core (~> 1.6)
- GTMSessionFetcher/Core (< 3.0, >= 1.5)
- GTMSessionFetcher/Core (2.3.0)
- image_picker_ios (0.0.1):
- Flutter
- leveldb-library (1.22.2)
- nanopb (2.30909.0):
- nanopb/decode (= 2.30909.0)
- nanopb/encode (= 2.30909.0)
- nanopb/decode (2.30909.0)
- nanopb/encode (2.30909.0)
- path_provider_foundation (0.0.1):
- Flutter
- FlutterMacOS
- PromisesObjC (2.3.1)
- sqflite (0.0.3):
- Flutter
- FMDB (>= 2.7.5)
DEPENDENCIES:
- audioplayers_darwin (from `.symlinks/plugins/audioplayers_darwin/ios`)
- cloud_firestore (from `.symlinks/plugins/cloud_firestore/ios`)
- firebase_auth (from `.symlinks/plugins/firebase_auth/ios`)
- firebase_core (from `.symlinks/plugins/firebase_core/ios`)
- firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`)
- firebase_storage (from `.symlinks/plugins/firebase_storage/ios`)
- Flutter (from `Flutter`)
- flutter_keyboard_visibility (from `.symlinks/plugins/flutter_keyboard_visibility/ios`)
- geolocator_apple (from `.symlinks/plugins/geolocator_apple/ios`)
- google_sign_in_ios (from `.symlinks/plugins/google_sign_in_ios/ios`)
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
- sqflite (from `.symlinks/plugins/sqflite/ios`)
SPEC REPOS:
trunk:
- abseil
- AppAuth
- BoringSSL-GRPC
- Firebase
- FirebaseAppCheckInterop
- FirebaseAuth
- FirebaseAuthInterop
- FirebaseCore
- FirebaseCoreExtension
- FirebaseCoreInternal
- FirebaseFirestore
- FirebaseInstallations
- FirebaseMessaging
- FirebaseStorage
- FMDB
- GoogleDataTransport
- GoogleSignIn
- GoogleUtilities
- "gRPC-C++"
- gRPC-Core
- GTMAppAuth
- GTMSessionFetcher
- leveldb-library
- nanopb
- PromisesObjC
EXTERNAL SOURCES:
audioplayers_darwin:
:path: ".symlinks/plugins/audioplayers_darwin/ios"
cloud_firestore:
:path: ".symlinks/plugins/cloud_firestore/ios"
firebase_auth:
:path: ".symlinks/plugins/firebase_auth/ios"
firebase_core:
:path: ".symlinks/plugins/firebase_core/ios"
firebase_messaging:
:path: ".symlinks/plugins/firebase_messaging/ios"
firebase_storage:
:path: ".symlinks/plugins/firebase_storage/ios"
Flutter:
:path: Flutter
flutter_keyboard_visibility:
:path: ".symlinks/plugins/flutter_keyboard_visibility/ios"
geolocator_apple:
:path: ".symlinks/plugins/geolocator_apple/ios"
google_sign_in_ios:
:path: ".symlinks/plugins/google_sign_in_ios/ios"
image_picker_ios:
:path: ".symlinks/plugins/image_picker_ios/ios"
path_provider_foundation:
:path: ".symlinks/plugins/path_provider_foundation/darwin"
sqflite:
:path: ".symlinks/plugins/sqflite/ios"
SPEC CHECKSUMS:
abseil: 926fb7a82dc6d2b8e1f2ed7f3a718bce691d1e46
AppAuth: 3bb1d1cd9340bd09f5ed189fb00b1cc28e1e8570
audioplayers_darwin: 877d9a4d06331c5c374595e46e16453ac7eafa40
BoringSSL-GRPC: 3175b25143e648463a56daeaaa499c6cb86dad33
cloud_firestore: 005e157ad342dbfb2e461cb111a9020aa71bfb22
Firebase: 07150e75d142fb9399f6777fa56a187b17f833a0
firebase_auth: 3f7820b22557dd4a1b024f4d86947d1a0ff8a10f
firebase_core: e477125798fc37cd4ab43ca6a8536bf7e0929c00
firebase_messaging: 334d68c3a36b6d4d5cd91e4f42509e0d4ae49828
firebase_storage: d5c1b95383db1230d9fed88c76cb257d8d1ec1d6
FirebaseAppCheckInterop: c87f1d5421c852413dd936b2b2340b21e62501a0
FirebaseAuth: a66c1e14ec58f41d154a4b41ce1a23ea00ad4805
FirebaseAuthInterop: 23be77be1ca68e4bd15214f403f807a6ca70d7e0
FirebaseCore: f86a1394906b97ac445ae49c92552a9425831bed
FirebaseCoreExtension: 976638051b1a46b503afce7ec80277f9161f2040
FirebaseCoreInternal: d558159ee6cc4b823c2296ecc193de9f6d9a5bb3
FirebaseFirestore: f94c9541515fa4a49af52269bbc50349009424b4
FirebaseInstallations: f672b1eda64e6381c21d424a2f680a943fd83f3b
FirebaseMessaging: bb2c4f6422a753038fe137d90ae7c1af57251316
FirebaseStorage: 1d7ca8c8953fc61ccacaa7c612696b5402968a0d
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
flutter_keyboard_visibility: 0339d06371254c3eb25eeb90ba8d17dca8f9c069
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
geolocator_apple: cc556e6844d508c95df1e87e3ea6fa4e58c50401
google_sign_in_ios: 1256ff9d941db546373826966720b0c24804bcdd
GoogleDataTransport: 54dee9d48d14580407f8f5fbf2f496e92437a2f2
GoogleSignIn: 5651ce3a61e56ca864160e79b484cd9ed3f49b7a
GoogleUtilities: 13e2c67ede716b8741c7989e26893d151b2b2084
"gRPC-C++": 0968bace703459fd3e5dcb0b2bed4c573dbff046
gRPC-Core: 17108291d84332196d3c8466b48f016fc17d816d
GTMAppAuth: 0ff230db599948a9ad7470ca667337803b3fc4dd
GTMSessionFetcher: 3a63d75eecd6aa32c2fc79f578064e1214dfdec2
image_picker_ios: 4a8aadfbb6dc30ad5141a2ce3832af9214a705b5
leveldb-library: f03246171cce0484482ec291f88b6d563699ee06
nanopb: b552cce312b6c8484180ef47159bc0f65a1f0431
path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943
PromisesObjC: c50d2056b5253dadbd6c2bea79b0674bd5a52fa4
sqflite: 31f7eba61e3074736dff8807a9b41581e4f7f15a
PODFILE CHECKSUM: 6b9eb94e9f98a329f2ef624b852a6e42d090af2b
COCOAPODS: 1.14.3

@ -3,18 +3,32 @@
archiveVersion = 1;
classes = {
};
objectVersion = 50;
objectVersion = 54;
objects = {
/* Begin PBXBuildFile section */
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
7F7390F210456EB7AFF1CF93 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7930A860EC8743E6A941D8D /* Pods_RunnerTests.framework */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
C95EC3D52B114F7D00A316A2 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = C95EC3D42B114F7D00A316A2 /* GoogleService-Info.plist */; };
DE887488687930BD9A821E09 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 895D1BE06AED43E6E7367693 /* Pods_Runner.framework */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 97C146E61CF9000F007C117D /* Project object */;
proxyType = 1;
remoteGlobalIDString = 97C146ED1CF9000F007C117D;
remoteInfo = Runner;
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
9705A1C41CF9048500538489 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
@ -31,10 +45,18 @@
/* Begin PBXFileReference section */
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
160A1A0B7CBEFB8A0DF876C4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
1E7A433994B49CDF1BE8DE4C /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = "<group>"; };
2E9E3F1B12DC0CA59072CF15 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = "<group>"; };
331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; };
331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
5216BB03E33101AC0F022F4F /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
895D1BE06AED43E6E7367693 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
9652689A75201F19A551B879 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = "<group>"; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
@ -42,19 +64,39 @@
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
C7930A860EC8743E6A941D8D /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
C95EC3D42B114F7D00A316A2 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
F782B307897A4B77B59D0897 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
472D7C2F33BD994B5AD25717 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
7F7390F210456EB7AFF1CF93 /* Pods_RunnerTests.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
97C146EB1CF9000F007C117D /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
DE887488687930BD9A821E09 /* Pods_Runner.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
331C8082294A63A400263BE5 /* RunnerTests */ = {
isa = PBXGroup;
children = (
331C807B294A618700263BE5 /* RunnerTests.swift */,
);
path = RunnerTests;
sourceTree = "<group>";
};
9740EEB11CF90186004384FC /* Flutter */ = {
isa = PBXGroup;
children = (
@ -72,6 +114,9 @@
9740EEB11CF90186004384FC /* Flutter */,
97C146F01CF9000F007C117D /* Runner */,
97C146EF1CF9000F007C117D /* Products */,
331C8082294A63A400263BE5 /* RunnerTests */,
E285F60DA3ED5F857F86301D /* Pods */,
C51FB947EEACC99574A07057 /* Frameworks */,
);
sourceTree = "<group>";
};
@ -79,6 +124,7 @@
isa = PBXGroup;
children = (
97C146EE1CF9000F007C117D /* Runner.app */,
331C8081294A63A400263BE5 /* RunnerTests.xctest */,
);
name = Products;
sourceTree = "<group>";
@ -86,6 +132,7 @@
97C146F01CF9000F007C117D /* Runner */ = {
isa = PBXGroup;
children = (
C95EC3D42B114F7D00A316A2 /* GoogleService-Info.plist */,
97C146FA1CF9000F007C117D /* Main.storyboard */,
97C146FD1CF9000F007C117D /* Assets.xcassets */,
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
@ -98,19 +145,62 @@
path = Runner;
sourceTree = "<group>";
};
C51FB947EEACC99574A07057 /* Frameworks */ = {
isa = PBXGroup;
children = (
895D1BE06AED43E6E7367693 /* Pods_Runner.framework */,
C7930A860EC8743E6A941D8D /* Pods_RunnerTests.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
E285F60DA3ED5F857F86301D /* Pods */ = {
isa = PBXGroup;
children = (
5216BB03E33101AC0F022F4F /* Pods-Runner.debug.xcconfig */,
F782B307897A4B77B59D0897 /* Pods-Runner.release.xcconfig */,
160A1A0B7CBEFB8A0DF876C4 /* Pods-Runner.profile.xcconfig */,
9652689A75201F19A551B879 /* Pods-RunnerTests.debug.xcconfig */,
2E9E3F1B12DC0CA59072CF15 /* Pods-RunnerTests.release.xcconfig */,
1E7A433994B49CDF1BE8DE4C /* Pods-RunnerTests.profile.xcconfig */,
);
path = Pods;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
331C8080294A63A400263BE5 /* RunnerTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
buildPhases = (
18C5F3AB1125881E89D29F2B /* [CP] Check Pods Manifest.lock */,
331C807D294A63A400263BE5 /* Sources */,
331C807F294A63A400263BE5 /* Resources */,
472D7C2F33BD994B5AD25717 /* Frameworks */,
);
buildRules = (
);
dependencies = (
331C8086294A63A400263BE5 /* PBXTargetDependency */,
);
name = RunnerTests;
productName = RunnerTests;
productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
97C146ED1CF9000F007C117D /* Runner */ = {
isa = PBXNativeTarget;
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
44FFFF9947EC806B7CE88500 /* [CP] Check Pods Manifest.lock */,
9740EEB61CF901F6004384FC /* Run Script */,
97C146EA1CF9000F007C117D /* Sources */,
97C146EB1CF9000F007C117D /* Frameworks */,
97C146EC1CF9000F007C117D /* Resources */,
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
7EEED9B34346FEEF7394F416 /* [CP] Embed Pods Frameworks */,
);
buildRules = (
);
@ -127,9 +217,14 @@
97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 1300;
BuildIndependentTargetsInParallel = YES;
LastUpgradeCheck = 1430;
ORGANIZATIONNAME = "";
TargetAttributes = {
331C8080294A63A400263BE5 = {
CreatedOnToolsVersion = 14.0;
TestTargetID = 97C146ED1CF9000F007C117D;
};
97C146ED1CF9000F007C117D = {
CreatedOnToolsVersion = 7.3.1;
LastSwiftMigration = 1100;
@ -150,11 +245,19 @@
projectRoot = "";
targets = (
97C146ED1CF9000F007C117D /* Runner */,
331C8080294A63A400263BE5 /* RunnerTests */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
331C807F294A63A400263BE5 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
97C146EC1CF9000F007C117D /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
@ -163,18 +266,43 @@
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
C95EC3D52B114F7D00A316A2 /* GoogleService-Info.plist in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
18C5F3AB1125881E89D29F2B /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
);
name = "Thin Binary";
outputPaths = (
@ -183,8 +311,48 @@
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
};
44FFFF9947EC806B7CE88500 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
7EEED9B34346FEEF7394F416 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@ -200,6 +368,14 @@
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
331C807D294A63A400263BE5 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
97C146EA1CF9000F007C117D /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
@ -211,6 +387,14 @@
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
331C8086294A63A400263BE5 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 97C146ED1CF9000F007C117D /* Runner */;
targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
97C146FA1CF9000F007C117D /* Main.storyboard */ = {
isa = PBXVariantGroup;
@ -254,6 +438,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@ -264,6 +449,7 @@
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
@ -272,7 +458,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
@ -287,21 +473,77 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = 35KQ5BDC64;
ENABLE_BITCODE = NO;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
INFOPLIST_FILE = Runner/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 17.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.justmusic;
PRODUCT_BUNDLE_IDENTIFIER = com.justdev.justmusic;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Profile;
};
331C8088294A63A400263BE5 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 9652689A75201F19A551B879 /* Pods-RunnerTests.debug.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.justdev.justmusic.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
};
name = Debug;
};
331C8089294A63A400263BE5 /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 2E9E3F1B12DC0CA59072CF15 /* Pods-RunnerTests.release.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.justdev.justmusic.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
};
name = Release;
};
331C808A294A63A400263BE5 /* Profile */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 1E7A433994B49CDF1BE8DE4C /* Pods-RunnerTests.profile.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.justdev.justmusic.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
};
name = Profile;
};
97C147031CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@ -325,6 +567,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@ -335,6 +578,7 @@
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
@ -349,7 +593,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
@ -380,6 +624,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@ -390,6 +635,7 @@
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
@ -398,7 +644,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
@ -415,15 +661,21 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = 35KQ5BDC64;
ENABLE_BITCODE = NO;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
INFOPLIST_FILE = Runner/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 17.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.justmusic;
PRODUCT_BUNDLE_IDENTIFIER = com.justdev.justmusic;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
@ -437,15 +689,21 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = 35KQ5BDC64;
ENABLE_BITCODE = NO;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
INFOPLIST_FILE = Runner/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 17.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.justmusic;
PRODUCT_BUNDLE_IDENTIFIER = com.justdev.justmusic;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
@ -455,6 +713,16 @@
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
331C8088294A63A400263BE5 /* Debug */,
331C8089294A63A400263BE5 /* Release */,
331C808A294A63A400263BE5 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1300"
LastUpgradeVersion = "1430"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
@ -37,6 +37,17 @@
</BuildableReference>
</MacroExpansion>
<Testables>
<TestableReference
skipped = "NO"
parallelizable = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "331C8080294A63A400263BE5"
BuildableName = "RunnerTests.xctest"
BlueprintName = "RunnerTests"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
</TestAction>
<LaunchAction

@ -4,4 +4,7 @@
<FileRef
location = "group:Runner.xcodeproj">
</FileRef>
<FileRef
location = "group:Pods/Pods.xcodeproj">
</FileRef>
</Workspace>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 564 B

After

Width:  |  Height:  |  Size: 421 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 729 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 8.6 KiB

@ -1,34 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CLIENT_ID</key>
<string>994903990520-n6jd98ena56kb1tvtrd67tvb5et3nfbf.apps.googleusercontent.com</string>
<key>REVERSED_CLIENT_ID</key>
<string>com.googleusercontent.apps.994903990520-n6jd98ena56kb1tvtrd67tvb5et3nfbf</string>
<key>API_KEY</key>
<string>AIzaSyBbYqsR6t7JTi8_XFNEHd43IRuKlYGeI3U</string>
<key>GCM_SENDER_ID</key>
<string>994903990520</string>
<key>PLIST_VERSION</key>
<string>1</string>
<key>BUNDLE_ID</key>
<string>com.example.justmusic</string>
<key>PROJECT_ID</key>
<string>justmusic-435d5</string>
<key>STORAGE_BUCKET</key>
<string>justmusic-435d5.appspot.com</string>
<key>IS_ADS_ENABLED</key>
<false></false>
<key>IS_ANALYTICS_ENABLED</key>
<false></false>
<key>IS_APPINVITE_ENABLED</key>
<true></true>
<key>IS_GCM_ENABLED</key>
<true></true>
<key>IS_SIGNIN_ENABLED</key>
<true></true>
<key>GOOGLE_APP_ID</key>
<string>1:994903990520:ios:93188f32e320babe0a9b0d</string>
</dict>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CLIENT_ID</key>
<string>994903990520-n6jd98ena56kb1tvtrd67tvb5et3nfbf.apps.googleusercontent.com</string>
<key>REVERSED_CLIENT_ID</key>
<string>com.googleusercontent.apps.994903990520-n6jd98ena56kb1tvtrd67tvb5et3nfbf</string>
<key>ANDROID_CLIENT_ID</key>
<string>994903990520-073l30b0afj0uq7apsvc8p8ukantpu6q.apps.googleusercontent.com</string>
<key>API_KEY</key>
<string>AIzaSyBbYqsR6t7JTi8_XFNEHd43IRuKlYGeI3U</string>
<key>GCM_SENDER_ID</key>
<string>994903990520</string>
<key>PLIST_VERSION</key>
<string>1</string>
<key>BUNDLE_ID</key>
<string>com.example.justmusic</string>
<key>PROJECT_ID</key>
<string>justmusic-435d5</string>
<key>STORAGE_BUCKET</key>
<string>justmusic-435d5.appspot.com</string>
<key>IS_ADS_ENABLED</key>
<false></false>
<key>IS_ANALYTICS_ENABLED</key>
<false></false>
<key>IS_APPINVITE_ENABLED</key>
<true></true>
<key>IS_GCM_ENABLED</key>
<true></true>
<key>IS_SIGNIN_ENABLED</key>
<true></true>
<key>GOOGLE_APP_ID</key>
<string>1:994903990520:ios:93188f32e320babe0a9b0d</string>
</dict>
</plist>

@ -2,6 +2,8 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CADisableMinimumFrameDurationOnPhone</key>
<true/>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
@ -20,10 +22,31 @@
<string>$(FLUTTER_BUILD_NAME)</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>com.googleusercontent.apps.994903990520-n6jd98ena56kb1tvtrd67tvb5et3nfbf</string>
</array>
</dict>
</array>
<key>CFBundleVersion</key>
<string>$(FLUTTER_BUILD_NUMBER)</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSCameraUsageDescription</key>
<string>To capture profile photo please grant camera access</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>Votre message d'autorisation pour une utilisation continue de la localisation</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Votre message d'autorisation lorsque l'application est en cours d'utilisation</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>App needs access to photo lib for profile images</string>
<key>UIApplicationSupportsIndirectInputEvents</key>
<true/>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
@ -41,11 +64,5 @@
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>CADisableMinimumFrameDurationOnPhone</key>
<true/>
<key>UIApplicationSupportsIndirectInputEvents</key>
<true/>
</dict>
</plist>

@ -0,0 +1,12 @@
import Flutter
import UIKit
import XCTest
class RunnerTests: XCTestCase {
func testExample() {
// If you add code to the Runner application, consider adding tests here.
// See https://developer.apple.com/documentation/xctest for more information about using XCTest.
}
}

@ -1,7 +0,0 @@
{
"file_generated_by": "FlutterFire CLI",
"purpose": "FirebaseAppID & ProjectID for this Firebase app in this directory",
"GOOGLE_APP_ID": "1:994903990520:ios:93188f32e320babe0a9b0d",
"FIREBASE_PROJECT_ID": "justmusic-435d5",
"GCM_SENDER_ID": "994903990520"
}

@ -1,4 +1,4 @@
import 'package:flutter/Material.dart';
import 'package:flutter/material.dart';
import '../values/constants.dart';

@ -1,4 +1,4 @@
import 'package:flutter/Material.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:ionicons/ionicons.dart';
import 'package:tuple/tuple.dart';

@ -0,0 +1,50 @@
import 'package:flutter/material.dart';
import '../main.dart';
import '../model/Music.dart';
class ButtonPlayComponent extends StatefulWidget {
final Music music;
const ButtonPlayComponent({super.key, required this.music});
@override
State<ButtonPlayComponent> createState() => _ButtonPlayComponentState();
}
class _ButtonPlayComponentState extends State<ButtonPlayComponent> {
bool isPlaying = false;
@override
void initState() {
MyApp.audioPlayer.onPlayerComplete.listen((event) {
setState(() {
isPlaying = false;
});
});
super.initState();
}
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
if (isPlaying) {
widget.music.stopSong();
setState(() {
isPlaying = !isPlaying;
});
} else {
widget.music.playSong();
setState(() {
isPlaying = !isPlaying;
});
}
},
child: Icon(
isPlaying ? Icons.pause_circle : Icons.play_circle,
color: Colors.white,
size: 45,
),
);
}
}

@ -1,4 +1,4 @@
import 'package:flutter/Material.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:justmusic/values/constants.dart';
import 'package:tuple/tuple.dart';

@ -2,63 +2,90 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:justmusic/model/Comment.dart';
import '../values/constants.dart';
class CommentComponent extends StatelessWidget {
const CommentComponent({Key? key}) : super(key: key);
final Comment comment;
const CommentComponent({Key? key, required this.comment}) : super(key: key);
String calculateTimeDifference(DateTime startDate) {
Duration difference = DateTime.now().difference(startDate);
if (difference.inDays > 0) {
return '${difference.inDays} jours';
} else if (difference.inHours > 0) {
return '${difference.inHours} heures';
} else if (difference.inMinutes > 0) {
return '${difference.inMinutes} minutes';
} else {
return '${difference.inSeconds} secondes';
}
}
@override
Widget build(BuildContext context) {
return Container(
width: double.infinity,
decoration: BoxDecoration(
color: bgComment, borderRadius: BorderRadius.circular(10)),
padding: EdgeInsets.all(20),
child: Column(
decoration: BoxDecoration(color: bgComment.withOpacity(0.6), borderRadius: BorderRadius.circular(15)),
padding: EdgeInsets.fromLTRB(20, 10, 20, 10),
margin: EdgeInsets.only(bottom: 13),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
ClipOval(
child: SizedBox.fromSize(
// Image radius
child: Image(
image: AssetImage("assets/images/exemple_profile.png"),
width: 40,
),
),
),
SizedBox(
width: 10,
),
Text(
"Melina",
style: GoogleFonts.plusJakartaSans(
color: Colors.white, fontWeight: FontWeight.w600),
ClipOval(
child: SizedBox(
height: 40,
width: 40,
// Image radius
child: FadeInImage.assetNetwork(
image: comment.user.pp,
fit: BoxFit.cover,
fadeInDuration: const Duration(milliseconds: 100),
placeholder: "assets/images/loadingPlaceholder.gif",
),
Padding(
padding: EdgeInsets.only(top: 6, left: 10),
child: Text(
"Il y a 2 min(s)",
style: GoogleFonts.plusJakartaSans(
color: Colors.white.withOpacity(0.6),
fontWeight: FontWeight.w200,
fontSize: 10),
),
),
],
),
SizedBox(
height: 10,
),
Text(
"Jadore ce son auss je trouve quil a vraiment une plume de fou le rap cest trop bien jknei rhozi ugzeor gzhjkev huz vhzbejlh zouebvfiyzv fi hzejkfb zjf ouzebfjzebihf b zuib fiuzebfihzbejfbzejkbf hzbfiébiu zegiu fzieu iuzy giuzeg iuzg eiu zg ",
style: GoogleFonts.plusJakartaSans(
color: Colors.white.withOpacity(0.4),
fontWeight: FontWeight.w300,
fontSize: 13),
),
),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.start,
children: [
SizedBox(
width: 10,
),
Text(
comment.user.pseudo,
style: GoogleFonts.plusJakartaSans(color: Colors.white, fontWeight: FontWeight.w600),
),
Padding(
padding: EdgeInsets.only(top: 6, left: 10),
child: Text(
"il y a ${calculateTimeDifference(comment.date)}",
style: GoogleFonts.plusJakartaSans(
color: Colors.white.withOpacity(0.6), fontWeight: FontWeight.w400, fontSize: 10),
),
),
],
),
SizedBox(
height: 4,
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 10),
child: Text(
comment.text,
style: GoogleFonts.plusJakartaSans(color: Colors.white, fontWeight: FontWeight.w400, fontSize: 15),
),
),
],
),
)
],
),
);

@ -1,9 +1,9 @@
import 'dart:io';
import 'package:animated_appear/animated_appear.dart';
import 'package:auto_size_text/auto_size_text.dart';
import 'package:circular_reveal_animation/circular_reveal_animation.dart';
import 'package:flutter/Material.dart';
import 'package:firebase_storage/firebase_storage.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
@ -35,8 +35,7 @@ class EditablePostComponent extends StatefulWidget {
State<EditablePostComponent> createState() => _EditablePostComponentState();
}
class _EditablePostComponentState extends State<EditablePostComponent>
with TickerProviderStateMixin {
class _EditablePostComponentState extends State<EditablePostComponent> with TickerProviderStateMixin {
final ImagePicker picker = ImagePicker();
late Animation<double> animation;
late AnimationController animationController;
@ -63,17 +62,19 @@ class _EditablePostComponentState extends State<EditablePostComponent>
}
Future pickImage(ImageSource source) async {
try {
final image = await ImagePicker().pickImage(source: source);
if (image == null) return;
final imageTemp = File(image.path);
setState(() {
this.image = imageTemp;
widget.callBackImage(imageTemp);
});
} on PlatformException catch (e) {
print('Failed to pick image: $e');
}
try {
final image = await ImagePicker().pickImage(source: source, imageQuality: 20);
if (image == null) return;
final imageTemp = File(image.path);
setState(() {
this.image = imageTemp;
widget.callBackImage(imageTemp);
});
} on PlatformException catch (e) {
print('Failed to pick image: $e');
}
}
void _updateDescription(String text) {
@ -102,12 +103,10 @@ class _EditablePostComponentState extends State<EditablePostComponent>
isScrollControlled: true,
context: context,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(20), topRight: Radius.circular(20))),
borderRadius: BorderRadius.only(topLeft: Radius.circular(20), topRight: Radius.circular(20))),
builder: ((context) {
return ClipRRect(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(20), topRight: Radius.circular(20)),
borderRadius: BorderRadius.only(topLeft: Radius.circular(20), topRight: Radius.circular(20)),
child: SearchCityScreen(callback: _selectLocation));
}),
);
@ -130,73 +129,76 @@ class _EditablePostComponentState extends State<EditablePostComponent>
color: warningBttnColor,
child: Column(
children: [
CircularRevealAnimation(
animation: animation,
centerOffset: Offset(30.w, -100),
child: Stack(
children: [
AspectRatio(
aspectRatio: 1 / 1,
child: Container(
decoration: BoxDecoration(
// add border
border: Border.all(width: 3.0, color: grayColor),
// set border radius
borderRadius: BorderRadius.circular(20),
),
child: ClipRRect(
borderRadius: BorderRadius.circular(18),
// implement image
child: widget.music == null
? Container(
color: grayColor,
width: double.infinity,
)
: Image(
image:
NetworkImage(widget.music?.cover ?? ""),
fit: BoxFit.cover,
width: double.infinity,
Stack(
children: [
AspectRatio(
aspectRatio: 1 / 1,
child: Container(
decoration: BoxDecoration(
// add border
border: Border.all(width: 3.0, color: grayColor),
// set border radius
borderRadius: BorderRadius.circular(20),
),
child: ClipRRect(
borderRadius: BorderRadius.circular(18),
// implement image
child: widget.music == null
? Container(
width: double.infinity,
child: Center(
child: Icon(
Icons.headphones,
color: grayColor.withOpacity(0.4),
size: 150,
),
),
),
),
)
: FadeInImage.assetNetwork(
image: widget.music!.cover!,
fit: BoxFit.cover,
fadeInDuration: const Duration(milliseconds: 100),
placeholder: "assets/images/loadingPlaceholder.gif",
),
),
image != null
? Positioned(
top: 10,
right: 10,
child: AnimatedAppear(
delay: Duration(milliseconds: 500),
duration: Duration(milliseconds: 400),
child: Container(
width: 110,
height: 110,
decoration: BoxDecoration(
image: DecorationImage(
image: FileImage(image!),
fit: BoxFit.cover,
),
color: grayColor,
borderRadius: BorderRadius.circular(20),
border: Border.all(
style: BorderStyle.solid,
color: Colors.white,
width: 4)),
child: ClipRRect(
borderRadius: BorderRadius.circular(20),
child: InstaImageViewer(
),
),
image != null
? Positioned(
top: 10,
right: 10,
child: AnimatedAppear(
delay: Duration(milliseconds: 500),
duration: Duration(milliseconds: 400),
child: Container(
width: 110,
height: 110,
decoration: BoxDecoration(
image: DecorationImage(
image: FileImage(image!),
fit: BoxFit.cover,
),
color: grayColor,
borderRadius: BorderRadius.circular(20),
border: Border.all(style: BorderStyle.solid, color: Colors.white, width: 4)),
child: ClipRRect(
borderRadius: BorderRadius.circular(20),
child: InstaImageViewer(
backgroundIsTransparent: true,
child: kIsWeb?InstaImageViewer(
backgroundIsTransparent: true,
child: Image(
image: FileImage(image!),
fit: BoxFit.cover,
),
),
child: Image.network(image!.path)
):Image(
image: FileImage(image!),
fit: BoxFit.cover,
),
),
))
: Container()
],
)),
),
),
))
: Container()
],
),
widget.music != null
? Padding(
padding: const EdgeInsets.all(10),
@ -209,18 +211,13 @@ class _EditablePostComponentState extends State<EditablePostComponent>
child: TextScroll(
(widget.music?.title)!,
style: GoogleFonts.plusJakartaSans(
height: 1,
color: Colors.white,
fontWeight: FontWeight.w600,
fontSize: 26.h),
height: 1, color: Colors.white, fontWeight: FontWeight.w600, fontSize: 26.h),
mode: TextScrollMode.endless,
pauseBetween: Duration(milliseconds: 500),
velocity:
Velocity(pixelsPerSecond: Offset(20, 0)),
velocity: Velocity(pixelsPerSecond: Offset(20, 0)),
)),
Padding(
padding: EdgeInsets.only(
bottom: 10.h, right: 5.w, left: 5.w),
padding: EdgeInsets.only(bottom: 10.h, right: 5.w, left: 5.w),
child: ClipOval(
child: Container(
width: 5.h,
@ -236,23 +233,17 @@ class _EditablePostComponentState extends State<EditablePostComponent>
child: TextScroll(
(widget.music?.artists[0].name)!,
style: GoogleFonts.plusJakartaSans(
height: 1,
color: Colors.white,
fontWeight: FontWeight.w300,
fontSize: 16.h),
height: 1, color: Colors.white, fontWeight: FontWeight.w300, fontSize: 16.h),
mode: TextScrollMode.endless,
velocity:
Velocity(pixelsPerSecond: Offset(50, 20)),
velocity: Velocity(pixelsPerSecond: Offset(50, 20)),
pauseBetween: Duration(milliseconds: 500),
),
)),
Container(width: 10),
AutoSizeText(
"2013",
widget.music?.date.toString() ?? "unknown",
style: GoogleFonts.plusJakartaSans(
color: Colors.white.withOpacity(0.5),
fontWeight: FontWeight.w300,
fontSize: 16.h),
color: Colors.white.withOpacity(0.5), fontWeight: FontWeight.w300, fontSize: 16.h),
textAlign: TextAlign.end,
maxFontSize: 20,
),
@ -265,8 +256,8 @@ class _EditablePostComponentState extends State<EditablePostComponent>
width: double.infinity,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
children: [ kIsWeb?Container()
:Expanded(
flex: 5,
child: GestureDetector(
onTap: () {
@ -277,7 +268,7 @@ class _EditablePostComponentState extends State<EditablePostComponent>
),
),
),
SizedBox(
kIsWeb?Container():SizedBox(
width: 15,
),
Expanded(
@ -300,41 +291,32 @@ class _EditablePostComponentState extends State<EditablePostComponent>
child: SizedBox(
width: double.infinity,
child: TextFormField(
keyboardType: TextInputType.text,
onChanged: (value) {
_updateDescription(value);
},
keyboardAppearance: Brightness.dark,
minLines: 1,
cursorColor: primaryColor,
style: GoogleFonts.plusJakartaSans(
color: Colors.white,
fontSize: 13,
fontWeight: FontWeight.w300),
style:
GoogleFonts.plusJakartaSans(color: Colors.white, fontSize: 13, fontWeight: FontWeight.w300),
maxLines: 4,
maxLength: 120,
decoration: InputDecoration(
counterStyle: GoogleFonts.plusJakartaSans(
color: grayText, fontSize: 9),
counterStyle: GoogleFonts.plusJakartaSans(color: grayText, fontSize: 9),
focusedBorder: const OutlineInputBorder(
borderSide:
BorderSide(width: 0, color: Colors.transparent),
borderRadius:
BorderRadius.all(Radius.circular(10))),
contentPadding:
const EdgeInsets.only(top: 0, bottom: 0, left: 0),
borderSide: BorderSide(width: 0, color: Colors.transparent),
borderRadius: BorderRadius.all(Radius.circular(10))),
contentPadding: const EdgeInsets.only(top: 0, bottom: 0, left: 0),
fillColor: Colors.transparent,
filled: true,
focusColor: Colors.transparent,
enabledBorder: const OutlineInputBorder(
borderSide:
BorderSide(width: 0, color: Colors.transparent),
borderRadius:
BorderRadius.all(Radius.circular(10))),
borderSide: BorderSide(width: 0, color: Colors.transparent),
borderRadius: BorderRadius.all(Radius.circular(10))),
hintText: 'Description...',
hintStyle: GoogleFonts.plusJakartaSans(
color: grayText,
fontSize: 13,
fontWeight: FontWeight.w300),
hintStyle:
GoogleFonts.plusJakartaSans(color: grayText, fontSize: 13, fontWeight: FontWeight.w300),
),
),
)),

@ -0,0 +1,105 @@
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:justmusic/main.dart';
import 'package:justmusic/values/constants.dart';
import 'package:tuple/tuple.dart';
import '../model/Music.dart';
class HistoricComponent extends StatefulWidget {
final int month;
final int year;
const HistoricComponent({super.key, required this.month, required this.year});
@override
State<HistoricComponent> createState() => _HistoricComponentState();
}
class _HistoricComponentState extends State<HistoricComponent> {
int getNumberOfDaysInMonth(int year, int month) {
if (month < 1 || month > 12) {
throw ArgumentError("Le numéro de mois doit être compris entre 1 et 12.");
}
return DateTime(year, month + 1, 0).day;
}
getHistoric() {}
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: MyApp.musicViewModel
.getHistoryCapsulesMonthWhitIdUser(MyApp.userViewModel.userCurrent.id, widget.month, widget.year),
builder: (context, snapshot) {
if (snapshot.hasData) {
return Container(
constraints: const BoxConstraints( maxWidth: 600),
child: Wrap(
spacing: 14,
runSpacing: 14,
children: List.generate(getNumberOfDaysInMonth(widget.year, widget.month), (index) {
Tuple2<int, Music>? checkCapsule;
if (snapshot.data != null) {
for (var element in snapshot.data!) {
if (element.item1 == index + 1) {
checkCapsule = element;
}
}
}
if ((widget.year > DateTime.now().year || widget.month > DateTime.now().month) ||
(widget.year == DateTime.now().year &&
widget.month == DateTime.now().month &&
index > DateTime.now().day)) {
return Container(
decoration: BoxDecoration(
gradient: LinearGradient(colors: [
Color(0xFF1E1E1E).withOpacity(0.7),
Color(0xFF1E1E1E).withOpacity(0),
], begin: Alignment.topCenter, end: Alignment.bottomCenter),
borderRadius: BorderRadius.circular(5)),
height: 60,
width: 60,
);
}
if (checkCapsule != null) {
return Tooltip(
message: "${checkCapsule.item2.artists.first.name} - ${checkCapsule.item2.title}".length < 30? "${checkCapsule.item2.artists.first.name} - ${checkCapsule.item2.title}": "${checkCapsule.item2.artists.first.name} - ${checkCapsule.item2.title}".substring(0,30)+"...",
decoration: const BoxDecoration(
border: Border.fromBorderSide(BorderSide(color: Color(0xFF3A3A3A), width: 1)),
color: tooltipBackground, borderRadius: BorderRadius.all(Radius.circular(20))
),
child: Container(
decoration: BoxDecoration(
image: DecorationImage(image: NetworkImage((checkCapsule.item2.cover)!)),
borderRadius: BorderRadius.circular(5)),
height: 60,
width: 60,
));
} else {
return Container(
color: bgColor,
height: 60,
width: 60,
child: Center(
child: Text(
(index + 1).toString(),
style:
GoogleFonts.plusJakartaSans(color: Colors.white, fontSize: 22, fontWeight: FontWeight.w800),
),
),
);
}
// Generate widgets
}),
),
);
} else {
return CupertinoActivityIndicator();
}
});
}
}

@ -0,0 +1,52 @@
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import '../values/constants.dart';
class LittleCapsule extends StatelessWidget {
final bool isEmpty;
final DateTime date;
const LittleCapsule({super.key, required this.isEmpty, required this.date});
@override
Widget build(BuildContext context) {
if (isEmpty) {
return Flexible(
child: Container(
constraints: BoxConstraints(maxWidth: 45, maxHeight: 45),
decoration: BoxDecoration(
color: searchBarColor,
borderRadius: BorderRadius.circular(5),
border: Border.all(color: Color(0xFF282828), width: 1),
),
child: const Center(
child: Icon(
Icons.rocket_launch,
color: Color(0xFF464646),
size: 18,
),
),
),
);
}
return Flexible(
child: Container(
constraints: BoxConstraints(maxWidth: 45, maxHeight: 45),
decoration: BoxDecoration(
gradient: LinearGradient(
colors: [bgModal, bgModal.withOpacity(0)],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
stops: [0, 1]),
borderRadius: BorderRadius.circular(5),
),
child: Center(
child: Text(
date.day.toString(),
style: GoogleFonts.plusJakartaSans(color: Color(0xFF464646), fontWeight: FontWeight.w800, fontSize: 17),
),
),
),
);
}
}

@ -4,8 +4,9 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
class LoginButton extends StatefulWidget {
final Function callback;
final String text;
const LoginButton({Key? key, required this.callback}) : super(key: key);
const LoginButton({Key? key, required this.callback, required this.text}) : super(key: key);
@override
State<LoginButton> createState() => _LoginButtonState();
@ -57,7 +58,7 @@ class _LoginButtonState extends State<LoginButton> {
),
alignment: Alignment.center,
child: Text(
"Se connecter",
widget.text,
textAlign: TextAlign.center,
style: TextStyle(color: Colors.white, fontSize: 18),
),

@ -1,4 +1,4 @@
import 'package:flutter/Material.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:justmusic/components/play_button_component.dart';
import 'package:text_scroll/text_scroll.dart';
@ -9,7 +9,7 @@ class MusicListComponent extends StatelessWidget {
final bool playing;
final int index;
final Function(int) callback;
MusicListComponent({
const MusicListComponent({
Key? key,
required this.music,
required this.playing,
@ -23,18 +23,22 @@ class MusicListComponent extends StatelessWidget {
padding: const EdgeInsets.only(bottom: 14),
child: Row(
children: [
LayoutBuilder(
builder: (BuildContext context, BoxConstraints constraints) {
LayoutBuilder(builder: (BuildContext context, BoxConstraints constraints) {
if (music.cover != null) {
return ClipRRect(
borderRadius: BorderRadius.all(Radius.circular(5)),
child: music.cover != null
? FadeInImage.assetNetwork(
? SizedBox(
height: 60,
width: 60,
fit: BoxFit.cover,
placeholder: "assets/images/loadingPlaceholder.gif",
image: music.cover!)
// Image radius
child: FadeInImage.assetNetwork(
image: music.cover!,
fit: BoxFit.cover,
fadeInDuration: const Duration(milliseconds: 100),
placeholder: "assets/images/loadingPlaceholder.gif",
),
)
: Container(
height: 60,
width: 60,
@ -42,8 +46,8 @@ class MusicListComponent extends StatelessWidget {
),
);
} else {
return Image(
image: AssetImage("assets/images/exemple_cover.png"),
return const Image(
image: AssetImage("assets/images/loadingPlaceholder.gif"),
height: 60,
width: 60,
);
@ -63,14 +67,11 @@ class MusicListComponent extends StatelessWidget {
Flexible(
flex: 8,
child: ScrollConfiguration(
behavior:
ScrollBehavior().copyWith(scrollbars: false),
behavior: ScrollBehavior().copyWith(scrollbars: false),
child: TextScroll(
music.title ?? "Unknown",
style: GoogleFonts.plusJakartaSans(
fontSize: 16,
color: Colors.white,
fontWeight: FontWeight.w700),
fontSize: 16, color: Colors.white, fontWeight: FontWeight.w700),
mode: TextScrollMode.endless,
pauseBetween: Duration(milliseconds: 2500),
velocity: Velocity(pixelsPerSecond: Offset(30, 0)),
@ -91,8 +92,7 @@ class MusicListComponent extends StatelessWidget {
child: Text(
music.artists.first.name ?? "Unknown",
overflow: TextOverflow.ellipsis,
style: GoogleFonts.plusJakartaSans(
color: Colors.grey, fontWeight: FontWeight.w400),
style: GoogleFonts.plusJakartaSans(color: Colors.grey, fontWeight: FontWeight.w400),
))
],
),

@ -1,5 +1,4 @@
import 'package:audioplayers/audioplayers.dart';
import 'package:flutter/Material.dart';
import 'package:flutter/material.dart';
import 'package:flutter_animated_play_button/flutter_animated_play_button.dart';
import 'package:ionicons/ionicons.dart';
@ -12,11 +11,7 @@ class PlayButtonComponent extends StatefulWidget {
final int index;
final bool playing;
const PlayButtonComponent(
{Key? key,
required this.music,
required this.callback,
required this.playing,
required this.index})
{Key? key, required this.music, required this.callback, required this.playing, required this.index})
: super(key: key);
@override
@ -24,8 +19,6 @@ class PlayButtonComponent extends StatefulWidget {
}
class _PlayButtonComponentState extends State<PlayButtonComponent> {
final player = AudioPlayer();
@override
void initState() {
MyApp.audioPlayer.onPlayerComplete.listen((event) {

@ -1,6 +1,6 @@
import 'dart:ui';
import 'package:flutter/Material.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
class PostButtonComponent extends StatefulWidget {
@ -81,81 +81,83 @@ class _PostButtonComponentState extends State<PostButtonComponent>
decoration: BoxDecoration(
color: Colors.transparent,
borderRadius: BorderRadius.circular(1000)),
child: Stack(
children: [
AnimatedBuilder(
animation: _controller,
builder: (context, child) {
return Transform.translate(
offset: Offset(
_controller.value *
(MediaQuery.of(context).size.width - 200),
0,
child: Align(
child: Stack(
children: [
AnimatedBuilder(
animation: _controller,
builder: (context, child) {
return Transform.translate(
offset: Offset(
20 + _controller.value * (240),
0,
),
child: child,
);
},
child: Container(
width: 120,
height: 80,
alignment: Alignment.center,
decoration: BoxDecoration(
gradient: LinearGradient(colors: [
Color(0xFF9E78FF).withOpacity(0.0),
Color(0xFFFDFDFF),
Color(0xFFFFFFFF),
Color(0xFF9E78FF).withOpacity(0.0)
], stops: const [
0,
0.4,
0.5,
1
]),
),
child: child,
);
},
child: Container(
width: 120,
height: 80,
alignment: Alignment.center,
decoration: BoxDecoration(
gradient: LinearGradient(colors: [
Color(0xFF9E78FF).withOpacity(0.0),
Color(0xFFFDFDFF),
Color(0xFFFFFFFF),
Color(0xFF9E78FF).withOpacity(0.0)
], stops: const [
0,
0.4,
0.5,
1
]),
),
),
),
BackdropFilter(
filter: ImageFilter.blur(
sigmaX: 10.0,
sigmaY: 10.0,
),
child: Opacity(
opacity: 0.9,
child: Container(
constraints: BoxConstraints(maxWidth: 400),
decoration: BoxDecoration(
gradient: LinearGradient(colors: [
Color(0xFF633AF4),
Color(0xFF9367FF),
Color(0xFF633AF4)
]),
border: Border.all(width: 5, color: Color(0xFF1C1C1C)),
borderRadius: BorderRadius.circular(10000)),
padding: EdgeInsets.symmetric(vertical: 25),
width: double.infinity,
child: Padding(
padding: EdgeInsets.only(left: 100),
child: Text(
"Publier la capsule",
style: GoogleFonts.plusJakartaSans(
color: Colors.white,
fontWeight: FontWeight.w700,
fontStyle: FontStyle.italic,
fontSize: 22),
BackdropFilter(
filter: ImageFilter.blur(
sigmaX: 10.0,
sigmaY: 10.0,
),
child: Opacity(
opacity: 0.9,
child: Container(
constraints: BoxConstraints(maxWidth: 400),
decoration: BoxDecoration(
gradient: LinearGradient(colors: [
Color(0xFF633AF4),
Color(0xFF9367FF),
Color(0xFF633AF4)
]),
border:
Border.all(width: 5, color: Color(0xFF1C1C1C)),
borderRadius: BorderRadius.circular(10000)),
padding: EdgeInsets.symmetric(vertical: 25),
width: double.infinity,
child: Padding(
padding: EdgeInsets.only(left: 100),
child: Text(
"Publier la capsule",
style: GoogleFonts.plusJakartaSans(
color: Colors.white,
fontWeight: FontWeight.w700,
fontStyle: FontStyle.italic,
fontSize: 22),
),
),
),
)),
ClipOval(
child: Padding(
padding: const EdgeInsets.only(left: 5, top: 5),
child: Image(
image: AssetImage("assets/images/rocket_button.png"),
height: 65,
),
)),
ClipOval(
child: Padding(
padding: const EdgeInsets.only(left: 5, top: 5),
child: Image(
image: AssetImage("assets/images/rocket_button.png"),
height: 65,
),
),
)
],
)
],
),
),
),
);

@ -1,430 +1,254 @@
import 'package:auto_size_text/auto_size_text.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:gradient_borders/box_borders/gradient_box_border.dart';
import 'package:text_scroll/text_scroll.dart';
import 'package:zoom_tap_animation/zoom_tap_animation.dart';
class PostComponent extends StatefulWidget {
final VoidCallback? callback;
PostComponent({Key? key, required this.callback}) : super(key: key);
@override
State<PostComponent> createState() => _PostComponentState();
}
class _PostComponentState extends State<PostComponent> {
bool choice = false;
void switchChoice() {
setState(() {
choice = !choice;
});
}
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: switchChoice,
child: LayoutBuilder(
builder: (BuildContext context, BoxConstraints constraints) {
if (choice && widget.callback == null) {
return SizedBox(
width: double.infinity,
child: Column(
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
ClipOval(
child: SizedBox.fromSize(
// Image radius
child: const Image(
image:
AssetImage("assets/images/exemple_profile.png"),
width: 40,
),
),
),
Expanded(
flex: 8,
child: Padding(
padding: const EdgeInsets.only(left: 10),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"Melina",
style: GoogleFonts.plusJakartaSans(
color: Colors.white,
fontWeight: FontWeight.w600),
),
Text(
"France, Lyon",
style: GoogleFonts.plusJakartaSans(
color: Colors.white.withOpacity(0.4),
fontWeight: FontWeight.w300,
fontSize: 13),
)
],
),
),
),
Text(
"Aujourdhui, 16:43",
style: GoogleFonts.plusJakartaSans(
color: Colors.white.withOpacity(0.4),
fontWeight: FontWeight.w300,
fontSize: 13),
),
],
),
SizedBox(height: 10),
ZoomTapAnimation(
onTap: widget.callback,
enableLongTapRepeatEvent: false,
longTapRepeatDuration: const Duration(milliseconds: 100),
begin: 1.0,
end: 0.99,
beginDuration: const Duration(milliseconds: 70),
endDuration: const Duration(milliseconds: 100),
beginCurve: Curves.decelerate,
endCurve: Curves.easeInOutSine,
child: AspectRatio(
aspectRatio: 1 / 1,
child: Container(
decoration: BoxDecoration(
// add border
border: const GradientBoxBorder(
gradient: LinearGradient(
colors: [
Colors.transparent,
Color(0xFF323232),
],
begin: Alignment.topCenter,
end: Alignment.bottomCenter),
width: 2.5,
),
// set border radius
borderRadius: BorderRadius.circular(20),
),
child: ClipRRect(
borderRadius: BorderRadius.circular(18),
// implement image
child: Stack(
alignment: Alignment.bottomCenter,
children: [
Image(
image: AssetImage(
"assets/images/exemple_profile.png"),
fit: BoxFit.cover,
width: double.infinity,
),
Positioned(
top: 0,
right: 0,
child: Padding(
padding: EdgeInsets.all(12),
child: Container(
constraints: BoxConstraints(
maxWidth: 140, maxHeight: 140),
width: 80.sp,
height: 80.sp,
decoration: BoxDecoration(
color: Colors.white,
// add border
border: Border.all(
width: 3, color: Colors.white),
// set border radius
borderRadius:
BorderRadius.circular(15),
),
child: ClipRRect(
borderRadius:
BorderRadius.circular(13),
// implement image
child: Image(
image: AssetImage(
'assets/images/exemple_cover.png'),
fit: BoxFit.cover,
),
),
),
))
],
),
),
),
)),
SizedBox(height: 15),
Row(
crossAxisAlignment: CrossAxisAlignment.end,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Flexible(
flex: 8,
child: TextScroll(
"BOOBA",
style: GoogleFonts.plusJakartaSans(
height: 1,
color: Colors.white,
fontWeight: FontWeight.w600,
fontSize: 26.h),
mode: TextScrollMode.endless,
pauseBetween: Duration(milliseconds: 500),
velocity: Velocity(pixelsPerSecond: Offset(20, 0)),
)),
Padding(
padding: EdgeInsets.only(
bottom: 10.h, right: 5.w, left: 5.w),
child: ClipOval(
child: Container(
width: 5.h,
height: 5.h,
color: Colors.white,
),
),
),
Expanded(
flex: 8,
child: Padding(
padding: EdgeInsets.only(bottom: 2),
child: TextScroll(
"A.C. Milan",
style: GoogleFonts.plusJakartaSans(
height: 1,
color: Colors.white,
fontWeight: FontWeight.w300,
fontSize: 16.h),
mode: TextScrollMode.endless,
velocity:
Velocity(pixelsPerSecond: Offset(50, 20)),
pauseBetween: Duration(milliseconds: 500),
),
)),
Container(width: 10),
AutoSizeText(
"2013",
style: GoogleFonts.plusJakartaSans(
color: Colors.white.withOpacity(0.5),
fontWeight: FontWeight.w300,
fontSize: 16.h),
textAlign: TextAlign.end,
maxFontSize: 20,
),
],
),
],
),
);
}
return SizedBox(
width: double.infinity,
child: Column(
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
ClipOval(
child: SizedBox.fromSize(
// Image radius
child: const Image(
image:
AssetImage("assets/images/exemple_profile.png"),
width: 40,
),
),
),
Expanded(
flex: 8,
child: Padding(
padding: const EdgeInsets.only(left: 10),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"Melina",
style: GoogleFonts.plusJakartaSans(
color: Colors.white,
fontWeight: FontWeight.w600),
),
Text(
"France, Lyon",
style: GoogleFonts.plusJakartaSans(
color: Colors.white.withOpacity(0.4),
fontWeight: FontWeight.w300,
fontSize: 13),
)
],
),
),
),
Text(
"Aujourdhui, 16:43",
style: GoogleFonts.plusJakartaSans(
color: Colors.white.withOpacity(0.4),
fontWeight: FontWeight.w300,
fontSize: 13),
),
],
),
SizedBox(height: 10),
ZoomTapAnimation(
onTap: widget.callback,
enableLongTapRepeatEvent: false,
longTapRepeatDuration: const Duration(milliseconds: 100),
begin: 1.0,
end: 0.99,
beginDuration: const Duration(milliseconds: 70),
endDuration: const Duration(milliseconds: 100),
beginCurve: Curves.decelerate,
endCurve: Curves.easeInOutSine,
child: AspectRatio(
aspectRatio: 1 / 1,
child: Container(
decoration: BoxDecoration(
// add border
border: const GradientBoxBorder(
gradient: LinearGradient(
colors: [
Colors.transparent,
Color(0xFF323232),
],
begin: Alignment.topCenter,
end: Alignment.bottomCenter),
width: 2.5,
),
// set border radius
borderRadius: BorderRadius.circular(20),
),
child: ClipRRect(
borderRadius: BorderRadius.circular(18),
// implement image
child: Stack(
alignment: Alignment.bottomCenter,
children: [
Image(
image: AssetImage(
"assets/images/exemple_cover.png"),
fit: BoxFit.cover,
width: double.infinity,
),
Image(
image:
AssetImage("assets/images/shadow_post.png"),
fit: BoxFit.fitHeight,
width: double.infinity,
),
Padding(
padding: EdgeInsets.all(15),
child: AutoSizeText(
'“Jécoute en boucle ce son. B2O<3”',
style: GoogleFonts.plusJakartaSans(
color: Colors.white,
fontWeight: FontWeight.w400,
fontSize: 15.sp),
maxFontSize: 20,
maxLines: 1,
),
),
Positioned(
top: 0,
right: 0,
child: Padding(
padding: EdgeInsets.all(12),
child: Container(
constraints: BoxConstraints(
maxWidth: 140, maxHeight: 140),
width: 80.sp,
height: 80.sp,
decoration: BoxDecoration(
color: Colors.white,
// add border
border: Border.all(
width: 3, color: Colors.white),
// set border radius
borderRadius: BorderRadius.circular(15),
),
child: ClipRRect(
borderRadius: BorderRadius.circular(13),
// implement image
child: Image(
image: AssetImage(
'assets/images/exemple_profile.png'),
fit: BoxFit.cover,
),
),
),
))
],
),
),
),
)),
SizedBox(height: 15),
Row(
crossAxisAlignment: CrossAxisAlignment.end,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Flexible(
flex: 8,
child: TextScroll(
"BOOBA",
style: GoogleFonts.plusJakartaSans(
height: 1,
color: Colors.white,
fontWeight: FontWeight.w600,
fontSize: 26.h),
mode: TextScrollMode.endless,
pauseBetween: Duration(milliseconds: 500),
velocity: Velocity(pixelsPerSecond: Offset(20, 0)),
)),
Padding(
padding:
EdgeInsets.only(bottom: 10.h, right: 5.w, left: 5.w),
child: ClipOval(
child: Container(
width: 5.h,
height: 5.h,
color: Colors.white,
),
),
),
Expanded(
flex: 8,
child: Padding(
padding: EdgeInsets.only(bottom: 2),
child: TextScroll(
"A.C. Milan",
style: GoogleFonts.plusJakartaSans(
height: 1,
color: Colors.white,
fontWeight: FontWeight.w300,
fontSize: 16.h),
mode: TextScrollMode.endless,
velocity: Velocity(pixelsPerSecond: Offset(50, 20)),
pauseBetween: Duration(milliseconds: 500),
),
)),
Container(width: 10),
AutoSizeText(
"2013",
style: GoogleFonts.plusJakartaSans(
color: Colors.white.withOpacity(0.5),
fontWeight: FontWeight.w300,
fontSize: 16.h),
textAlign: TextAlign.end,
maxFontSize: 20,
),
],
),
],
),
);
},
),
);
}
}
import 'package:auto_size_text/auto_size_text.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:gradient_borders/box_borders/gradient_box_border.dart';
import 'package:justmusic/components/profil_picture_component.dart';
import 'package:text_scroll/text_scroll.dart';
import 'package:zoom_tap_animation/zoom_tap_animation.dart';
import '../model/Post.dart';
class PostComponent extends StatefulWidget {
final Function(Post)? callback;
final Post post;
final int index;
PostComponent({Key? key, required this.callback, required this.post, required this.index}) : super(key: key);
@override
State<PostComponent> createState() => _PostComponentState();
}
class _PostComponentState extends State<PostComponent> with TickerProviderStateMixin {
bool choice = false;
DateTime today = DateTime.now();
void switchChoice() {
setState(() {
choice = !choice;
});
}
String formatPostDate(DateTime postDate) {
DateTime now = DateTime.now();
DateTime yesterday = DateTime(now.year, now.month, now.day - 1);
if (postDate.year == now.year && postDate.month == now.month && postDate.day == now.day) {
// Aujourd'hui
return "Aujourd'hui, ${postDate.hour}:${postDate.minute.toString().padLeft(2, '0')}";
} else if (postDate.year == yesterday.year && postDate.month == yesterday.month && postDate.day == yesterday.day) {
// Hier
return 'hier, ${postDate.hour}:${postDate.minute.toString().padLeft(2, '0')}';
} else {
// Autre date
return '${postDate.day} ${_getMonthAbbreviation(postDate.month)} ${postDate.hour}:${postDate.minute.toString().padLeft(2, '0')}';
}
}
String _getMonthAbbreviation(int month) {
const List<String> monthsAbbreviation = [
'janv.', 'févr.', 'mars', 'avr.', 'mai', 'juin', 'juil.', 'août', 'sept.', 'oct.', 'nov.', 'déc.',
];
return monthsAbbreviation[month - 1];
}
@override
void initState() {
print("post: ${widget.post.date.toString()}");
print("ajrd: ${DateTime.now().toString()}");
super.initState();
}
@override
Widget build(BuildContext context) {
var mins = "0";
if (widget.post.date.minute < 10) {
mins = "0${widget.post.date.minute}";
} else {
mins = widget.post.date.minute.toString();
}
return GestureDetector(
onTap: switchChoice,
child: SizedBox(
width: double.infinity,
child: Column(
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
ProfilPictureComponent(user: widget.post.user),
Expanded(
flex: 8,
child: Padding(
padding: const EdgeInsets.only(left: 10),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
widget.post.user.pseudo,
style: GoogleFonts.plusJakartaSans(color: Colors.white, fontWeight: FontWeight.w600),
),
widget.post.location.item2 != null
? Text(
"${widget.post.location.item1}, ${widget.post.location.item2}",
style: GoogleFonts.plusJakartaSans(
color: Colors.white.withOpacity(0.4),
fontWeight: FontWeight.w300,
fontSize: 13),
)
: Text(
"",
style: GoogleFonts.plusJakartaSans(
color: Colors.white.withOpacity(0.4),
fontWeight: FontWeight.w300,
fontSize: 13),
)
],
),
),
),
Text(
formatPostDate(widget.post.date),
style: GoogleFonts.plusJakartaSans(
color: Colors.white.withOpacity(0.4), fontWeight: FontWeight.w300, fontSize: 13),
)
],
),
SizedBox(height: 10),
ZoomTapAnimation(
onTap: () {
widget.callback!(widget.post);
},
enableLongTapRepeatEvent: false,
longTapRepeatDuration: const Duration(milliseconds: 100),
begin: 1.0,
end: 0.99,
beginDuration: const Duration(milliseconds: 70),
endDuration: const Duration(milliseconds: 100),
beginCurve: Curves.decelerate,
endCurve: Curves.easeInOutSine,
child: AspectRatio(
aspectRatio: 1 / 1,
child: Container(
decoration: BoxDecoration(
// add border
border: const GradientBoxBorder(
gradient: LinearGradient(colors: [
Colors.transparent,
Color(0xFF323232),
], begin: Alignment.topCenter, end: Alignment.bottomCenter),
width: 2.5,
),
// set border radius
borderRadius: BorderRadius.circular(20),
),
child: ClipRRect(
borderRadius: BorderRadius.circular(18),
// implement image
child: Stack(
alignment: Alignment.bottomCenter,
children: [
SizedBox(
width: double.infinity,
child: Image.network(
widget.post.music.cover!,
),
),
Image(
image: AssetImage("assets/images/shadow_post.png"),
opacity: AnimationController(vsync: this, value: 0.7),
fit: BoxFit.fitHeight,
width: double.infinity,
),
widget.post.description == null
? Container()
: Padding(
padding: EdgeInsets.all(15),
child: AutoSizeText(
'${widget.post.description}',
style: GoogleFonts.plusJakartaSans(
color: Colors.white, fontWeight: FontWeight.w400, fontSize: 15.sp),
maxFontSize: 20,
maxLines: 1,
),
),
widget.post.selfie != null
? Positioned(
top: 0,
right: 0,
child: Padding(
padding: EdgeInsets.all(12),
child: Container(
constraints: BoxConstraints(maxWidth: 140, maxHeight: 140),
width: 90.sp,
height: 90.sp,
decoration: BoxDecoration(
color: Colors.white,
// add border
border: Border.all(width: 3, color: Colors.white),
// set border radius
borderRadius: BorderRadius.circular(15),
),
child: ClipRRect(
borderRadius: BorderRadius.circular(13),
// implement image
child: Image.network(
widget.post.selfie!,
fit: BoxFit.cover,
),
),
),
))
: Container(),
],
),
),
),
)),
SizedBox(height: 15),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Expanded(
flex: 8,
child: Padding(
padding: EdgeInsets.only(bottom: 2),
child: TextScroll(
widget.post.music.title!,
style: GoogleFonts.plusJakartaSans(
height: 1, color: Colors.white, fontWeight: FontWeight.w600, fontSize: 26.h),
mode: TextScrollMode.endless,
velocity: Velocity(pixelsPerSecond: Offset(50, 20)),
pauseBetween: Duration(milliseconds: 500),
),
)),
Container(width: 10),
AutoSizeText(
widget.post.music.date.toString(),
style: GoogleFonts.plusJakartaSans(
color: Colors.white, fontWeight: FontWeight.w600, fontSize: 26.h),
textAlign: TextAlign.end,
maxFontSize: 20,
),
],
),
TextScroll(
widget.post.music.artists.first.name!,
style: GoogleFonts.plusJakartaSans(
height: 1, color: Colors.white.withOpacity(0.5), fontWeight: FontWeight.w300, fontSize: 16.h),
mode: TextScrollMode.endless,
pauseBetween: Duration(milliseconds: 500),
velocity: Velocity(pixelsPerSecond: Offset(20, 0)),
),
],
),
],
)));
}
}

@ -0,0 +1,35 @@
import 'package:flutter/material.dart';
import '../config/routes.dart';
import '../model/User.dart';
class ProfilPictureComponent extends StatelessWidget {
final User user;
const ProfilPictureComponent({super.key, required this.user});
void _openDetail(BuildContext context) {
print("cc");
Navigator.of(context).push(routeUser(user));
}
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
_openDetail(context);
},
child: ClipOval(
child: SizedBox(
height: 40,
width: 40,
// Image radius
child: FadeInImage.assetNetwork(
image: user.pp,
fit: BoxFit.cover,
fadeInDuration: const Duration(milliseconds: 100),
placeholder: "assets/images/loadingPlaceholder.gif",
),
),
),
);
}
}

@ -1,6 +1,7 @@
import 'package:auto_size_text/auto_size_text.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:justmusic/components/statistics_component.dart';
@ -17,24 +18,30 @@ class ProfileComponent extends StatelessWidget {
children: [
ClipOval(
child: ConstrainedBox(
constraints: BoxConstraints(maxWidth: 200, maxHeight: 200),
child: Image(
image: AssetImage("assets/images/exemple_profile.png"),
height: 100.w,
width: 100.w,
),
),
constraints: BoxConstraints(maxWidth: 200, maxHeight: 200),
child: SizedBox(
width: 100.w,
height: 100.w,
child: FadeInImage.assetNetwork(
image: user.pp,
fit: BoxFit.cover,
fadeInDuration: const Duration(milliseconds: 100),
placeholder: "assets/images/loadingPlaceholder.gif",
),
)),
),
SizedBox(
height: 10,
),
AutoSizeText(
"@${user.pseudo}",
style: GoogleFonts.plusJakartaSans(
fontSize: 15.sp,
color: Colors.white,
fontWeight: FontWeight.w400),
maxFontSize: 30,
GestureDetector(
onLongPress: () async {
await Clipboard.setData(ClipboardData(text: user.uniquePseudo));
},
child: AutoSizeText(
"${user.pseudo}",
style: GoogleFonts.plusJakartaSans(fontSize: 15.sp, color: Colors.white, fontWeight: FontWeight.w400),
maxFontSize: 30,
),
),
SizedBox(
height: 20,

@ -0,0 +1,135 @@
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:justmusic/components/profil_picture_component.dart';
import '../main.dart';
import '../model/User.dart';
import '../values/constants.dart';
class ProfileListComponent extends StatefulWidget {
final User user;
const ProfileListComponent({super.key, required this.user});
@override
State<ProfileListComponent> createState() => _ProfileListComponentState();
}
class _ProfileListComponentState extends State<ProfileListComponent> {
late bool clicked;
@override
Widget build(BuildContext context) {
clicked = MyApp.userViewModel.isFriend(widget.user.id);
return Container(
padding: const EdgeInsets.only(bottom: 5),
child: Row(
children: [
ProfilPictureComponent(user: widget.user),
const SizedBox(
width: 10,
),
Expanded(
flex: 10,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
widget.user.pseudo,
style: GoogleFonts.plusJakartaSans(fontSize: 16, color: Colors.white, fontWeight: FontWeight.w700),
overflow: TextOverflow.ellipsis,
maxLines: 1,
),
Row(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Text(
widget.user.uniquePseudo,
overflow: TextOverflow.ellipsis,
style: GoogleFonts.plusJakartaSans(color: Colors.grey, fontWeight: FontWeight.w400),
),
widget.user.followed.contains(MyApp.userViewModel.userCurrent.id)
? Container(
padding: const EdgeInsets.all(2),
margin: const EdgeInsets.only(left: 10),
decoration: const BoxDecoration(
color: grayColor,
borderRadius: BorderRadius.all(Radius.circular(3)),
),
child: Text(
"Vous suit",
overflow: TextOverflow.ellipsis,
style: GoogleFonts.plusJakartaSans(
color: Colors.grey.withOpacity(0.4), fontWeight: FontWeight.w700, fontSize: 12),
),
)
: Container(),
],
)
],
),
),
Spacer(),
clicked
? Material(
borderRadius: BorderRadius.all(Radius.circular(5)),
color: selectedButton,
child: InkWell(
splashColor: Colors.white.withOpacity(0.3),
onTap: () async {
await MyApp.userViewModel.addOrDeleteFriend(widget.user.id);
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
"Vous ne suivez plus ${widget.user.pseudo}",
style: GoogleFonts.plusJakartaSans(
color: Colors.white, fontWeight: FontWeight.w400, fontSize: 20.h),
),
backgroundColor: Colors.red,
closeIconColor: Colors.white,
),
);
setState(() {});
},
child: Container(
padding: EdgeInsets.fromLTRB(28, 7, 28, 7),
decoration: BoxDecoration(borderRadius: BorderRadius.all(Radius.circular(7))),
child: Center(
child: Text("Ajouté",
style: GoogleFonts.plusJakartaSans(
color: Colors.white, fontWeight: FontWeight.w600, fontSize: 13)),
),
)))
: Material(
borderRadius: BorderRadius.all(Radius.circular(5)),
color: primaryColor,
child: InkWell(
splashColor: Colors.white.withOpacity(0.3),
onTap: () async {
await MyApp.userViewModel.addOrDeleteFriend(widget.user.id);
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
backgroundColor: primaryColor,
content: Text(
"Vous suivez à present ${widget.user.pseudo}",
style: GoogleFonts.plusJakartaSans(
color: Colors.white, fontWeight: FontWeight.w400, fontSize: 20.h),
),
),
);
setState(() {});
},
child: Container(
padding: EdgeInsets.fromLTRB(25, 7, 25, 7),
decoration: BoxDecoration(borderRadius: BorderRadius.all(Radius.circular(7))),
child: Center(
child: Text("Ajouter",
style: GoogleFonts.plusJakartaSans(
color: Colors.white, fontWeight: FontWeight.w600, fontSize: 13)),
),
))),
],
),
);
}
}

@ -0,0 +1,124 @@
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import '../main.dart';
import '../model/User.dart' as justMusic;
import '../values/constants.dart';
import 'little_post_recap_component.dart';
class RecapComponent extends StatelessWidget {
final justMusic.User user;
const RecapComponent({super.key, required this.user});
Future<List<bool>>? _fetchdata() async {
return await MyApp.postViewModel.recapSevenDays(user.id);
}
@override
Widget build(BuildContext context) {
List<String> weekDays = ['L', 'M', 'M', 'J', 'V', 'S', 'D'];
DateTime currentDate = DateTime.now();
return Container(
decoration: BoxDecoration(
color: profileBttnColor,
borderRadius: BorderRadius.circular(10),
border: Border.all(color: grayColor, width: 1)),
height: 120,
clipBehavior: Clip.hardEdge,
child: Column(
children: [
Expanded(
child: Container(
padding: EdgeInsets.symmetric(horizontal: 10),
decoration: BoxDecoration(
color: postbutton,
borderRadius: BorderRadius.only(topRight: Radius.circular(10), topLeft: Radius.circular(10)),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Flexible(
child: Center(
child: Text(
weekDays[currentDate.subtract(Duration(days: 6)).weekday - 1].substring(0, 1),
style: GoogleFonts.plusJakartaSans(color: Colors.white, fontWeight: FontWeight.w800, fontSize: 17),
),
)),
Flexible(
child: Center(
child: Text(
weekDays[currentDate.subtract(Duration(days: 5)).weekday - 1].substring(0, 1),
style: GoogleFonts.plusJakartaSans(color: Colors.white, fontWeight: FontWeight.w800, fontSize: 17),
),
)),
Flexible(
child: Center(
child: Text(
weekDays[currentDate.subtract(Duration(days: 4)).weekday - 1].substring(0, 1),
style: GoogleFonts.plusJakartaSans(color: Colors.white, fontWeight: FontWeight.w800, fontSize: 17),
),
)),
Flexible(
child: Center(
child: Text(
weekDays[currentDate.subtract(Duration(days: 3)).weekday - 1].substring(0, 1),
style: GoogleFonts.plusJakartaSans(color: Colors.white, fontWeight: FontWeight.w800, fontSize: 17),
),
)),
Flexible(
child: Center(
child: Text(
weekDays[currentDate.subtract(Duration(days: 2)).weekday - 1].substring(0, 1),
style: GoogleFonts.plusJakartaSans(color: Colors.white, fontWeight: FontWeight.w800, fontSize: 17),
),
)),
Flexible(
child: Center(
child: Text(
weekDays[currentDate.subtract(Duration(days: 1)).weekday - 1].substring(0, 1),
style: GoogleFonts.plusJakartaSans(color: Colors.white, fontWeight: FontWeight.w800, fontSize: 17),
),
)),
Flexible(
child: Center(
child: Text(
weekDays[currentDate.subtract(Duration(days: 0)).weekday - 1].substring(0, 1),
style: GoogleFonts.plusJakartaSans(color: Colors.white, fontWeight: FontWeight.w800, fontSize: 17),
),
)),
],
),
)),
FutureBuilder<List<bool>>(
future: _fetchdata(), // a previously-obtained Future<String> or null
builder: (BuildContext context, AsyncSnapshot<List<bool>> snapshot) {
if (snapshot.hasData) {
return Padding(
padding: EdgeInsets.all(12),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.end,
children: [
LittleCapsule(
isEmpty: snapshot.data![0],
date: currentDate.subtract(const Duration(days: 6)),
),
LittleCapsule(isEmpty: snapshot.data![1], date: currentDate.subtract(const Duration(days: 5))),
LittleCapsule(isEmpty: snapshot.data![2], date: currentDate.subtract(const Duration(days: 4))),
LittleCapsule(isEmpty: snapshot.data![3], date: currentDate.subtract(const Duration(days: 3))),
LittleCapsule(isEmpty: snapshot.data![4], date: currentDate.subtract(const Duration(days: 2))),
LittleCapsule(isEmpty: snapshot.data![5], date: currentDate.subtract(const Duration(days: 1))),
LittleCapsule(isEmpty: snapshot.data![6], date: currentDate.subtract(const Duration(days: 0))),
],
),
);
} else {
return Container();
}
}),
],
),
);
}
}

@ -1,4 +1,4 @@
import 'package:flutter/Material.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import '../values/constants.dart';

@ -1,3 +1,4 @@
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:justmusic/values/icons.dart';
@ -8,29 +9,30 @@ class SettingPartComponent extends StatelessWidget {
final JustMusicIcon icon;
final String label;
final bool important;
final VoidCallback? action;
const SettingPartComponent(
{Key? key,
required this.icon,
required this.label,
this.important = false})
{Key? key, required this.icon, required this.label, this.important = false, required this.action})
: super(key: key);
@override
Widget build(BuildContext context) {
Future<void> logout() async {
print("cc");
await FirebaseAuth.instance.signOut();
Navigator.pushNamed(context, '/welcome');
}
return Material(
color: important ? warningBttnColor : settingColor,
borderOnForeground: false,
child: InkWell(
onTap: () {
print('InkWell was tapped!');
},
onTap: action,
splashColor: Colors.transparent,
highlightColor: Colors.white.withOpacity(0.08),
child: Container(
width: double.infinity,
child: Padding(
padding: const EdgeInsets.fromLTRB(
defaultPadding, 19, defaultPadding, 19),
padding: const EdgeInsets.fromLTRB(defaultPadding, 19, defaultPadding, 19),
child: Row(
children: [
Image(
@ -45,8 +47,7 @@ class SettingPartComponent extends StatelessWidget {
child: Text(
label,
overflow: TextOverflow.ellipsis,
style: GoogleFonts.plusJakartaSans(
color: Colors.white, fontWeight: FontWeight.w700),
style: GoogleFonts.plusJakartaSans(color: Colors.white, fontWeight: FontWeight.w700),
),
),
Spacer(),

@ -20,7 +20,7 @@ class StatisticsComponent extends StatelessWidget {
child: Column(
children: [
AutoSizeText(
user.followed.toString(),
user.followed.length.toString(),
style: GoogleFonts.plusJakartaSans(
color: Colors.white,
fontWeight: FontWeight.bold,
@ -40,7 +40,7 @@ class StatisticsComponent extends StatelessWidget {
mainAxisSize: MainAxisSize.min,
children: [
AutoSizeText(
user.followers.toString(),
user.followers.length.toString(),
style: GoogleFonts.plusJakartaSans(
color: Colors.white,
fontWeight: FontWeight.bold,

@ -1,33 +1,142 @@
import 'package:another_flushbar/flushbar.dart';
import 'package:auto_size_text/auto_size_text.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_countdown_timer/flutter_countdown_timer.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:ionicons/ionicons.dart';
import 'package:lottie/lottie.dart';
import 'package:zoom_tap_animation/zoom_tap_animation.dart';
import '../config/routes.dart';
import 'package:timezone/timezone.dart' as tz;
import '../main.dart';
import '../values/constants.dart';
class TopNavBarComponent extends StatefulWidget {
final Function(bool) callback;
const TopNavBarComponent({Key? key, required this.callback})
: super(key: key);
final bool choice;
const TopNavBarComponent({Key? key, required this.callback, required this.choice}) : super(key: key);
@override
State<TopNavBarComponent> createState() => _TopNavBarComponentState();
}
class _TopNavBarComponentState extends State<TopNavBarComponent> {
bool choice = true;
class _TopNavBarComponentState extends State<TopNavBarComponent> with TickerProviderStateMixin {
late bool choice;
void actionSurBouton() {
bool isDismissed = true;
final DateTime midnight = DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day + 1);
void actionSurBouton(bool choice) async {
widget.callback(choice);
}
@override
void initState() {
super.initState();
}
Future<void> showCapsuleDot() async {
// Get the timezone for France
final franceTimeZone = tz.getLocation('Europe/Paris');
// Get the current date and time in France timezone
var now = tz.TZDateTime.now(franceTimeZone);
// Calculate the midnight time for the next day in France timezone
var midnight = tz.TZDateTime(franceTimeZone, now.year, now.month, now.day + 1);
bool res = await MyApp.postViewModel.getAvailable();
if (res) {
Flushbar(
maxWidth: 210,
animationDuration: Duration(seconds: 1),
forwardAnimationCurve: Curves.easeOutCirc,
margin: EdgeInsets.fromLTRB(0, 0, 0, 0),
icon: Icon(
Ionicons.sparkles,
color: Colors.white,
size: 18,
),
padding: EdgeInsets.fromLTRB(8, 8, 8, 8),
messageText: Align(
alignment: Alignment.centerLeft,
child: Text(
"Capsule disponible",
style: GoogleFonts.plusJakartaSans(color: Colors.grey, fontSize: 15),
),
),
flushbarStyle: FlushbarStyle.FLOATING,
flushbarPosition: FlushbarPosition.BOTTOM,
textDirection: Directionality.of(context),
borderRadius: BorderRadius.circular(1000),
borderWidth: 1,
borderColor: Colors.white.withOpacity(0.04),
duration: const Duration(minutes: 100),
leftBarIndicatorColor: Colors.transparent,
positionOffset: 20,
onTap: (_) {
Navigator.pop(context);
Navigator.pushNamed(context, '/post');
},
).show(context).then((value) {
setState(() {
isDismissed = !isDismissed;
});
});
} else {
Flushbar(
maxWidth: 155,
animationDuration: Duration(seconds: 1),
forwardAnimationCurve: Curves.easeOutCirc,
margin: EdgeInsets.fromLTRB(0, 0, 0, 0),
icon: Lottie.asset(
'assets/animations/LottieHourGlass.json',
width: 26,
fit: BoxFit.fill,
),
padding: EdgeInsets.fromLTRB(8, 8, 8, 8),
messageText: Align(
alignment: Alignment.centerLeft,
child: CountdownTimer(
endTime: midnight.millisecondsSinceEpoch,
textStyle: GoogleFonts.plusJakartaSans(color: Colors.grey, fontSize: 15),
),
),
flushbarStyle: FlushbarStyle.FLOATING,
flushbarPosition: FlushbarPosition.BOTTOM,
textDirection: Directionality.of(context),
borderRadius: BorderRadius.circular(1000),
borderWidth: 1,
borderColor: Colors.white.withOpacity(0.04),
duration: const Duration(minutes: 100),
leftBarIndicatorColor: Colors.transparent,
positionOffset: 20,
onTap: (_) {},
).show(context).then((value) {
setState(() {
isDismissed = !isDismissed;
});
});
}
}
void checkAvailable() async {
if (isDismissed) {
showCapsuleDot();
setState(() {
isDismissed = !isDismissed;
});
}
}
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.only(top: defaultPadding),
child: Container(
padding: EdgeInsets.symmetric(horizontal: defaultPadding),
choice = widget.choice;
return SafeArea(top:true,child: Container(
padding: EdgeInsets.symmetric(horizontal: defaultPadding, vertical: 20),
width: double.infinity,
height: 100,
child: Row(
@ -37,88 +146,103 @@ class _TopNavBarComponentState extends State<TopNavBarComponent> {
Flexible(
flex: 1,
child: GestureDetector(
behavior: HitTestBehavior.translucent,
onTap: () {
Navigator.pushNamed(context, '/post');
Navigator.of(context).push(routeAddFriend());
},
child: const Image(
image: AssetImage("assets/images/add_friend.png"),
width: 25,
child: const Icon(
Icons.person_add_alt_1_rounded,
color: Colors.white,
size: 30,
),
),
),
ConstrainedBox(
constraints: BoxConstraints(maxWidth: 170),
constraints: BoxConstraints(maxWidth: 200),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
const Image(
image: AssetImage("assets/images/logo.png"),
height: 30,
),
ZoomTapAnimation(
enableLongTapRepeatEvent: false,
longTapRepeatDuration: const Duration(milliseconds: 100),
begin: 1.0,
onTap: () {
checkAvailable();
},
end: 0.97,
beginDuration: const Duration(milliseconds: 70),
endDuration: const Duration(milliseconds: 100),
beginCurve: Curves.decelerate,
endCurve: Curves.easeInOutSine,
child: Image(
image: AssetImage("assets/images/logo.png"),
height: 30,
)),
Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
mainAxisAlignment: MainAxisAlignment.center,
children: [
GestureDetector(
behavior: HitTestBehavior.translucent,
onTap: () {
if (!choice) {
setState(() {
choice = !choice;
actionSurBouton();
actionSurBouton(false);
});
}
},
child: LayoutBuilder(
builder: (BuildContext context,
BoxConstraints constraints) {
builder: (BuildContext context, BoxConstraints constraints) {
if (choice) {
return AutoSizeText(
"Mes amis",
style: GoogleFonts.plusJakartaSans(
fontWeight: FontWeight.w500,
fontSize: 16,
color: Colors.white),
return Padding(
padding: const EdgeInsets.only(left: 8, top: 0, right: 8, bottom: 6),
child: AutoSizeText(
"Mes amis",
style: GoogleFonts.plusJakartaSans(
fontWeight: FontWeight.w500, fontSize: 16, color: Colors.white),
),
);
} else {
return AutoSizeText(
"Mes amis",
style: GoogleFonts.plusJakartaSans(
fontWeight: FontWeight.w300,
fontSize: 16,
color: unactiveFeed),
);
return Padding(
padding: const EdgeInsets.only(left: 8, top: 0, right: 8, bottom: 6),
child: AutoSizeText(
"Mes amis",
style: GoogleFonts.plusJakartaSans(
fontWeight: FontWeight.w300, fontSize: 16, color: unactiveFeed),
));
}
},
),
),
GestureDetector(
behavior: HitTestBehavior.translucent,
onTap: () {
if (choice) {
setState(() {
choice = !choice;
actionSurBouton();
actionSurBouton(true);
});
}
},
child: LayoutBuilder(
builder: (BuildContext context,
BoxConstraints constraints) {
builder: (BuildContext context, BoxConstraints constraints) {
if (choice) {
return AutoSizeText(
"Discovery",
style: GoogleFonts.plusJakartaSans(
fontWeight: FontWeight.w300,
fontSize: 16,
color: unactiveFeed),
);
return Padding(
padding: const EdgeInsets.only(left: 8, top: 0, right: 8, bottom: 6),
child: AutoSizeText(
"Discovery",
style: GoogleFonts.plusJakartaSans(
fontWeight: FontWeight.w300, fontSize: 16, color: unactiveFeed),
));
} else {
return AutoSizeText(
"Discovery",
style: GoogleFonts.plusJakartaSans(
fontWeight: FontWeight.w500,
fontSize: 16,
color: Colors.white),
);
return Padding(
padding: const EdgeInsets.only(left: 8, top: 0, right: 8, bottom: 6),
child: AutoSizeText(
"Discovery",
style: GoogleFonts.plusJakartaSans(
fontWeight: FontWeight.w500, fontSize: 16, color: Colors.white),
));
}
},
),
@ -131,15 +255,20 @@ class _TopNavBarComponentState extends State<TopNavBarComponent> {
Flexible(
flex: 1,
child: GestureDetector(
onTap: () {
Navigator.of(context).push(createRoute());
onTap: () async {
await MyApp.userViewModel.updateUserCurrent();
Navigator.of(context).push(routeProfile());
},
child: ClipOval(
child: SizedBox.fromSize(
child: SizedBox(
width: 30,
height: 30,
// Image radius
child: const Image(
image: AssetImage("assets/images/exemple_profile.png"),
width: 25,
child: FadeInImage.assetNetwork(
image: MyApp.userViewModel.userCurrent.pp,
fit: BoxFit.cover,
fadeInDuration: const Duration(milliseconds: 100),
placeholder: "assets/images/loadingPlaceholder.gif",
),
),
),

@ -1,10 +1,65 @@
import 'package:flutter/Material.dart';
import 'package:flutter/material.dart';
import 'package:justmusic/screens/add_friend_screen.dart';
import 'package:justmusic/screens/capsule_historic_screen.dart';
import 'package:justmusic/screens/change_password_screen.dart';
import 'package:justmusic/screens/feed_screen.dart';
import 'package:justmusic/screens/profile_screen.dart';
import 'package:justmusic/screens/user_screen.dart';
import 'package:justmusic/screens/welcome_screen.dart';
Route createRoute() {
import '../model/User.dart';
Route routeProfile() {
return PageRouteBuilder(
pageBuilder: (context, animation, secondaryAnimation) => const ProfileScreen(),
transitionsBuilder: (context, animation, secondaryAnimation, child) {
const begin = Offset(1.0, 0.0);
const end = Offset.zero;
const curve = Curves.ease;
var tween = Tween(begin: begin, end: end).chain(CurveTween(curve: curve));
return SlideTransition(
position: animation.drive(tween),
child: child,
);
},
);
}
Route routeAddFriend() {
return PageRouteBuilder(
pageBuilder: (context, animation, secondaryAnimation) => const AddFriendScreen(),
transitionsBuilder: (context, animation, secondaryAnimation, child) {
const begin = Offset(-1.0, 0.0);
const end = Offset.zero;
const curve = Curves.ease;
var tween = Tween(begin: begin, end: end).chain(CurveTween(curve: curve));
return SlideTransition(
position: animation.drive(tween),
child: child,
);
},
);
}
Route routeRocket() {
return PageRouteBuilder(
pageBuilder: (context, animation, secondaryAnimation) => FeedScreen(),
transitionsBuilder: (context, animation, secondaryAnimation, child) {
return FadeTransition(
opacity: animation,
child: child,
);
},
);
}
Route routeUser(User user) {
return PageRouteBuilder(
pageBuilder: (context, animation, secondaryAnimation) =>
const ProfileScreen(),
pageBuilder: (context, animation, secondaryAnimation) => UserScreen(user: user),
transitionsBuilder: (context, animation, secondaryAnimation, child) {
const begin = Offset(1.0, 0.0);
const end = Offset.zero;
@ -19,3 +74,51 @@ Route createRoute() {
},
);
}
Route routePassword() {
return PageRouteBuilder(
pageBuilder: (context, animation, secondaryAnimation) => const ChangePasswordScreen(),
transitionsBuilder: (context, animation, secondaryAnimation, child) {
const begin = Offset(1.0, 0.0);
const end = Offset.zero;
const curve = Curves.ease;
var tween = Tween(begin: begin, end: end).chain(CurveTween(curve: curve));
return SlideTransition(
position: animation.drive(tween),
child: child,
);
},
);
}
Route routeHistoric() {
return PageRouteBuilder(
pageBuilder: (context, animation, secondaryAnimation) => const CapsuleHistoricScreen(),
transitionsBuilder: (context, animation, secondaryAnimation, child) {
const begin = Offset(1.0, 0.0);
const end = Offset.zero;
const curve = Curves.ease;
var tween = Tween(begin: begin, end: end).chain(CurveTween(curve: curve));
return SlideTransition(
position: animation.drive(tween),
child: child,
);
},
);
}
Route routeWelcome() {
return PageRouteBuilder(
pageBuilder: (context, animation, secondaryAnimation) => const WellcomeScreen(),
transitionsBuilder: (context, animation, secondaryAnimation, child) {
return FadeTransition(
opacity: animation,
child: child,
);
},
);
}

@ -0,0 +1,6 @@
class UserException implements Exception {
String code;
String description;
UserException(this.code,this.description);
}

@ -1,69 +1,135 @@
import 'dart:async';
import 'package:audioplayers/audioplayers.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:justmusic/screens/add_friend_screen.dart';
import 'package:justmusic/screens/explanations_screen.dart';
import 'package:justmusic/screens/feed_screen.dart';
import 'package:justmusic/screens/forget_password_screen.dart';
import 'package:justmusic/screens/login_screen.dart';
import 'package:justmusic/screens/launching_rocker_screen.dart';
import 'package:justmusic/screens/post_screen.dart';
import 'package:justmusic/screens/profile_screen.dart';
import 'package:justmusic/screens/registration_screen.dart';
import 'package:justmusic/screens/verify_email_screen.dart';
import 'package:justmusic/screens/welcome_screen.dart';
import 'package:justmusic/values/constants.dart';
import 'package:justmusic/view_model/CommentViewModel.dart';
import 'package:justmusic/view_model/MusicViewModel.dart';
import 'package:justmusic/view_model/PostViewModel.dart';
import 'package:justmusic/view_model/UserViewModel.dart';
import 'package:justmusic/model/User.dart' as userJustMusic;
import 'firebase_options.dart';
import 'package:timezone/data/latest.dart' as tz;
import 'package:intl/date_symbol_data_local.dart';
import 'package:fullscreen_window/fullscreen_window.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
tz.initializeTimeZones();
Paint.enableDithering = true;
WidgetsFlutterBinding.ensureInitialized(); // Initialize for French locale
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
await initializeDateFormatting('fr_FR', null);
if (!kIsWeb) {
await FirebaseMessaging.instance.requestPermission(sound: true);
}
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
class MyApp extends StatefulWidget {
static FirebaseFirestore db = FirebaseFirestore.instance;
static UserViewModel userViewModel = UserViewModel();
static MusicViewModel musicViewModel = MusicViewModel();
static PostViewModel postViewModel = PostViewModel();
static AudioPlayer audioPlayer = AudioPlayer();
static CommentViewModel commentViewModel = CommentViewModel();
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
late StreamSubscription<User?> user;
@override
void initState() {
FullScreenWindow.setFullScreen(true); // enter fullscreen
super.initState();
}
@override
void dispose() {
user.cancel();
super.dispose();
}
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersiveSticky);
Paint.enableDithering = true;
Paint.enableDithering = true; // enter fullscreen
return ScreenUtilInit(
useInheritedMediaQuery: true,
builder: (context, child) {
return MaterialApp(
color: bgColor,
routes: {
'/welcome': (context) => WellcomeScreen(),
'/feed': (context) => FeedScreen(),
'/login': (context) => LoginScreen(),
'/register': (context) => RegistrationScreen(),
'/post': (context) => PostScreen(),
'/profile': (context) => ProfileScreen(),
'/explanation': (context) => ExplanationsScreen(),
'/welcome': (context) => const WellcomeScreen(),
'/feed': (context) => const FeedScreen(),
'/login': (context) => const LoginScreen(),
'/register': (context) => const RegistrationScreen(),
'/post': (context) => const PostScreen(),
'/profile': (context) => const ProfileScreen(),
'/explanation': (context) => const ExplanationsScreen(),
'/addFriend': (context) => const AddFriendScreen(),
'/launchingRocket': (context) => const LaunchingRocketScreen(),
'/verifyEmail': (context) => const VerifyEmailScreen(),
'/forgetPassword': (context) => const ForgetPasswordScreen(),
},
debugShowCheckedModeBanner: false,
theme: ThemeData(
// This is the theme of your application.
//
// Try running your application with "flutter run". You'll see the
// application has a blue toolbar. Then, without quitting the app, try
// changing the primarySwatch below to Colors.green and then invoke
// "hot reload" (press "r" in the console where you ran "flutter run",
// or simply save your changes to "hot reload" in a Flutter IDE).
// Notice that the counter didn't reset back to zero; the application
// is not restarted.
primarySwatch: Colors.blue,
),
home: WellcomeScreen());
home: StreamBuilder(
stream: FirebaseAuth.instance.authStateChanges(),
builder: (context, snapshot) {
if (ConnectionState.waiting == snapshot.connectionState) {
return const CupertinoActivityIndicator();
}
if (snapshot.hasData) {
return FutureBuilder<userJustMusic.User?>(
future: MyApp.userViewModel.getUser(snapshot.data!.uid),
builder: (context, userSnapshot) {
if (userSnapshot.connectionState == ConnectionState.waiting) {
return const CupertinoActivityIndicator();
} else {
if (userSnapshot.hasData) {
MyApp.userViewModel.userCurrent = userSnapshot.data!;
return FeedScreen();
} else {
return WellcomeScreen();
}
}
},
);
} else {
return WellcomeScreen();
}
}));
},
designSize: Size(390, 844),
);

@ -5,7 +5,7 @@ class Artist {
Artist(this._id, this._name, this._image);
String? get id => _id;
String get id => _id;
String? get name => _name;

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save