diff --git a/.github/workflows/dart.yml b/.github/workflows/dart.yml index 4bfb49c..2991702 100644 --- a/.github/workflows/dart.yml +++ b/.github/workflows/dart.yml @@ -10,24 +10,24 @@ on: #A workflow run is made up of one or more jobs. Jobs run in parallel by default. jobs: - Unit_Tests: - #The type of machine to run the job on. [windows,macos, ubuntu , self-hosted] - runs-on: ubuntu-latest - #sequence of tasks called - steps: - # The branch or tag ref that triggered the workflow will be checked out. - # https://github.com/actions/checkout - - uses: actions/checkout@v1 - # Setup a flutter environment. - # https://github.com/marketplace/actions/flutter-action - - uses: subosito/flutter-action@v1.4.0 - with: - flutter-version: '1.20.1' - - run: flutter pub get - # run static analysis code - # - run: flutter analyze - # run flutter widgets tests and unit tests - - run: flutter test +# Unit_Tests: +# #The type of machine to run the job on. [windows,macos, ubuntu , self-hosted] +# runs-on: ubuntu-latest +# #sequence of tasks called +# steps: +# # The branch or tag ref that triggered the workflow will be checked out. +# # https://github.com/actions/checkout +# - uses: actions/checkout@v1 +# # Setup a flutter environment. +# # https://github.com/marketplace/actions/flutter-action +# - uses: subosito/flutter-action@v1.4.0 +# with: +# flutter-version: '1.22.5' +# - run: flutter pub get +# # run static analysis code +# # - run: flutter analyze +# # run flutter widgets tests and unit tests +# - run: flutter test @@ -64,7 +64,7 @@ jobs: # if: github.event_name != 'pull_request' runs-on: ubuntu-latest name: Build APK - needs: [Unit_Tests] +# needs: [Unit_Tests] steps: - uses: actions/checkout@v1 - uses: actions/setup-java@v1 @@ -75,7 +75,7 @@ jobs: SIGNING_KEY: ${{ secrets.SIGNING_KEY }} - uses: subosito/flutter-action@v1.4.0 with: - flutter-version: '1.20.1' + flutter-version: '1.22.5' - run: flutter build apk --split-per-abi env: KEY_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }} diff --git a/.zshrc b/.zshrc new file mode 100644 index 0000000..325b63b --- /dev/null +++ b/.zshrc @@ -0,0 +1 @@ +export LANG=en_US.UTF-8 diff --git a/README.md b/README.md index 1be8de2..745c8cc 100755 --- a/README.md +++ b/README.md @@ -23,102 +23,16 @@ Get it on Google Play
+--- ## About -InstaSmart is a Flutter app to easily plan and beautify your Instagram feed. -
-
-A project built for [Orbital](https://orbital.comp.nus.edu.sg/) 2020 (CP2106: Independent Software Development Project Module), InstaSmart attained the highest level of achievement - [Artemis](https://nusskylab-dev.comp.nus.edu.sg/public_views/public_projects) - in the module. The project report with all the project specifications and testing details can be found [here](https://docs.google.com/document/d/1zLvbWGw6q75HyQKes5T7n6x1hmygoy8gyzssS_MPyGE/edit?usp=sharing). - -## Features - - - -* **Explore Frames** - - **Browse and Filter:** Users can browse through a collection of frames. They can also filter the frames based on a set of themes like ‘minimalist’ or ‘landscape’. - - **Liking Functionality:** Frames can be ‘liked’ and ‘unliked’ by the user. The total likes across all users will be stored in the database and will be displayed on each frame. - - **Order:** The frames will be ordered based on popularity (number of likes). - - **Liked Frames:** A separate page for ‘liked frames’ which will show all the frames liked by a user. -









- -* **Generate Grids** - - **Add Images:** Tapping a frame opens the generate grid page. Users can then add images to the frame from their gallery and see how the grid will look like -Reorder: The images can be reordered in the grid by dragging and dropping and finalising the grid. - - **Save to Gallery:** Once the grid is finalised, the user can save the grid to the gallery by clicking a button. This will result in the frame being split into parts and applied as background to each of the images which are then saved. - - **Add to Preview:** The grid can also be added to the Preview Screen to see how it will look on an instagram feed. - - **Post to Instagram:** All images can be directly posted to Instagram from the app. The order to post will be shown and the user simply has to tap the images in the correct order to post. - - - - - - - - - - - - -
Create GridsSave to GalleryPost to Instagram
- -
- - - - -* **Feed Preview** - - **Plan Instagram Feed:** Users can plan their feed by previewing how their Insta feed will look like after uploading their photos. - - **Add Images:** Users can add multiple photos from their gallery. - - **Reorder:** The images can be reordered in the grid by dragging and dropping and finalising the grid. - - **Others:** Double tapping a photo opens an enlarged zoomable popup of it. Clicking on a photo results in a Popup allowing the users to do the following: - * Schedule a post by creating a reminder to post a photo. - * Post the photo directly to Instagram. - * Save photo to local gallery. - * Delete the photo from the feed. -



-* **Reminders** - - **Scheduled:** A list of reminders for scheduled posts will be shown. Users can check their reminders for each day by selecting the corresponding date on the Calendar. - - **Update:** Option to update the reminder caption and time. - - **Delete:** Delete reminders. - - **Notifications:** The app will notify the user to post the photo based on the reminder time set. - -* **Dark Mode:** Use the app with an elegant dark theme. - - - - - - - - - - - - -
RemindersNotificationsDark Mode
- -## Screenshots -

- - - - -

-

- - - - -

+InstaSmart is a Flutter app to easily plan and beautify your Instgram feed. More details can be found [here](https://docs.google.com/document/d/1zLvbWGw6q75HyQKes5T7n6x1hmygoy8gyzssS_MPyGE/edit?usp=sharing). ## Built With * [Flutter](https://flutter.dev/) * [Firebase](https://firebase.google.com/) -* [GitHub Actions](https://github.com/features/actions) - - [Flutter actions](https://github.com/marketplace/actions/flutter-action) - - [Android Emulator Runner](https://github.com/ReactiveCircus/android-emulator-runner) ## License Distributed under the MIT License. See ```LICENSE``` for more information. diff --git a/assets/gifs/Create Grid.gif b/assets/gifs/Create Grid.gif deleted file mode 100644 index d19e6ab..0000000 Binary files a/assets/gifs/Create Grid.gif and /dev/null differ diff --git a/assets/gifs/Dark Mode.gif b/assets/gifs/Dark Mode.gif deleted file mode 100644 index f50cf5d..0000000 Binary files a/assets/gifs/Dark Mode.gif and /dev/null differ diff --git a/assets/gifs/Explore Frames.gif b/assets/gifs/Explore Frames.gif deleted file mode 100644 index d0437d7..0000000 Binary files a/assets/gifs/Explore Frames.gif and /dev/null differ diff --git a/assets/gifs/Feed Preview.gif b/assets/gifs/Feed Preview.gif deleted file mode 100644 index 0507661..0000000 Binary files a/assets/gifs/Feed Preview.gif and /dev/null differ diff --git a/assets/gifs/Notifications.gif b/assets/gifs/Notifications.gif deleted file mode 100644 index 1fd04e2..0000000 Binary files a/assets/gifs/Notifications.gif and /dev/null differ diff --git a/assets/gifs/Post Grid.gif b/assets/gifs/Post Grid.gif deleted file mode 100644 index e6b0103..0000000 Binary files a/assets/gifs/Post Grid.gif and /dev/null differ diff --git a/assets/gifs/Reminders.gif b/assets/gifs/Reminders.gif deleted file mode 100644 index 9933df3..0000000 Binary files a/assets/gifs/Reminders.gif and /dev/null differ diff --git a/assets/gifs/Save Grid.gif b/assets/gifs/Save Grid.gif deleted file mode 100644 index dc147c3..0000000 Binary files a/assets/gifs/Save Grid.gif and /dev/null differ diff --git a/assets/images/apple-logo.png b/assets/images/apple-logo.png new file mode 100644 index 0000000..6488b0f Binary files /dev/null and b/assets/images/apple-logo.png differ diff --git a/assets/screenshots/1.png b/assets/screenshots/1.png deleted file mode 100644 index 1103562..0000000 Binary files a/assets/screenshots/1.png and /dev/null differ diff --git a/assets/screenshots/2.png b/assets/screenshots/2.png deleted file mode 100644 index de3d561..0000000 Binary files a/assets/screenshots/2.png and /dev/null differ diff --git a/assets/screenshots/3.png b/assets/screenshots/3.png deleted file mode 100644 index 9fc3c4a..0000000 Binary files a/assets/screenshots/3.png and /dev/null differ diff --git a/assets/screenshots/4.png b/assets/screenshots/4.png deleted file mode 100644 index 0eba459..0000000 Binary files a/assets/screenshots/4.png and /dev/null differ diff --git a/assets/screenshots/5.jpg b/assets/screenshots/5.jpg deleted file mode 100644 index a83e0a1..0000000 Binary files a/assets/screenshots/5.jpg and /dev/null differ diff --git a/assets/screenshots/6.png b/assets/screenshots/6.png deleted file mode 100644 index cadb3ea..0000000 Binary files a/assets/screenshots/6.png and /dev/null differ diff --git a/assets/screenshots/7.png b/assets/screenshots/7.png deleted file mode 100644 index 9239b58..0000000 Binary files a/assets/screenshots/7.png and /dev/null differ diff --git a/assets/screenshots/8.png b/assets/screenshots/8.png deleted file mode 100644 index 8df8949..0000000 Binary files a/assets/screenshots/8.png and /dev/null differ diff --git a/ios/Podfile b/ios/Podfile index 1e8c3c9..252d9ec 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '9.0' +platform :ios, '9.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 04dd9b8..e5377e0 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -217,6 +217,8 @@ PODS: - AppAuth/ExternalUserAgent (= 1.4.0) - AppAuth/Core (1.4.0) - AppAuth/ExternalUserAgent (1.4.0) + - apple_sign_in (0.0.1): + - Flutter - BoringSSL-GRPC (0.0.7): - BoringSSL-GRPC/Implementation (= 0.0.7) - BoringSSL-GRPC/Interface (= 0.0.7) @@ -396,7 +398,7 @@ PODS: - image_picker (0.0.1): - Flutter - leveldb-library (1.22) - - multi_image_picker (4.7.13): + - multi_image_picker (4.7.14): - BSImagePicker (~> 2.10.3) - Flutter - nanopb (1.30905.0): @@ -419,13 +421,14 @@ PODS: - FBSDKCoreKit - FBSDKShareKit - Flutter - - sqflite (0.0.1): + - sqflite (0.0.2): - Flutter - - FMDB (~> 2.7.2) + - FMDB (>= 2.7.5) - url_launcher (0.0.1): - Flutter DEPENDENCIES: + - apple_sign_in (from `.symlinks/plugins/apple_sign_in/ios`) - cloud_firestore (from `.symlinks/plugins/cloud_firestore/ios`) - esys_flutter_share (from `.symlinks/plugins/esys_flutter_share/ios`) - firebase_analytics (from `.symlinks/plugins/firebase_analytics/ios`) @@ -480,6 +483,8 @@ SPEC REPOS: - PromisesObjC EXTERNAL SOURCES: + apple_sign_in: + :path: ".symlinks/plugins/apple_sign_in/ios" cloud_firestore: :path: ".symlinks/plugins/cloud_firestore/ios" esys_flutter_share: @@ -524,6 +529,7 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: abseil: 6c8eb7892aefa08d929b39f9bb108e5367e3228f AppAuth: 31bcec809a638d7bd2f86ea8a52bd45f6e81e7c7 + apple_sign_in: 7716c7ddfa195aeab7dec0dc374ef4ff45d1adb4 BoringSSL-GRPC: 8edf627ee524575e2f8d19d56f068b448eea3879 BSGridCollectionViewLayout: 333dcb457a5a3bdd9212607ab5756553dcfe06cb BSImagePicker: 07404254f2fcdaf5a2eb403c0f8c337267ce8738 @@ -560,7 +566,7 @@ SPEC CHECKSUMS: image_gallery_saver: 259eab68fb271cfd57d599904f7acdc7832e7ef2 image_picker: 9c3312491f862b28d21ecd8fdf0ee14e601b3f09 leveldb-library: 55d93ee664b4007aac644a782d11da33fba316f7 - multi_image_picker: fd16be811b37ab030f72bf5c1c48b3a174254d13 + multi_image_picker: c068931d08240565e0615fb01437d16984909183 nanopb: c43f40fadfe79e8b8db116583945847910cbabc9 path_provider: abfe2b5c733d04e238b0d8691db0cfd63a27a93c permission_handler: eac8e15b4a1a3fba55b761d19f3f4e6b005d15b6 @@ -569,9 +575,9 @@ SPEC CHECKSUMS: PromisesObjC: b48e0338dbbac2207e611750777895f7a5811b75 shared_preferences: af6bfa751691cdc24be3045c43ec037377ada40d social_share_plugin: f9dc03c1137b137e6efb1f3608f449c4cb153a7a - sqflite: 4001a31ff81d210346b500c55b17f4d6c7589dd0 + sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904 url_launcher: 6fef411d543ceb26efce54b05a0a40bfd74cbbef -PODFILE CHECKSUM: aafe91acc616949ddb318b77800a7f51bffa2a4c +PODFILE CHECKSUM: a75497545d4391e2d394c3668e20cfb1c2bbd4aa -COCOAPODS: 1.9.3 +COCOAPODS: 1.10.0 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 23190ff..9e353c2 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -8,13 +8,13 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 22689191CD6D354A4F19ABDA /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 475C2E182E9EE41E2A724251 /* Pods_Runner.framework */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 4CFB617A24D9456B0057A6ED /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 4CFB617924D9456B0057A6ED /* GoogleService-Info.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 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 */; }; - 9F00188DA96FCFC2868B9757 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 228AC3636CF51C4A8FF759A7 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -33,15 +33,15 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 228AC3636CF51C4A8FF759A7 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2A9C57982BFF8B466FAD49D1 /* 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 = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 475C2E182E9EE41E2A724251 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 4C8A7F86250F855300353CAE /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = ""; }; 4CFB617924D9456B0057A6ED /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; + 5A48EE5D719E144C8D7FD951 /* 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 = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 797F9A3DBCCB26F02C97219B /* 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 = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 8108A3A8B77A30DE8503C0AB /* 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 = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -49,7 +49,7 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - CFBE8A6D272572C0F303FD42 /* 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 = ""; }; + FD201F6CFFE648E81A403936 /* 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 = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -57,7 +57,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9F00188DA96FCFC2868B9757 /* Pods_Runner.framework in Frameworks */, + 22689191CD6D354A4F19ABDA /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -67,17 +67,17 @@ 0378A9801E33C5621EF4E44E /* Pods */ = { isa = PBXGroup; children = ( - CFBE8A6D272572C0F303FD42 /* Pods-Runner.debug.xcconfig */, - 2A9C57982BFF8B466FAD49D1 /* Pods-Runner.release.xcconfig */, - 8108A3A8B77A30DE8503C0AB /* Pods-Runner.profile.xcconfig */, + 5A48EE5D719E144C8D7FD951 /* Pods-Runner.debug.xcconfig */, + 797F9A3DBCCB26F02C97219B /* Pods-Runner.release.xcconfig */, + FD201F6CFFE648E81A403936 /* Pods-Runner.profile.xcconfig */, ); path = Pods; sourceTree = ""; }; - 17664982863B076A71DDA98A /* Frameworks */ = { + 36F9BC38FC23B1DB5F8D46BB /* Frameworks */ = { isa = PBXGroup; children = ( - 228AC3636CF51C4A8FF759A7 /* Pods_Runner.framework */, + 475C2E182E9EE41E2A724251 /* Pods_Runner.framework */, ); name = Frameworks; sourceTree = ""; @@ -100,7 +100,7 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 0378A9801E33C5621EF4E44E /* Pods */, - 17664982863B076A71DDA98A /* Frameworks */, + 36F9BC38FC23B1DB5F8D46BB /* Frameworks */, ); sourceTree = ""; }; @@ -144,15 +144,15 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E0C2663EB7E7DEEFAC1DF010 /* [CP] Check Pods Manifest.lock */, + 9641BC2DCEA66BC7EF97CC84 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - EB90A2173796AD688CEAFE90 /* [CP] Embed Pods Frameworks */, - B5657B44C3D0BE2A5567A258 /* [CP] Copy Pods Resources */, + 07A2B0E22F3E671C5C983547 /* [CP] Embed Pods Frameworks */, + 0CFE5F16EBCB4BE09C114A93 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -212,52 +212,55 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 07A2B0E22F3E671C5C983547 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputPaths = ( + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Thin Binary"; - outputPaths = ( + 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 = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 0CFE5F16EBCB4BE09C114A93 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputPaths = ( + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Run Script"; - outputPaths = ( + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + showEnvVarsInLog = 0; }; - B5657B44C3D0BE2A5567A258 /* [CP] Copy Pods Resources */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + name = "Thin Binary"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - E0C2663EB7E7DEEFAC1DF010 /* [CP] Check Pods Manifest.lock */ = { + 9641BC2DCEA66BC7EF97CC84 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -279,22 +282,19 @@ 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; }; - EB90A2173796AD688CEAFE90 /* [CP] Embed Pods Frameworks */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + inputPaths = ( ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + name = "Run Script"; + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build\n"; }; /* End PBXShellScriptBuildPhase section */ @@ -387,7 +387,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 3; + CURRENT_PROJECT_VERSION = 4; DEVELOPMENT_TEAM = 3S8V47FRYJ; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -395,6 +395,7 @@ "$(PROJECT_DIR)/Flutter", ); INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -526,7 +527,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 3; + CURRENT_PROJECT_VERSION = 4; DEVELOPMENT_TEAM = 3S8V47FRYJ; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -534,6 +535,7 @@ "$(PROJECT_DIR)/Flutter", ); INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -559,7 +561,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 3; + CURRENT_PROJECT_VERSION = 4; DEVELOPMENT_TEAM = 3S8V47FRYJ; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -567,6 +569,7 @@ "$(PROJECT_DIR)/Flutter", ); INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", diff --git a/ios/Runner/Runner.entitlements b/ios/Runner/Runner.entitlements index 903def2..80b5221 100644 --- a/ios/Runner/Runner.entitlements +++ b/ios/Runner/Runner.entitlements @@ -4,5 +4,9 @@ aps-environment development + com.apple.developer.applesignin + + Default + diff --git a/lib/components/frame_widget.dart b/lib/components/frame_widget.dart index 1a94076..6b808eb 100644 --- a/lib/components/frame_widget.dart +++ b/lib/components/frame_widget.dart @@ -212,5 +212,3 @@ class _FrameWidgetState extends State { ); } } - -//TODO: add categories - minimalist, floral, food, landscape, youthful diff --git a/lib/main.dart b/lib/main.dart index ff5272c..e08fabe 100755 --- a/lib/main.dart +++ b/lib/main.dart @@ -17,6 +17,7 @@ import 'package:instasmart/screens/login_screen/login_screen.dart'; import 'package:instasmart/screens/onboarding_screen/onboarding_end_screen.dart'; import 'package:instasmart/screens/onboarding_screen/onboarding_screen.dart'; import 'package:instasmart/screens/preview_screen/preview_screen.dart'; +import 'package:instasmart/services/AppleFunctions.dart'; import 'package:instasmart/utils/helper.dart'; import 'package:provider/provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; @@ -25,8 +26,11 @@ import 'services/login_functions.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); + final appleSignInAvailable = await AppleSignInAvailable.check(); final savedThemeMode = await AdaptiveTheme.getThemeMode(); - runApp(MyApp(savedThemeMode: savedThemeMode)); + runApp(Provider.value( + value: appleSignInAvailable, + child: MyApp(savedThemeMode: savedThemeMode))); } class MyApp extends StatefulWidget { diff --git a/lib/screens/calendar_screen/calendar_screen.dart b/lib/screens/calendar_screen/calendar_screen.dart index adc195f..4add2d1 100644 --- a/lib/screens/calendar_screen/calendar_screen.dart +++ b/lib/screens/calendar_screen/calendar_screen.dart @@ -52,7 +52,7 @@ class _CalendarScreenState extends State super.dispose(); } - void _onDaySelected(DateTime day, List events) { + void _onDaySelected(DateTime day, List events, List holidays) { setState(() { _selectedEvents = events; }); diff --git a/lib/screens/login_screen/login_screen.dart b/lib/screens/login_screen/login_screen.dart index d4f37f7..0316dc0 100644 --- a/lib/screens/login_screen/login_screen.dart +++ b/lib/screens/login_screen/login_screen.dart @@ -2,6 +2,8 @@ import 'dart:async'; // Flutter imports: +import 'package:apple_sign_in/apple_sign_in_button.dart' as apple; +import 'package:apple_sign_in/scope.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; @@ -10,9 +12,11 @@ import 'package:flutter/services.dart'; import 'package:instasmart/constants.dart'; import 'package:instasmart/main.dart'; import 'package:instasmart/models/user.dart'; +import 'package:instasmart/services/AppleFunctions.dart'; import 'package:instasmart/services/login_functions.dart'; import 'package:instasmart/test_driver/Keys.dart'; import 'package:instasmart/utils/helper.dart'; +import 'package:provider/provider.dart'; import '../HomeScreen.dart'; class LoginScreen extends StatefulWidget { @@ -32,6 +36,8 @@ class _LoginScreen extends State { @override Widget build(BuildContext context) { + final appleSignInAvailable = + Provider.of(context, listen: false); return Scaffold( appBar: AppBar( backgroundColor: Colors.transparent, @@ -214,6 +220,29 @@ class _LoginScreen extends State { ), ), ), + if (appleSignInAvailable.isAvailable) + Padding( + padding: const EdgeInsets.only( + right: 40.0, left: 40.0, bottom: 20), + child: apple.AppleSignInButton( + style: apple.ButtonStyle.black, // style as needed + type: apple.ButtonType.signIn, // style as needed + onPressed: () async { + print('apple sign in pressed'); + FirebaseLoginFunctions().signInWithApple(scopes: [ + Scope.email, + Scope.fullName + ]).whenComplete(() async { + print("Apple sign in complete"); //reaches here + User user = + await FirebaseLoginFunctions().currentUser(); + print("user found"); //doesnt print this + pushAndRemoveUntil( + context, HomeScreen(user: user), false); + }); + }, + ), + ), ], ), ), diff --git a/lib/screens/preview_screen/components/bottom_sheet_options.dart b/lib/screens/preview_screen/components/bottom_sheet_options.dart index 3143e06..87d8ed7 100644 --- a/lib/screens/preview_screen/components/bottom_sheet_options.dart +++ b/lib/screens/preview_screen/components/bottom_sheet_options.dart @@ -33,7 +33,7 @@ class BottomSheetOptions extends StatelessWidget { @override Widget build(BuildContext context) { return Container( - height: SizeConfig.safeBlockVertical * 75, + height: SizeConfig.safeBlockVertical * 70, decoration: new BoxDecoration( color: Theme.of(context).scaffoldBackgroundColor, borderRadius: new BorderRadius.only( diff --git a/lib/screens/reminder_screen/reminder_create_form.dart b/lib/screens/reminder_screen/reminder_create_form.dart index becf3ac..9654ea4 100644 --- a/lib/screens/reminder_screen/reminder_create_form.dart +++ b/lib/screens/reminder_screen/reminder_create_form.dart @@ -48,7 +48,7 @@ class ReminderFormState extends State { FormBuilder( // context, key: _fbKey, - autovalidate: true, + autovalidateMode: AutovalidateMode.always, readOnly: false, child: Column( children: [ diff --git a/lib/screens/reminder_screen/reminder_modify_form.dart b/lib/screens/reminder_screen/reminder_modify_form.dart index d4219f8..43bde97 100644 --- a/lib/screens/reminder_screen/reminder_modify_form.dart +++ b/lib/screens/reminder_screen/reminder_modify_form.dart @@ -46,7 +46,7 @@ class ReminderFormState extends State { FormBuilder( // context, key: _fbKey, - autovalidate: true, + autovalidateMode: AutovalidateMode.always, readOnly: false, child: Column( children: [ diff --git a/lib/services/AppleFunctions.dart b/lib/services/AppleFunctions.dart new file mode 100644 index 0000000..24b8f46 --- /dev/null +++ b/lib/services/AppleFunctions.dart @@ -0,0 +1,16 @@ +import 'package:apple_sign_in/apple_sign_in.dart'; +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:flutter/services.dart'; +import 'package:instasmart/models/user.dart'; + +class AppleSignInAvailable { + AppleSignInAvailable(this.isAvailable); + final bool isAvailable; + + static Future check() async { + return AppleSignInAvailable(await AppleSignIn.isAvailable().then((value) { + print("apple sign in? " + value.toString()); + return value; + })); + } +} diff --git a/lib/services/frames_firebase_functions.dart b/lib/services/frames_firebase_functions.dart index 1a471ec..fd48d6c 100644 --- a/lib/services/frames_firebase_functions.dart +++ b/lib/services/frames_firebase_functions.dart @@ -145,11 +145,8 @@ class FramesFirebaseFunctions { for (Frame el in origList) { if (el.category == category) { filteredFrameList.add(el); - // print('filtered list img is: ' + - // el.lowResUrl + - // '\nwith imgId: ' + - // el.imgID + - // ' and numLikes: '); +// print('filterframe printing'); +// print(el.category); } } } diff --git a/lib/services/login_functions.dart b/lib/services/login_functions.dart index 15b857f..6837bae 100644 --- a/lib/services/login_functions.dart +++ b/lib/services/login_functions.dart @@ -7,6 +7,7 @@ import 'package:google_sign_in/google_sign_in.dart'; import 'package:instasmart/constants.dart'; import 'package:instasmart/main.dart'; import 'package:instasmart/models/user.dart'; +import 'package:apple_sign_in/apple_sign_in.dart'; class FirebaseLoginFunctions extends ChangeNotifier { final auth = FirebaseAuth.instance; @@ -180,4 +181,85 @@ class FirebaseLoginFunctions extends ChangeNotifier { print("User Sign Out"); } + + Future signInWithApple({List scopes = const []}) async { + // 1. perform the sign-in request + print("signInWithAppleCalled"); //this prints + final result = await AppleSignIn.performRequests([ + AppleIdRequest(requestedScopes: [Scope.email, Scope.fullName]) + ]); + // 2. check the result + switch (result.status) { + case AuthorizationStatus.authorized: + final appleIdCredential = result.credential; + final oAuthProvider = OAuthProvider(providerId: "apple.com"); + final credential = oAuthProvider.getCredential( + idToken: String.fromCharCodes(appleIdCredential.identityToken), + accessToken: + String.fromCharCodes(appleIdCredential.authorizationCode), + ); + print("Apple: authorized credentials"); + final authResult = await auth.signInWithCredential(credential); + final user = authResult.user; + print(user.uid); + assert(!user.isAnonymous); + assert(await user.getIdToken() != null); + + final FirebaseUser currUser = await auth.currentUser(); + assert(user.uid == currUser.uid); + print('currUser is: '); + print(currUser); + + try { + print("Apple: Trying to create user"); + User user = User( + email: currUser.email, + firstName: currUser.displayName, + uid: currUser.uid, + active: true, + lastName: ' ', + ); + print('user login data is:'); + print(user.toJson()); + Map userImMap = {'user_images': ''}; + Map finalMap = user.toJson(); + finalMap.addAll(userImMap); + bool userExists; + await db + .collection(Constants.USERS) + .document(currUser.uid) + .get() + .then((value) { + userExists = value.exists; + }); + if (!userExists) { + await db + .collection(Constants.USERS) + .document(currUser.uid) + .setData(finalMap); + MyAppState.currentUser = user; + } else { + currentUser().then((value) { + MyAppState.currentUser = value; + }); + } + } catch (e) { + print('error in setting apple sign in data' + e.toString()); + } + return 'signInWithApple succeeded: $user'; + case AuthorizationStatus.error: + throw PlatformException( + code: 'ERROR_AUTHORIZATION_DENIED', + message: result.error.toString(), + ); + + case AuthorizationStatus.cancelled: + throw PlatformException( + code: 'ERROR_ABORTED_BY_USER', + message: 'Sign in aborted by user', + ); + default: + throw UnimplementedError(); + } + } } diff --git a/pubspec.lock b/pubspec.lock index 228cff8..6b27589 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -7,21 +7,28 @@ packages: name: _fe_analyzer_shared url: "https://pub.dartlang.org" source: hosted - version: "7.0.0" + version: "12.0.0" adaptive_theme: dependency: "direct main" description: name: adaptive_theme url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.1.0" analyzer: dependency: transitive description: name: analyzer url: "https://pub.dartlang.org" source: hosted - version: "0.39.17" + version: "0.40.6" + apple_sign_in: + dependency: "direct main" + description: + name: apple_sign_in + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.0" archive: dependency: transitive description: @@ -49,49 +56,70 @@ packages: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.4.2" + version: "2.5.0-nullsafety.3" basic_utils: dependency: transitive description: name: basic_utils url: "https://pub.dartlang.org" source: hosted - version: "2.6.2" + version: "2.6.3" boolean_selector: dependency: transitive description: name: boolean_selector url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.1.0-nullsafety.3" bottom_navy_bar: dependency: "direct main" description: name: bottom_navy_bar url: "https://pub.dartlang.org" source: hosted - version: "5.5.0" + version: "5.6.0" + build: + dependency: transitive + description: + name: build + url: "https://pub.dartlang.org" + source: hosted + version: "1.6.0" + built_collection: + dependency: transitive + description: + name: built_collection + url: "https://pub.dartlang.org" + source: hosted + version: "4.3.2" + built_value: + dependency: transitive + description: + name: built_value + url: "https://pub.dartlang.org" + source: hosted + version: "7.1.0" cached_network_image: dependency: "direct main" description: name: cached_network_image url: "https://pub.dartlang.org" source: hosted - version: "2.2.0+1" + version: "2.5.0" characters: dependency: transitive description: name: characters url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.1.0-nullsafety.5" charcode: dependency: transitive description: name: charcode url: "https://pub.dartlang.org" source: hosted - version: "1.1.3" + version: "1.2.0-nullsafety.3" cli_util: dependency: transitive description: @@ -105,7 +133,7 @@ packages: name: clock url: "https://pub.dartlang.org" source: hosted - version: "1.0.1" + version: "1.1.0-nullsafety.3" cloud_firestore: dependency: "direct main" description: @@ -119,7 +147,7 @@ packages: name: cloud_firestore_mocks url: "https://pub.dartlang.org" source: hosted - version: "0.4.6+1" + version: "0.4.7" cloud_firestore_platform_interface: dependency: transitive description: @@ -134,13 +162,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.1.1+2" + code_builder: + dependency: transitive + description: + name: code_builder + url: "https://pub.dartlang.org" + source: hosted + version: "3.5.0" collection: dependency: transitive description: name: collection url: "https://pub.dartlang.org" source: hosted - version: "1.14.13" + version: "1.15.0-nullsafety.5" color: dependency: transitive description: @@ -175,7 +210,7 @@ packages: name: coverage url: "https://pub.dartlang.org" source: hosted - version: "0.14.0" + version: "0.14.2" crypto: dependency: transitive description: @@ -183,13 +218,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.5" - csslib: - dependency: transitive - description: - name: csslib - url: "https://pub.dartlang.org" - source: hosted - version: "0.16.2" cupertino_icons: dependency: "direct main" description: @@ -197,6 +225,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.1.3" + dart_style: + dependency: transitive + description: + name: dart_style + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.10" date_range_picker: dependency: transitive description: @@ -224,21 +259,28 @@ packages: name: fake_async url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.2.0-nullsafety.3" + ffi: + dependency: transitive + description: + name: ffi + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.3" file: dependency: transitive description: name: file url: "https://pub.dartlang.org" source: hosted - version: "5.2.1" + version: "6.0.0-nullsafety.4" firebase: dependency: transitive description: name: firebase url: "https://pub.dartlang.org" source: hosted - version: "7.3.0" + version: "7.3.3" firebase_analytics: dependency: "direct main" description: @@ -323,6 +365,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.1.0" + fixnum: + dependency: transitive + description: + name: fixnum + url: "https://pub.dartlang.org" + source: hosted + version: "0.10.11" flushbar: dependency: "direct main" description: @@ -335,20 +384,27 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_blurhash: + dependency: transitive + description: + name: flutter_blurhash + url: "https://pub.dartlang.org" + source: hosted + version: "0.5.0" flutter_cache_manager: dependency: transitive description: name: flutter_cache_manager url: "https://pub.dartlang.org" source: hosted - version: "1.4.1" + version: "2.1.0" flutter_chips_input: dependency: transitive description: name: flutter_chips_input url: "https://pub.dartlang.org" source: hosted - version: "1.9.1" + version: "1.9.5" flutter_colorpicker: dependency: transitive description: @@ -367,14 +423,28 @@ packages: name: flutter_form_builder url: "https://pub.dartlang.org" source: hosted - version: "3.13.2" + version: "3.14.1" flutter_keyboard_visibility: dependency: transitive description: name: flutter_keyboard_visibility url: "https://pub.dartlang.org" source: hosted - version: "3.2.1" + version: "4.0.2" + flutter_keyboard_visibility_platform_interface: + dependency: transitive + description: + name: flutter_keyboard_visibility_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + flutter_keyboard_visibility_web: + dependency: transitive + description: + name: flutter_keyboard_visibility_web + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" flutter_launcher_icons: dependency: "direct dev" description: @@ -388,7 +458,7 @@ packages: name: flutter_local_notifications url: "https://pub.dartlang.org" source: hosted - version: "1.4.4+3" + version: "1.5.0+1" flutter_local_notifications_platform_interface: dependency: transitive description: @@ -416,7 +486,7 @@ packages: name: flutter_plugin_android_lifecycle url: "https://pub.dartlang.org" source: hosted - version: "1.0.8" + version: "1.0.11" flutter_spinkit: dependency: "direct main" description: @@ -442,7 +512,7 @@ packages: name: flutter_typeahead url: "https://pub.dartlang.org" source: hosted - version: "1.8.7" + version: "1.9.1" flutter_web_plugins: dependency: transitive description: flutter @@ -454,7 +524,7 @@ packages: name: font_awesome_flutter url: "https://pub.dartlang.org" source: hosted - version: "8.8.1" + version: "8.11.0" fuchsia_remote_debug_protocol: dependency: transitive description: flutter @@ -473,7 +543,7 @@ packages: name: google_sign_in url: "https://pub.dartlang.org" source: hosted - version: "4.5.1" + version: "4.5.6" google_sign_in_mocks: dependency: "direct main" description: @@ -494,14 +564,7 @@ packages: name: google_sign_in_web url: "https://pub.dartlang.org" source: hosted - version: "0.9.1+1" - html: - dependency: transitive - description: - name: html - url: "https://pub.dartlang.org" - source: hosted - version: "0.14.0+3" + version: "0.9.2" http: dependency: "direct main" description: @@ -529,42 +592,42 @@ packages: name: image url: "https://pub.dartlang.org" source: hosted - version: "2.1.14" + version: "2.1.19" image_gallery_saver: dependency: "direct main" description: name: image_gallery_saver url: "https://pub.dartlang.org" source: hosted - version: "1.5.0" + version: "1.6.7" image_picker: dependency: transitive description: name: image_picker url: "https://pub.dartlang.org" source: hosted - version: "0.6.7+4" + version: "0.6.7+17" image_picker_for_web: dependency: transitive description: name: image_picker_for_web url: "https://pub.dartlang.org" source: hosted - version: "0.1.0+1" + version: "0.1.0+2" image_picker_platform_interface: dependency: transitive description: name: image_picker_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.1.1" import_sorter: dependency: "direct dev" description: name: import_sorter url: "https://pub.dartlang.org" source: hosted - version: "4.2.1" + version: "4.4.1" intl: dependency: transitive description: @@ -585,7 +648,7 @@ packages: name: js url: "https://pub.dartlang.org" source: hosted - version: "0.6.2" + version: "0.6.3-nullsafety.3" json_annotation: dependency: transitive description: @@ -599,7 +662,7 @@ packages: name: json_rpc_2 url: "https://pub.dartlang.org" source: hosted - version: "2.2.1" + version: "2.2.2" logging: dependency: transitive description: @@ -613,14 +676,14 @@ packages: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.8" + version: "0.12.10-nullsafety.3" meta: dependency: transitive description: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.1.8" + version: "1.3.0-nullsafety.6" mime: dependency: transitive description: @@ -634,7 +697,7 @@ packages: name: mockito url: "https://pub.dartlang.org" source: hosted - version: "4.1.1" + version: "4.1.3" modal_bottom_sheet: dependency: "direct main" description: @@ -648,7 +711,7 @@ packages: name: multi_image_picker url: "https://pub.dartlang.org" source: hosted - version: "4.7.10" + version: "4.7.14" nested: dependency: transitive description: @@ -669,7 +732,7 @@ packages: name: node_interop url: "https://pub.dartlang.org" source: hosted - version: "1.1.1" + version: "1.2.1" node_io: dependency: transitive description: @@ -684,6 +747,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.4.12" + octo_image: + dependency: transitive + description: + name: octo_image + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.0" package_config: dependency: transitive description: @@ -697,21 +767,21 @@ packages: name: page_view_indicators url: "https://pub.dartlang.org" source: hosted - version: "1.3.1" + version: "1.4.0" path: dependency: transitive description: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.7.0" + version: "1.8.0-nullsafety.3" path_provider: dependency: "direct main" description: name: path_provider url: "https://pub.dartlang.org" source: hosted - version: "1.6.11" + version: "1.6.24" path_provider_linux: dependency: transitive description: @@ -725,21 +795,28 @@ packages: name: path_provider_macos url: "https://pub.dartlang.org" source: hosted - version: "0.0.4+3" + version: "0.0.4+6" path_provider_platform_interface: dependency: transitive description: name: path_provider_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "1.0.2" + version: "1.0.4" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.4+3" pedantic: dependency: transitive description: name: pedantic url: "https://pub.dartlang.org" source: hosted - version: "1.9.0" + version: "1.10.0-nullsafety.3" permission_handler: dependency: "direct main" description: @@ -760,14 +837,14 @@ packages: name: petitparser url: "https://pub.dartlang.org" source: hosted - version: "3.0.4" + version: "3.1.0" phone_number: dependency: transitive description: name: phone_number url: "https://pub.dartlang.org" source: hosted - version: "0.6.2+4" + version: "0.6.3" photo_view: dependency: "direct main" description: @@ -781,21 +858,14 @@ packages: name: platform url: "https://pub.dartlang.org" source: hosted - version: "2.2.1" - platform_detect: - dependency: transitive - description: - name: platform_detect - url: "https://pub.dartlang.org" - source: hosted - version: "1.4.0" + version: "3.0.0-nullsafety.4" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "1.0.2" + version: "1.0.3" pointycastle: dependency: transitive description: @@ -809,7 +879,7 @@ packages: name: pool url: "https://pub.dartlang.org" source: hosted - version: "1.4.0" + version: "1.5.0-nullsafety.3" popup_menu: dependency: "direct main" description: @@ -823,7 +893,7 @@ packages: name: process url: "https://pub.dartlang.org" source: hosted - version: "3.0.13" + version: "4.0.0-nullsafety.4" progress_dialog: dependency: "direct main" description: @@ -844,7 +914,7 @@ packages: name: provider url: "https://pub.dartlang.org" source: hosted - version: "4.3.2" + version: "4.3.2+3" pub_semver: dependency: transitive description: @@ -858,7 +928,7 @@ packages: name: quiver url: "https://pub.dartlang.org" source: hosted - version: "2.1.3" + version: "2.1.5" random_string: dependency: transitive description: @@ -886,7 +956,7 @@ packages: name: rxdart url: "https://pub.dartlang.org" source: hosted - version: "0.24.1" + version: "0.25.0" settings_ui: dependency: "direct main" description: @@ -900,21 +970,21 @@ packages: name: shared_preferences url: "https://pub.dartlang.org" source: hosted - version: "0.5.8" + version: "0.5.12+4" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux url: "https://pub.dartlang.org" source: hosted - version: "0.0.2+1" + version: "0.0.2+4" shared_preferences_macos: dependency: transitive description: name: shared_preferences_macos url: "https://pub.dartlang.org" source: hosted - version: "0.0.1+10" + version: "0.0.1+11" shared_preferences_platform_interface: dependency: transitive description: @@ -929,6 +999,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.1.2+7" + shared_preferences_windows: + dependency: transitive + description: + name: shared_preferences_windows + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.1+3" shelf: dependency: transitive description: @@ -949,7 +1026,7 @@ packages: name: shelf_static url: "https://pub.dartlang.org" source: hosted - version: "0.2.8" + version: "0.2.9+1" shelf_web_socket: dependency: transitive description: @@ -963,7 +1040,7 @@ packages: name: shimmer url: "https://pub.dartlang.org" source: hosted - version: "1.1.1" + version: "1.1.2" signature: dependency: transitive description: @@ -977,7 +1054,7 @@ packages: name: simple_gesture_detector url: "https://pub.dartlang.org" source: hosted - version: "0.1.4" + version: "0.1.6" sky_engine: dependency: transitive description: flutter @@ -990,34 +1067,41 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.3.1+1" + source_gen: + dependency: transitive + description: + name: source_gen + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.10+1" source_map_stack_trace: dependency: transitive description: name: source_map_stack_trace url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.1.0-nullsafety.4" source_maps: dependency: transitive description: name: source_maps url: "https://pub.dartlang.org" source: hosted - version: "0.10.9" + version: "0.10.10-nullsafety.3" source_span: dependency: transitive description: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.7.0" + version: "1.8.0-nullsafety.4" sqflite: dependency: transitive description: name: sqflite url: "https://pub.dartlang.org" source: hosted - version: "1.3.1" + version: "1.3.2+1" sqflite_common: dependency: transitive description: @@ -1031,21 +1115,21 @@ packages: name: stack_trace url: "https://pub.dartlang.org" source: hosted - version: "1.9.5" + version: "1.10.0-nullsafety.6" stream_channel: dependency: transitive description: name: stream_channel url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.1.0-nullsafety.3" string_scanner: dependency: transitive description: name: string_scanner url: "https://pub.dartlang.org" source: hosted - version: "1.0.5" + version: "1.1.0-nullsafety.3" sync_http: dependency: transitive description: @@ -1066,35 +1150,35 @@ packages: name: table_calendar url: "https://pub.dartlang.org" source: hosted - version: "2.2.3" + version: "2.3.3" term_glyph: dependency: transitive description: name: term_glyph url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.2.0-nullsafety.3" test: dependency: "direct dev" description: name: test url: "https://pub.dartlang.org" source: hosted - version: "1.15.2" + version: "1.16.0-nullsafety.13" test_api: dependency: transitive description: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.17" + version: "0.2.19-nullsafety.6" test_core: dependency: transitive description: name: test_core url: "https://pub.dartlang.org" source: hosted - version: "0.3.10" + version: "0.3.12-nullsafety.12" transformer_page_view: dependency: transitive description: @@ -1108,49 +1192,56 @@ packages: name: typed_data url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" + version: "1.3.0-nullsafety.5" url_launcher: dependency: "direct main" description: name: url_launcher url: "https://pub.dartlang.org" source: hosted - version: "5.5.0" + version: "5.7.10" url_launcher_linux: dependency: transitive description: name: url_launcher_linux url: "https://pub.dartlang.org" source: hosted - version: "0.0.1+1" + version: "0.0.1+4" url_launcher_macos: dependency: transitive description: name: url_launcher_macos url: "https://pub.dartlang.org" source: hosted - version: "0.0.1+7" + version: "0.0.1+9" url_launcher_platform_interface: dependency: transitive description: name: url_launcher_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "1.0.7" + version: "1.0.9" url_launcher_web: dependency: transitive description: name: url_launcher_web url: "https://pub.dartlang.org" source: hosted - version: "0.1.2+1" + version: "0.1.5+1" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.1+3" uuid: dependency: transitive description: name: uuid url: "https://pub.dartlang.org" source: hosted - version: "2.2.0" + version: "2.2.2" validators: dependency: transitive description: @@ -1164,28 +1255,21 @@ packages: name: vector_math url: "https://pub.dartlang.org" source: hosted - version: "2.0.8" + version: "2.1.0-nullsafety.5" vin_decoder: dependency: transitive description: name: vin_decoder url: "https://pub.dartlang.org" source: hosted - version: "0.1.2" + version: "0.1.3" vm_service: dependency: transitive description: name: vm_service url: "https://pub.dartlang.org" source: hosted - version: "4.2.0" - vm_service_client: - dependency: transitive - description: - name: vm_service_client - url: "https://pub.dartlang.org" - source: hosted - version: "0.2.6+2" + version: "5.2.0" watcher: dependency: transitive description: @@ -1213,21 +1297,28 @@ packages: name: webkit_inspection_protocol url: "https://pub.dartlang.org" source: hosted - version: "0.7.3" + version: "0.7.4" + win32: + dependency: transitive + description: + name: win32 + url: "https://pub.dartlang.org" + source: hosted + version: "1.7.4" xdg_directories: dependency: transitive description: name: xdg_directories url: "https://pub.dartlang.org" source: hosted - version: "0.1.0" + version: "0.1.2" xml: dependency: transitive description: name: xml url: "https://pub.dartlang.org" source: hosted - version: "4.2.0" + version: "4.5.1" yaml: dependency: transitive description: @@ -1236,5 +1327,5 @@ packages: source: hosted version: "2.2.1" sdks: - dart: ">=2.9.0-14.0.dev <3.0.0" - flutter: ">=1.16.0 <2.0.0" + dart: ">=2.12.0-0.0 <3.0.0" + flutter: ">=1.22.2 <2.0.0" diff --git a/pubspec.yaml b/pubspec.yaml index 6fee1ba..c391bd3 100755 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -21,11 +21,11 @@ dependencies: cloud_firestore: ^0.13.7 bottom_navy_bar: ^5.4.0 firebase_storage: ^3.1.5 - multi_image_picker: ^4.7.10 + multi_image_picker: ^4.7.14 reorderables: ^0.3.2 table_calendar: ^2.2.3 path_provider: ^1.6.9 - provider: ^4.1.2 + provider: ^4.3.2+2 flutter_form_builder: ^3.13.2 shared_preferences: ^0.5.7+3 cached_network_image: ^2.2.0+1 @@ -54,6 +54,8 @@ dependencies: url_launcher: ^5.5.0 permission_handler: ^5.0.1+1 flushbar: ^1.10.4 + apple_sign_in: ^0.1.0 + dev_dependencies: