From 372daa06c23e97ea22646aecb2623b82f6c4ce59 Mon Sep 17 00:00:00 2001 From: Ryan Radloff <31903875+ryan-radloff@users.noreply.github.com> Date: Sun, 30 Jan 2022 11:22:58 -0600 Subject: [PATCH] Final Implementation (#2) * Initial commit with boilerplate * List saving * Messing around with adding to the list view * Fixed add functionality with future hacks B) * Added custom list view object * Fixed bug with keeping track of status and removed race condition. Also added delete * Added video functionality * Merged Kunal add task * Added server capabilities * Color scheme changes and other small things --- compulse/.gitignore | 46 ++ compulse/.metadata | 10 + compulse/README.md | 16 + compulse/analysis_options.yaml | 29 ++ compulse/android/.gitignore | 13 + compulse/android/app/build.gradle | 68 +++ .../android/app/src/debug/AndroidManifest.xml | 9 + .../android/app/src/main/AndroidManifest.xml | 36 ++ .../com/example/compulse/MainActivity.kt | 6 + .../res/drawable-v21/launch_background.xml | 12 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../main/res/mipmap-hdpi/launcher_icon.png | Bin 0 -> 1758 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../main/res/mipmap-mdpi/launcher_icon.png | Bin 0 -> 1158 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xhdpi/launcher_icon.png | Bin 0 -> 2281 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxhdpi/launcher_icon.png | Bin 0 -> 3444 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../main/res/mipmap-xxxhdpi/launcher_icon.png | Bin 0 -> 4763 bytes .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/styles.xml | 18 + .../app/src/profile/AndroidManifest.xml | 9 + compulse/android/build.gradle | 31 ++ compulse/android/gradle.properties | 3 + .../gradle/wrapper/gradle-wrapper.properties | 6 + compulse/android/settings.gradle | 11 + compulse/assets/banner.png | Bin 0 -> 6222 bytes compulse/assets/favicon.png | Bin 0 -> 7357 bytes compulse/ios/.gitignore | 34 ++ compulse/ios/Flutter/AppFrameworkInfo.plist | 26 + compulse/ios/Flutter/Debug.xcconfig | 1 + compulse/ios/Flutter/Release.xcconfig | 1 + compulse/ios/Runner.xcodeproj/project.pbxproj | 481 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 87 ++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + compulse/ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 +++++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 59266 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 491 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 950 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 1434 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 689 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 1369 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 2047 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 950 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 1897 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 2840 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 2840 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 4392 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 1812 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 3619 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 4006 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/README.md | 5 + .../Runner/Base.lproj/LaunchScreen.storyboard | 37 ++ .../ios/Runner/Base.lproj/Main.storyboard | 26 + compulse/ios/Runner/Info.plist | 47 ++ compulse/ios/Runner/Runner-Bridging-Header.h | 1 + compulse/lib/banner.png | Bin 0 -> 6222 bytes compulse/lib/fileHandler.dart | 34 ++ compulse/lib/getVideo.dart | 15 + compulse/lib/login.dart | 86 ++++ compulse/lib/main.dart | 168 ++++++ compulse/lib/newItemPage.dart | 79 +++ compulse/lib/serviceCalls.dart | 60 +++ compulse/lib/statusTile.dart | 155 ++++++ compulse/lib/videoScreen.dart | 56 ++ compulse/pubspec.lock | 467 +++++++++++++++++ compulse/pubspec.yaml | 99 ++++ compulse/test/widget_test.dart | 30 ++ compulse/web/icons/Icon-192.png | Bin 0 -> 5292 bytes compulse/web/icons/Icon-512.png | Bin 0 -> 8252 bytes compulse/web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes compulse/web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes compulse/web/index.html | 104 ++++ compulse/web/manifest.json | 35 ++ 86 files changed, 2691 insertions(+) create mode 100644 compulse/.gitignore create mode 100644 compulse/.metadata create mode 100644 compulse/README.md create mode 100644 compulse/analysis_options.yaml create mode 100644 compulse/android/.gitignore create mode 100644 compulse/android/app/build.gradle create mode 100644 compulse/android/app/src/debug/AndroidManifest.xml create mode 100644 compulse/android/app/src/main/AndroidManifest.xml create mode 100644 compulse/android/app/src/main/kotlin/com/example/compulse/MainActivity.kt create mode 100644 compulse/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 compulse/android/app/src/main/res/drawable/launch_background.xml create mode 100644 compulse/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 compulse/android/app/src/main/res/mipmap-hdpi/launcher_icon.png create mode 100644 compulse/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 compulse/android/app/src/main/res/mipmap-mdpi/launcher_icon.png create mode 100644 compulse/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 compulse/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png create mode 100644 compulse/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 compulse/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png create mode 100644 compulse/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 compulse/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png create mode 100644 compulse/android/app/src/main/res/values-night/styles.xml create mode 100644 compulse/android/app/src/main/res/values/styles.xml create mode 100644 compulse/android/app/src/profile/AndroidManifest.xml create mode 100644 compulse/android/build.gradle create mode 100644 compulse/android/gradle.properties create mode 100644 compulse/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 compulse/android/settings.gradle create mode 100644 compulse/assets/banner.png create mode 100644 compulse/assets/favicon.png create mode 100644 compulse/ios/.gitignore create mode 100644 compulse/ios/Flutter/AppFrameworkInfo.plist create mode 100644 compulse/ios/Flutter/Debug.xcconfig create mode 100644 compulse/ios/Flutter/Release.xcconfig create mode 100644 compulse/ios/Runner.xcodeproj/project.pbxproj create mode 100644 compulse/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 compulse/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 compulse/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 compulse/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 compulse/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 compulse/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 compulse/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 compulse/ios/Runner/AppDelegate.swift create mode 100644 compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 compulse/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 compulse/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 compulse/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 compulse/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 compulse/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 compulse/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 compulse/ios/Runner/Base.lproj/Main.storyboard create mode 100644 compulse/ios/Runner/Info.plist create mode 100644 compulse/ios/Runner/Runner-Bridging-Header.h create mode 100644 compulse/lib/banner.png create mode 100644 compulse/lib/fileHandler.dart create mode 100644 compulse/lib/getVideo.dart create mode 100644 compulse/lib/login.dart create mode 100644 compulse/lib/main.dart create mode 100644 compulse/lib/newItemPage.dart create mode 100644 compulse/lib/serviceCalls.dart create mode 100644 compulse/lib/statusTile.dart create mode 100644 compulse/lib/videoScreen.dart create mode 100644 compulse/pubspec.lock create mode 100644 compulse/pubspec.yaml create mode 100644 compulse/test/widget_test.dart create mode 100644 compulse/web/icons/Icon-192.png create mode 100644 compulse/web/icons/Icon-512.png create mode 100644 compulse/web/icons/Icon-maskable-192.png create mode 100644 compulse/web/icons/Icon-maskable-512.png create mode 100644 compulse/web/index.html create mode 100644 compulse/web/manifest.json diff --git a/compulse/.gitignore b/compulse/.gitignore new file mode 100644 index 0000000..0fa6b67 --- /dev/null +++ b/compulse/.gitignore @@ -0,0 +1,46 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Web related +lib/generated_plugin_registrant.dart + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/compulse/.metadata b/compulse/.metadata new file mode 100644 index 0000000..fd70cab --- /dev/null +++ b/compulse/.metadata @@ -0,0 +1,10 @@ +# 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: 77d935af4db863f6abd0b9c31c7e6df2a13de57b + channel: stable + +project_type: app diff --git a/compulse/README.md b/compulse/README.md new file mode 100644 index 0000000..e38fbed --- /dev/null +++ b/compulse/README.md @@ -0,0 +1,16 @@ +# compulse + +A new Flutter project. + +## Getting Started + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook) + +For help getting started with Flutter, view our +[online documentation](https://flutter.dev/docs), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/compulse/analysis_options.yaml b/compulse/analysis_options.yaml new file mode 100644 index 0000000..61b6c4d --- /dev/null +++ b/compulse/analysis_options.yaml @@ -0,0 +1,29 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at + # https://dart-lang.github.io/linter/lints/index.html. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/compulse/android/.gitignore b/compulse/android/.gitignore new file mode 100644 index 0000000..6f56801 --- /dev/null +++ b/compulse/android/.gitignore @@ -0,0 +1,13 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +key.properties +**/*.keystore +**/*.jks diff --git a/compulse/android/app/build.gradle b/compulse/android/app/build.gradle new file mode 100644 index 0000000..d75b4d3 --- /dev/null +++ b/compulse/android/app/build.gradle @@ -0,0 +1,68 @@ +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterRoot = localProperties.getProperty('flutter.sdk') +if (flutterRoot == null) { + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +android { + compileSdkVersion flutter.compileSdkVersion + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' + } + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.example.compulse" + minSdkVersion 21 + targetSdkVersion flutter.targetSdkVersion + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig signingConfigs.debug + } + } +} + +flutter { + source '../..' +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" +} diff --git a/compulse/android/app/src/debug/AndroidManifest.xml b/compulse/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..38bc681 --- /dev/null +++ b/compulse/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,9 @@ + + + + + + diff --git a/compulse/android/app/src/main/AndroidManifest.xml b/compulse/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..2046cc7 --- /dev/null +++ b/compulse/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + diff --git a/compulse/android/app/src/main/kotlin/com/example/compulse/MainActivity.kt b/compulse/android/app/src/main/kotlin/com/example/compulse/MainActivity.kt new file mode 100644 index 0000000..3e793c3 --- /dev/null +++ b/compulse/android/app/src/main/kotlin/com/example/compulse/MainActivity.kt @@ -0,0 +1,6 @@ +package com.example.compulse + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() { +} diff --git a/compulse/android/app/src/main/res/drawable-v21/launch_background.xml b/compulse/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000..f74085f --- /dev/null +++ b/compulse/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/compulse/android/app/src/main/res/drawable/launch_background.xml b/compulse/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..304732f --- /dev/null +++ b/compulse/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/compulse/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/compulse/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ literal 0 HcmV?d00001 diff --git a/compulse/android/app/src/main/res/mipmap-hdpi/launcher_icon.png b/compulse/android/app/src/main/res/mipmap-hdpi/launcher_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fad1508e44853bc91c3e9f81cb5bea708226a056 GIT binary patch literal 1758 zcmV<41|j*0P)j`LGIv^G4fK;RdQjrcwMLHlA>3~$E15%L=NJTmz73qLf zqyth>$^+t+cH0m$Jj1MLACLiq*AM&dMr78vC*}Dm3y6bp54Ymt!ucarU4aC1G(KG>=)59RD*k0jN8^G*mdyWsMDtp`{D9L(OPp zP{TxmkR&<&wtJrf>c}&}Il+OZn{y#&7-AYrI{e7r;Y7jqh5!U1AW4F3A|O70+;i*` zKt8Jxb(Mu^F3Sn*HnAv>2<~b`evK2xw&2435uU*Tu{+|PYp(;6O%hH%S&9yp^+qj9 zVL8)=yuD4x`NIuEXJ}9fxDfXu0Vg>vwjZFUdL58^cy>&1GS9Z6aLWZ`oo-XUDME;e zH8tp|UI*kiM-gk7#bljm#el7skaeo{>S-cT49;VjG-KuV{%0AHf^g8q;#aQ&%KW=6 z0DuS3FtPL5M?5Ilb}6hxxM?uO(&;ja7@#f|Qr7K~P_>x^jVFQy(NqIuKHm=8@6B+H zvW1+FnpD^??E>Mazd1>xs;W%Bk$g0_wbi=|=v7Gk~7Giy~i8PVn`u{8`-!(wjQb=?Kp#jV)aX%}W!2%2`eI&~4&hdi@>= zf7PqU5!*o*JVULaCwX_E)*~JerTQF@Et6vLgEEM~NRFNdsykoMLs(0 zX@R$@`8%Dd4`{&@8tC!#R44O{SJn}DJEH@{@5_!So*{+5NeAskm?B2P8=7H!Xx@zw^3?L6v>dy!?!4r};%-cDUqP0%H$ zFrdO*aom`~5ox2I)45cnckUSBBgAiedlgcrUfc$Y!S5EPd-3-IA=8IP?ZxZnyd zx+I_CsXN84we2vl=cKmaa3!?O@2r(DZwRnu{aJG0eN|5lv;nIbB;LyzT_S!))n*A!kM^vGD=C?D&9R`nEq$1| zo4`VHnY&FJCw8sfCxDInv}rwDNh>w@3%ofW2LpGpBf2p>17Gm1cHwX(wHB*oRridK z2tHuJS;?Kc#rsBR@t1zPj%ynZ*LA7pd7kv# z=Rr#vKQ#P0|NF{&KWZNi*L7=m@LK96w!5u-R7QDm=rvy0Hhcf)fVf&aB+UJkV16aV zJ>?XZ9bYxUrXw>j$*2T=~kb&T(vG8kcxCb zD$)U|NC%`M9gvE2Kq}G!sYnN;A{~&5bU-Tl7t5z2(3=_==>Px#07*qoM6N<$f)Zal AxBvhE literal 0 HcmV?d00001 diff --git a/compulse/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/compulse/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@U(PI=2ed*(d1wTImMd^|k6ONm6am9CD$sL(9r}Y_KqV9NqthyId2Il9zWb-;ow#8F zC@0z<^dP**hv8W+fRL=~V!m=jXSh)Lchu5-Z5I%Ct0~grm8i1zxVYB|$QB@iGPJlJ z;l^4pr;>A>vo{9jAV}0WC+4U#`|f1JlnaQC`!^3v=EzOl5sAZpG6dfby=Z$bfI)+R z+}D}zQxMw>bT`$bYpFk{e}gf&FAu|aHVjW|1WHni)XadDCZOlOy6ogRL3i6VG#u+j z6&GLvH7cNGk_4#HB$Dp5TXKt6|8Wh|z6(tdZ=B7rZZSpAAi=J02?nCXv;$053`{@V zg^s6YrYuJCNCMkFR}hV*Svg|| z{;P6l!d3y^N`}`~8eQk(?+JctH@ZmC#=ypA22Z6v?g#@1PnrFjB=i4m%{BqIH!wWe zXe74psDfD1ETAkLGm;vNTYio$0?M5XZ?B?osQTQ=R^UWy_Uuy28#-}D7?|gQ>z|QS z%V8C^2zY5J!yVK0@xOz>>tE*fYcxlT=`L%*b^#7?%mb`!^0WUwouw<_G`M`RLt)D75ebM|lhr+Pq2?{mM z*r$HW?K)EdO9EVFxGG?9kc(v^tvd{V{E>;$GgbAKMpy0z7DJQDW zZ&)G-Q+#loVEYQ1+MRLy(gA$)qrKz>EN7vv0fLPmX(Adt+MKAc!s-j>Fa&SY*Txe( z>wKZ`Hou4j2z2%mtl6(%*E1BsfIgp2USJ=0olD*JlNXqD9S}#s4F?tMe43(pp85Op zmw=Wt_6BY`@+xF;-VSWxsq~%I6c5eU=SO%4@TSdKClh&BV&UJf^0ru2D4NDjTB6ew zZgwM4P%9yJVsnd&xN&;k~BtSN< Y0~oqpKpVK85dZ)H07*qoM6N<$g5r=P$N&HU literal 0 HcmV?d00001 diff --git a/compulse/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/compulse/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..09d4391482be68e9e4a07fab769b5de337d16eb1 GIT binary patch literal 721 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD3?#3*wSy!iOI#yLg7ec#$`gxH85~pclTsBt za}(23gHjVyDhp4h+5i=O3-AeX1=1l$e`s#|#^}+&7(N@w0CIr{$Oe+Uk^K-ZP~83C zcc@hG6rikF&NPT(23>y!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ literal 0 HcmV?d00001 diff --git a/compulse/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png b/compulse/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2664b55f5ed5f040c82e2b99429516aa48230f2a GIT binary patch literal 2281 zcmb7``9IT-1IOQ+GcsW$$5-JKxr)h|BWIgyZgZ56+@wj2Hms#wIcjc0Qu+9Vs5RBt z+=?8za}H^8WJ8V*=F|5-_obK=w*`A78=g^o33G_`v=8NFSo*-rDpz`BG;C`m4sTKnGqzqE5 z;Ld*dKaB!YvWxY*7tjH1J!%{Jq3Gl~iUmej?3{nu+&p+IY1s!~dn$3PfE~6|X4z|O zqAk6Ctqz>+C&bB9AvIB?+80yyNqI|4v~tLtfsz!Zj1V~FudD~^Y_we3Z@1m@aZODb zJ6I9c(6ENDD+jLqs9%f|u)?EnoI7xLKUMocV&$CA}%R%`~N2-5zendL3qohcl&4SG}wM(c`sxIEx2!mi)F$i*!^jQ~V&WIk!{&R}7+ zt&AX8q2FhB(iaZLp-<4X&`?-S8FqlJ`@%)NW%bx^st(a7&}@Cc5S9DjKJq8|b^G={ zn>+%!We+$#(`?I^RxrNQqrb@6+H`cGjbjC;We=FVt z&GH9xD_2)9J6;IgQk5SW9#KJ^H+@&MxIXqQpRQz+=8a^54qm4$2bKE<*k@GuG{n2WiD0#Oh3<3*D#4LAKLQ66C{?gOpzh(_smIrT8 z&b}=rq=Sr9!(RB~#;Q&SHY5T!-3OeoL#L3z;Agp>TGDsyAr&!nxvP{=JGe1X(iF9A ziAwf-&~q83iodSt7ys*%cke^Y10=OyxF5?_m_gY_9?GY^FnEID-<>R$x&tOIY8HdY zSF+SM1T67dfdi~?q5%X}v|a;*j;CPga`xlT${){T!j3H~`4`SMmHHh*WU&TkQ+#!} zZtHLr*l3HXxW0D7FLO1i{i<&Eh?_^9*kn(C?#fbJYb$pS_lAAll~G#RU^a*zRM=S0 zvhK@XfVG9z+g_0qF2lSui4;J_9V2O1Y>fem3AZ2k3YsJ0ZP8rRe6s)~J zQ773G3er1J&EL*=T{c|1-;x21df9Qq0IMN2+p!&6I_wIYjqu@@W1u&HLl zt;dzyC9?(G>#M)#Wu*)4ZJ%OPxz7uQ1n`bKX7@;gy#IjiP||#a9p=_2s}vBT+OM^^ zT#jGq^9heOv~H{OJ8Aj~c+Z%!U5V9|D{8DI@KZ(zzfE{&HB?~_s`gQfa}Z-ZPTc3sZ0}$5j~^~LJY`zC@}DW#F!bm z-KY^YZN_+$evY=2oZe+J_-DN8T^lqqlUjQ15M_PZqZ!O{{D)W^;_bM4{a5qoO%Ys> z%^h0YFD-&9GktP3(W@BuQ6>3f0f19zRD|CYay@A={`W!>+%a4p*V54-X-N`f`*}r3 zl@T>Tfd!4~E(=_gDfn^BaAbE;%P1L{Q%JJM1?zgDOPs+B7F=ld04n}{$yk>)Za}b0 z9ARyp@$tZu+|Ai#Nl@q3|7#emn4mp4@nMq;mpXw#((3*7{k3~>DFNx_LOa&hC)6df8KIB3-Lp#Py z+6E_G=HZmbj-cJ~M07)DiwI$T)>osoNE~W@hR};WpZV>(LE7Xik^ZN!!{#>Zt=U}} zFSk}N2#Z8wRK8po8capsrNztM@3$P6Mc*E6bOr*=CuWXm1@z-N~vN9SPu zV3)aduS@sGOmQpq6FPV!>HTtF&`Yril4aM!)R$88Z@XL&8D$mt4sJ);RQ;f+B{nVH zl~L18scVvKs5g=ji&gJZJDXz6oM#OQG0hP8oH$Z%(t?rZQ3QpU`>+y~M%}47&@v91 z=>EdTsVQF*k)>a=L8I(K$2cq6QAX4#6Q)Bu`6nOC-F(dW?}bMGP zp4DyrBHldE*P^W?YbAC`hoJhsuwnL&Xgq~rQ^Nb){MNwM zAJkpkf6reWP1dMTJBwtA5%{t~V&{VA5h1iQJ^%y*>u>B#^f&pmMHB}^|6kQ-e?9^> X>P8GD#Ree1FAM;;w6~}=^CkQXWDHlf literal 0 HcmV?d00001 diff --git a/compulse/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/compulse/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f1c8d34e7a88e3f88bea192c3a370d44689c3c GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 0 HcmV?d00001 diff --git a/compulse/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png b/compulse/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b8dff24a66e0e25199d0e5dcbeb3c57094c21543 GIT binary patch literal 3444 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 literal 0 HcmV?d00001 diff --git a/compulse/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/compulse/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6372eebdb28e45604e46eeda8dd24651419bc0 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 0 HcmV?d00001 diff --git a/compulse/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png b/compulse/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5be505ecdb757adc101c382794543edbdd77157c GIT binary patch literal 4763 zcmcgw*I$!O)4mgW?=^%fU_pr#5fG�i>u9kdAZ(qf|i>6p)}GB^2o$lw#;zf(b?G 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 + + + + + + diff --git a/compulse/android/app/src/main/res/values/styles.xml b/compulse/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..d460d1e --- /dev/null +++ b/compulse/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/compulse/android/app/src/profile/AndroidManifest.xml b/compulse/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..38bc681 --- /dev/null +++ b/compulse/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,9 @@ + + + + + + diff --git a/compulse/android/build.gradle b/compulse/android/build.gradle new file mode 100644 index 0000000..24047dc --- /dev/null +++ b/compulse/android/build.gradle @@ -0,0 +1,31 @@ +buildscript { + ext.kotlin_version = '1.3.50' + repositories { + google() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:4.1.0' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/compulse/android/gradle.properties b/compulse/android/gradle.properties new file mode 100644 index 0000000..94adc3a --- /dev/null +++ b/compulse/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true +android.enableJetifier=true diff --git a/compulse/android/gradle/wrapper/gradle-wrapper.properties b/compulse/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..bc6a58a --- /dev/null +++ b/compulse/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Fri Jun 23 08:50:38 CEST 2017 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip diff --git a/compulse/android/settings.gradle b/compulse/android/settings.gradle new file mode 100644 index 0000000..44e62bc --- /dev/null +++ b/compulse/android/settings.gradle @@ -0,0 +1,11 @@ +include ':app' + +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() + +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/compulse/assets/banner.png b/compulse/assets/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..a9dbeb459c0c81c475c3121a28530fe71c5350b9 GIT binary patch literal 6222 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 + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 9.0 + + diff --git a/compulse/ios/Flutter/Debug.xcconfig b/compulse/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000..592ceee --- /dev/null +++ b/compulse/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/compulse/ios/Flutter/Release.xcconfig b/compulse/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000..592ceee --- /dev/null +++ b/compulse/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/compulse/ios/Runner.xcodeproj/project.pbxproj b/compulse/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..8baf490 --- /dev/null +++ b/compulse/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,481 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.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 */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* 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 = ""; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; 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 = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.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; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 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 = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1300; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.compulse; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.compulse; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.compulse; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} \ No newline at end of file diff --git a/compulse/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/compulse/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/compulse/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/compulse/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/compulse/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/compulse/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/compulse/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/compulse/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/compulse/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/compulse/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/compulse/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..c87d15a --- /dev/null +++ b/compulse/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/compulse/ios/Runner.xcworkspace/contents.xcworkspacedata b/compulse/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/compulse/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/compulse/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/compulse/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/compulse/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/compulse/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/compulse/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/compulse/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/compulse/ios/Runner/AppDelegate.swift b/compulse/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000..70693e4 --- /dev/null +++ b/compulse/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import UIKit +import Flutter + +@UIApplicationMain +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d36b1fa --- /dev/null +++ b/compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..3a55a6692febc87914ecdd8fdf49bf5e3070db4e GIT binary patch literal 59266 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 VYx;MQ0Z9?$pkKh3rTZc;{0%Idc~$@b literal 0 HcmV?d00001 diff --git a/compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..7fa4ccfb5ac471b3aa6b597b002fb66c90502cbb GIT binary patch literal 491 zcmVF|0LSs~o1Jk-+!Sp6L)Jl(>>zgZuqa)Ey$M|cyF?xeLiSYP$?75qp1g=41VJZ3 z%7X~9g-{6LB^1OpP>2YpFm*>~cgOddaXeVsy0h(}-(eUYZ$A8fhtY2&l8OpOuO#;W zfcaXTTtk%DXB+V^;C@RrR(G7AoplfqT%P*E#gE(JK;>1~y?z0!Cyw1(140npa>zBB zan`G^H(!odT;*+L6YegG*>ATt)5j4oz<@x{ZBONy&p5 zGiYyU;Xuv9u8pl9y_<&OSxRD7f$JVGs0s<5%%fY1mU?*nO2a+~{)Mt8`{}r%=u0Tl zD=@z-5V7D~Malq;h~nvOiS5Afn_!}zb!m8KQL||m2kWX8hK6>ZHh zG$r`H7c}ypmuA16S>QJ?f9M@}&hQ=O;gY2daRe@A;Puk!dFO%$dBOb&jj?-@!Cu9W ztfC;{`LuT2DV7aL{_zQX7hL?gB0fqno002ovPDHLkV1k=K=1Kqn literal 0 HcmV?d00001 diff --git a/compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ab912980b9dad7bad77e6340c29d3315977de83c GIT binary patch literal 950 zcmV;n14;aeP)BZQG z4qu%K5yDVfOp!HJiEV6WxaQH`ue-%U0!qC6Rh-9$;Doa-4+1TY#3mU|HY>x<6)McF z*TD1l1jMF|)7|2cw6B07K2Evr;h8&f}D7t%1oLjFd-1?+VBO2u~;u<)`e+f1?NoP_&z3P3^} zL&;hS>E~XkYXU0ogbyw#V0{b0zA6bNMHDh`yfQyg9otB8@I1j~-ad9LXGl*{Vh4n^ zmn6QR2m%V-tR?7jOE|uX!pH#){PcdXh}Y#rigmfFwdWoXyt0QEZd8Cmj~fWKR!F|= zSuKj?8}e1S_wB%m8{vl=HK0)KCxUI25-PSTkb@G#K{RBK_a6faHMS9KJSm}^Z>5m(A(^tjr-K!W}e4HJ8fQ2Y&!6L=;h?W4sx#ZggAM$F}wy&$(5$+k4yfc3XQ_`%U^sfA^ky z&*z@s`91D6Ppe+U@IR6{*AvLL3c&fU0&u>o0G#hC0Oz|3z($g&c>`0NxH;X0;3T_j z8+Eb`W4^lqsVB3F*pR@~OyIw_6uvoS=<*aRj``-6BQ((l@5kpsGPt&(fTIo*S{@jU zR{o1RlTR(^bs|{dfb(2X_dN^&9C2IWn_UKfRVkQ7N^4ATvVC{~iyhcm>5$zvFl7Wl z^f_oM4@jk~15*=0+q4oHG&0VX<{`N|btT39-uVBOa~M`^lW@UD_zJ79O)Uo8!%~#N`(Y!R=eg0v ziwpb35Jvxe6P7?!b?y^0*)3QhJAX!t?_v1hAd&ZXq71phLY80*;}2X*dCu5UhL;zr zq1yf}q=wHPPE)ThrEpl4wkAJNdm_aiHey;zM@yb^l@RKVLusurHB0hy z(2Jc@V3(8O)rZtD2Tl?k{kso}Rrgl_7)Sv`WgyT!a|<91blu}-}DCpE2Im! z!p*R273F&|{$F%6t9D4Z)|Pr2&&*}0^eAoJeEYreg~a>+fgc z059y6aIRT<;*}mI11D;GJwaoVF+(X`z&F~}Hctt#^LdKZyCj^xq6Cmg+?6c}cWJoJ z#~jW+tdK6?uYM(1FqNTtiqc-{06uz_V$CNKeroImd9s@EV5K}aM&qs=jST}}G09gr z)P~0x7EM#Sspx07K25Q9w}kKiAUypryf|O&%AXw}Do@C!bVq3cy>?H$6nuQ95~zq@ z?cEg=8*2#`^2Wecq#S#>74cU#IaEe@nDNLe>fVkpl><`W%1NZ2bxWD5ni8GRn|mch zdWIqJe|o=8LR*l^%|PEzKU&|#_8uoV-k4ihp#fJ~pB@qYE5-U{3}%z|In6w}Z~i9t zutI}UTJHZvLLkiW&TVtb*G4Y%qSYv z=HbLSg6Fo2v_&zw95~hhY)sbF=SYLzEuFbaP_xCvqc!72hOuCUhO9j_BCJr(U&Loy o1>k&F0XW}P0M2(6fb(7d0DKh2Xikvu%m4rY07*qoM6N<$f;F|9LK-!?e3)g+4esXiBS+3(FT=45>}Urf{F^dXcT&gZq?08h7fq_5(_EWIk1R2 zMI;H~RwO}n&@780b#=#GLATv$=JlJIbvMhgc6U|?{K3pHzc=$f@B5waJZHG>pui%R zbFqO-(EkUjr*V423M4nXA;}p8`r=>~5iJ=iIFJZ?5ZfEX_cax{K36pOUryQ!RV5C& z){F7F02H6}$9QUOC7o@8rUMeJJ9`tgK6fo z!Y-x$KG}$=i>zGzcFIt;dy~M`lhmZOMBfVx2s5&p%O%?f(BJFgA%T#aY*&ERyPQlQ`m9pPrf>Rd)ov6xzS9JB_Aq>&Fd=1ADmesN zj+wR&jR9S~c~wl!ZbQ~Wi-R`r7pM-<20^M?yE%TSd4l(K0yFC>;h}3mP)?g>eGM=$ zqK9MdlDAX|oUJ$2+forD)rc%K9TO9AcX8%pHwe6G! zrvvyH10s*-pL!vnCG^7>LnB(1nHN!*`(pdBkJulZN2}BAv#nX&=RVbZfRqL8^9_*aQTP{9HD%)KP(=&Ak+jf zG(!r1;Wdf#GrB*mbHEY X1N+#ZZ5&D-00000NkvXXu0mjftB5}z literal 0 HcmV?d00001 diff --git a/compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4e6a4b4dbbc53ca96462272b03a32d26d4824195 GIT binary patch literal 1369 zcmV-f1*ZCmP)Kz-vM;&chh z2{3SL2JB@ya4yOMOErLa8D=y&PO_vE6t!U}I*itHR0=lUMV12+=P zIoPTBvvmO)NTuizaJ`jQ1T2QAYp>psjiS0v5RFcaE2uZu6a)R~{)q|H4dQ41B3JcQBNFIr4mEB44#? z%0Yb@MmUz|z#%HAXO?Bu^~BGR-Rwl(Sv%5OUAXjou@cmzGf?O48EAX17<>#Hqt_Yo z&h#PwbT3Q;{u_3+qQg?Ohx?R*+E&dR6_WTu{juO=H&UE_5dloMddZR{HkGSN#Xct1A{SaUXc8in?CejwHWCPRFbsO;T%-c8>=}= zZjswAUIEUu3>`2PkLnRLn#$&LtSgs;1ccYO9i;HHP#&s!RBxdhO=csar`RgDb=ZL~j>{pYMSB@Z(mH&rxLncdy2*ubY?ck zvlU7YeRh<<;Zond!4pu}s8@x46vY(uohKR6%yL`fKfw1*BZp%8C706HHmLdDF#}zF zCqrea+&1V1w%0|^x6GCS6dvwEcU3;PfrQ4$UwSm(KPI3>GdQ+BArD!p#(ew(L8l{n z!bxZI>-%68ui@kINE2w9m`iKK$hLSk$8Q%2YEKY&{n2kt#c1<^sIplRKQ0_UPjKkm z*sJGw0f(gt^yP;+*54cQ%#tD=e7(MhiVz%m8_(R&v8-5byDHM|lS32Tx;AM7T{=e| ze&r>iExg3A=_`tUk8RsrFAEcxSPeupMQkaY)H`mBLJFIpw&`5(t zyfrB!;Qj_G3J*igDmkoFW#6k)ww-ur(q`Q~rztw@9NX40WDbpc2gJj4Q)~PoB~9v3 zfAWH8AOBK3w1}hINzm~3WPbX@H0e(-eFFq_zw5(`;nKx_7-FF$Xrd_znrKRbCYq9< biKhPm5IDC#%$U$B00000NkvXXu0mjf@yV7Q literal 0 HcmV?d00001 diff --git a/compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..ae92b9d01e451594c8f0de132fc0ed642c2e69e5 GIT binary patch literal 2047 zcmVCX+RMF@^5YR+aG%7(8H4#lrOiYxhF=8U% zeIX+8KtvR(Q9y+%#DXYt#nMCA?e=c>c;n0#D78Cp``R~UkNG4`)1CL;zWwZPfAjmz zY^@hey`DfK1nb$pfn-L?6^N885Ghw6Qm#OxT!Bcr0+DhBBIOE1$`y!|D-bDHAX2VC zq+EeWxdKTkxq)mOe3!V3k==mwM1PIulTp z(_x_&%wVl@)63?d6|lW<_S*JRuo~xM>VG2 zL(<75G%$VTZZyowN6=;O_j&$F*%-e57}TJ7yIx5nH{j~dr@l)(2-4hY6k=D=GS-3Y zedguggqIs|+fYBN0F9Gfk&pObXfMr>ay2WPq_W|qk^28hYA}Qx=ITf&xoqb5Ug1H* zwfP9^O;Q8BK1~f~k`Qt`bM28_>buxID5=(_AQVEl6J0o!}VTucX*LaJ1{jwPCw3l z?qrtRUXqT(caB2HX}pv=lZ=`U6m6_S*1Ws+N7}V&k{&7xwh6YO4rrk*exXpXIM@@Zs`ca^_w3#KYNi;&(Eoo zh7;U*RbMF;45VpLSf*sH7YuSXB2Av$hl^b&~hKG zAQ)fFAOEaM!LCESD`4Gf0ZgtrYr~9$l{>M7;O26^s9*?quo0)hu;^92QHI(T8Djv!fz z@mYF9^k(4{uWVLupq@V|#f;pv6qS2(xrQm@_~XAF0p9yDh8#Je^`+QN@WfoAJBcm- zQbmkPD`qK1EGbxuExm!ju5-7mY1y^6Cbk$QtS>j#xDgUUE?c9WIf?(G|EvRE-Q2&A zv#mL#J8o^&A2&kW%VjO@<2UhZTE^;1HC8G;O?q7?l#m8ujs9i~tLZR)lN{n+E?fN0 zbMnWxR0H2u_dicsJHnA~GuGT%(pxZ1+MZv0$ojjLf3iX1S}v<;=S}6uWNjnxK1cb<&~dz{J2O4lN_Xe=&0m*BR``01dv6L|US#1P9EwA{nTfyOq#of&3QuI%?)PSg3e!8Z?FSSrTBYK7 zT88N@xQr&bvPO1D zK!h#aupBx66%{Wo&@iUZ`1w_b*aCRsie(6075m4hVDTH>5j-;bzkWrft*iSxUV*Tb ztILTN1q)tPv3$NpJFxzp!|G;sUZOK3>$%Mx3Lbh}jZ_h_1Rtme-rtt^Vi`lWSl$^_ z@W5LtUb{=fMWdo0!>WU)KT)H0aEZu}?nDGa3YNU1;+flNZ9AcFN4EASa~8nkg(2VO zVJTwCI|}ZeuHl~PB+_iK#hl80z)PEwM=ay4?4hxkUAa}o=T!uw^SgHz4j)f0v5d32 zL0R9V(4Vt;2V#la-QQ$D$`y!|D-bDHAX2VCq+EeWxdM@L1tR4NM9LM2lq(P^S0GZZ dK%`uO{09*jlAd+wrMmzC002ovPDHLkV1jbe0v!MV literal 0 HcmV?d00001 diff --git a/compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..ab912980b9dad7bad77e6340c29d3315977de83c GIT binary patch literal 950 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 literal 0 HcmV?d00001 diff --git a/compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a52ad13a5e56227abdac71cfe763a3ebe1d6574f GIT binary patch literal 2840 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 literal 0 HcmV?d00001 diff --git a/compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a52ad13a5e56227abdac71cfe763a3ebe1d6574f GIT binary patch literal 2840 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 literal 0 HcmV?d00001 diff --git a/compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/compulse/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..ba1730fe09f698b6c80ce3e4c1dd7605545e3810 GIT binary patch literal 4392 zcmc(j=OYw=8^>*OM%G!O#BsTn8H${}ch1?{nQ`_AaYDHxBhKjT%w%(lY$q!&85!AI z+4Fw=e*eVp#rJt$JmdR$@w|HC4fNC*>3QhM$jBHqHB^lL<+}fhj^7uk~qO9mr%SMYW_LlS3rqvU3b|MzrB+sQAe<7uC3+*nKa#K2eWSi2eTBf(PHrS;Rv_IhZ`(IngEjh#EQ`nF3DH6SOFiuTknT#bA~#7VxU`(+Ebnd{=CmXM5p z&(dl$3Z-`)iU7GeFUg*-pj7owigQqDUUN$FpK*gAfI8u29GR-a~ zn-{s11%!ZDA61tYW^(x=-1y5Clxbw~p2;iJGdgU5J5N@8nK|`Pf_24M!WA8`dPFBf z5@w=Bzj9?}l-x zzs}0x@$T+<)NkV;>TDF6wGPXfk-b>4QqQE1Io|fOyOzNRtY8mBpdT>G50|i-_$NB& zeeOZq*W2`U=DpU+?%+4okRMNA(HD4`=3%=V*xQ7UBVVSig4C(|If~?+)hX$j1gy9h zz##0>0aaOEud^E~nNBTQ=nvQX7kD~t^ZaA;t$x)#cIn9vb_^lOL+xX@8Eyrtlc9La zli|zwua7r48Z#1wNROO4}u-|?X$yJ!8X47JiajwTxXS9Q{~;J2Kq)5!Sr zSD=VuG5PyRa28d>h3~1lkrSxoAFzUJMh2f*CZgKxtT(zZWDXCc2xsEzjJ)kfvDl#b z8iIIbk&OS$-%Mg`_b%bi6%<;{Ghgcx=IXQ$wQ;9259P_Z$hZRYYKE%TSn&<}3W-02 ze>pOv_30?P)F?&llCp#!{*R{m1pa{*)tD2f@RhYs0VH@n)xn&DcoC)98QIEk4z_m@ zax!gKm$G|t5@hEz|MtpI46Y^d__MRG6+VU67@ciB3mgqCNvF4zHl9y?NMYVv(KMzr zlPqWZ3rLCi;+9{FkpiBgIDm3?{SbHPVFkr-)w{zNx7Df?*2;GO&fkby)`k=w@3rFw z7lcpS{a3HaYuD`U4TKj`e`moOqho|Oqn#bYe!f{T+$pFVMaUwk)4acj)hyT>q;FB~ zv^2S7VpbDssob)tuFeAPCz}LJp$F92IBS1(ti4j~it=VqpYO_!n?3IzpB^H+@ZTw! z6*rwr zO&s+{Q-`%$bxYO7#b()%I=lpNrl@e%C!|z2m zoag$w2P+&qG)bJFJm4L4hA4FAge=A${83nVv7Lqb5wp~z$L?9-8xTcBTXGYY^!xFP zODQFF=Q|&c&&)1!kkqlvzQ?m2TMA!9|18a?DobcgjT3PD37}5eYnHxc=PZ_?0-o8j z%eMAfO6l$1?_e6qt_wcZ#hCkA6+mAfRIwZ9|eQH0i`T9YDRp7y04~5-5u8xkiTp?YYO%WW`f_`g&XaXM{M&l z7f+95fzJ9#_@1djnub)>j0r;FrrN|PPm*YSA_(G_-KRqh%)Q46MwAn8^9l+SYHo|l zFieP$bx{E2^dNGb&@z>GG1Br+XU|gO6Cz)m)Apy{PR-vL=L7K3uIREf**9dHh*^tQ z+co0Bl9Ratejc@D)gupM3D5}NQp;^W2j0Ea3E}+0E!=}Nl(WK0S#8XLS|sr!w;o{u zI9X|z?fZbKB$1~kPF7KE@`FD`SxjM@$M7cP7b2)d+ps)Ex9{WZQ+UF z+L6_pS;}MF%VizVUNYa44Ow9E8@~uf-y}CFN2jYLd)AnsDKA^(s2^bBh2fB(o95oP zXBhfuAw`Z`xyxKl2ExCH$feE=0%NR8Z)so24ah;{vbOPEhU5xj(1{bJJW~*?0W2$8 zh&KA?pq~6knc6E?L}Ylbk?W*WdzPt#p}$4YCJT$wqyq2>f4^+s{aBqOHk$ZuBU>Q2 z`}}1{t+99qb^~}?J7Q@62Qq-rxYt=b&5$|~d>^AA#(fF8Bj$|pgV(vHQR{696ci5U}^^(rQmWq!y@_N&bp}>YkE55`*GlgY}wGZNc zwB!6Z7Inns=5VgsulCTS+>ovNriQww5Ut!uGF$M+PpKO>-}0WhW^=m0T$yG4-?V?^ zG}ps0Hij7}QGQ*!cXy1%cbq?H?z`by-)o$x1syx--1Wfg8|A<5yk}J6;%pdi@$;=4 z8yw@ESZs{|jQuJkOwAnN8%UKOWcIgug#Tfsi7i$|j6%yudPjQix8ATm4% zJWN3v$UhmD4e0!vH6*(TCT{o5OvGFa`tQ+>=ak6r+S2S$%!tEr0uJE?myTb z9)Yp(`@sl=zoeFk8UHJ-8MbMov-RXoX#yzwWM56l%>fra~Sc8!yP!xY9!9) zJ}13(k%>CuDT>L3->Kfp`aBQ@5n(4kzE}Mm^91L1xHA8vnk)ByAv*Eqkr}!BtbJxd zlo52!SIN<3e=tYzfrAcRV5QXdjNIAF4AArQFaUz}$vOc|@s2dR>ZfSms?ME<+*Uv7 zdfPWABUN^o+pAt2g95Ce~sP=E) zl0H7$X)_+|*}TgNXbbD<(#A8a3olECCY@DI`r->4w`tScK6oiU$}v!L#ioRNG8Yct zxRp?|@Xd*YERVvIoLh3shjck%K1C=W<(WC{>H;w$UFmd|s#q!u76+QG6$v`dBK?(& z3Qq&_hZ3#)vK6gtXAGJ{are$gc|M50R|V(I)$GsWC$LSyxu^nxhes?sN3WL}W&Dw|j!}MXsP|U|$3P3^eJXw!q%jnq z#}Tx_m@dmNDkiBUQfU3DqwBA?dB(iG`9+ZE)G*Ke2LW;I{^dGb@?O${S@_chv zZhn}zN;r4!I(HEY9N#B8^&lo%H5 z8XbAyV^2Y`M8SF)BV$jAB7vG(FrJCrd+(~fDa8QFCUnS%$!bF6qEHgc`cA@*PQ@WC za=wZ2iq}LWmE_w?Peey%{4KF&NTL_6CqdELU5+;}^CTq+8n|E0$AOWicd3#C>xm?O zu9<#5#qz){X#~o)*^s0Yd$&HWdEBJCF~MCbRd4|X`r-L$3w%g2x zpye?@C>w7;R@1>PiyC)j(LLOUQbpHSiPJSEpb*#Fl7`l_VY?U*|3$H-S-};~YI;J^ zSx$=g4ct{&^3!ExRJj?pY11CCs6F3bH~VKqZN}4@-}GBhYygxk6wRfV(?ck_rE~Z2 zXo{F*BVB;8*L z#T6#1WOjb7LL3gzH8@@8)8}<%f*XZW1qu`wB)!*Xw?lHXcQ`hEf zg2B3EB=empvpK1~k_pBgAl8;aBM<-YSZpWT7#<%$%@kWxg%-Accxk^ej?Coe8i58X s*K($jpUI$m;+X)0uGIf0b(6^0YOHSL{D|QC_W>c(RMk_dg4(|P4?bH#8vpp z)C5#~Auj=m2r9@XC=d}6bU0v!WvuO9wCmcn_jpdrU|VnRde(yXmizgSoqOARKm2~b z^E>C%II!d%0-cyK{@)LvHFRN|=)ySBg>j+_<3tz6i7t#2T^J|2Fivz~oan+h(S>oM z3*#iIgf-`}83fc1$_|NYE=X6r)_tu7)pzHka8p&>->W%c0kZ+F zn{(hCX+t2(6!U%c1G3SB3X3;2H6zStPl02U9d$#jkWxhM`-2uETDsA?R^JlWbEsYz zi>T^x`Jt$S7+-t@sI;UN)|^LYykSb z!&u~8wW|hsw21qyDWQh5v--ru+*lO(cLVicv(N>$Cy8rVD{Qul7Ex{KVI_EGoV<;* z4Zvx~`F|v9gz>UqvIKKV<+dVLUYbbT472>$JKF>}&vl3zg$UF9;=42Myn*13 z{_+BTr48%mgOLK1YgiJeq|HKTbV+RwfiBQQC)LFpqeRPh!X5?fLyf8ujrJ0K*n?$&M(O+CpII9&p zSxLl#>V(awvtqXl`LP{G1nfDk93{r40Kmi;BCj*}B$+$-P?fMT#RTI9$VWjPT_?Wv zZRaV)mRgpRp3rG`N6eK?aX+JKgjv!EUY;aBD>8*lR-Grd8dSL93@T>zYhPgp zdv)B;sTyI=-%F5}EkCyRIPl#cvCnX+EAMJuZ1Q8jR{-DakH6VW zBwZFZk~Wt8I&8_O&`(=3jV+cXd{NfdmlQPyC%pDt! zw70hkG)f|0eAZ}!zA}eKj4#Us?EOo9vKU!|u=F%rI(WV7LduMNmd4@Ql& zwzLF+<=eF(i*ZR7-|QTMHJ-~KlWI=1E{qdh7$>?gPIO_M=)ySBg>j+_k_nvd_J@=gZ@}2X=-7z<0Vd7_^p`l?hx@}-}UUB~oAj5eE zldp)J_kS4~+_VXz-N?I`%(ckfaW?sUYdy^Oa-rm_E5cXUxGbdrU$tT=7c95S%7TjL z*sbFz24)YxUYMg7zH?KC8~AElpPq}2J?RA|md=;DPS9%8Y8!Aq+G~Y_x;LLiC{O!S zdye4_P}08Xt+UWAt*HaefQ3UTI_9ESnIuQk_kkSd`a(` zPR1x2BT3+r|I--Pp=hO|!rTS>oGb`9c7NLEY~80 z#cgoW#AX+p1Ze}W&DkU=n^g4C+m?}tXBu78<4LJQ8NJL~dv!?C4Zv#Oh%V^#qIenK zn@dPo%_h*J1VIfBo6*H{g<;oWr^5lidt%((BOfzQ=aT$LKp~a|?zdPaJ{ck)g*QRb`WpSVn3-2Hb zjbLuqS8P3r8={^+Oq4qw(M#U9;~t=9yrh3Enh>Uh_k?Tr3p$tl>iQT%@sYJp)tj%> z^lLPnuRIbBvznKAr^5WlffI0TJv`fu#Dy$=Xj{RAW3Mc~q5N?=?`=`J$_0nx?71UC z3WDTfTA4(#gO;f`sLvh2+kxEg>Ji!rts*+>%`OEEYKv-kor5hjf>am<(;(4~x=YJ8 z64d!G*_cCei5MeD_p+Uzw=mrYb#7Y)`YQA zKVdt97Q}h4G5ya-Ky%D)ywERt@`(q`fRsP{dp&N@VDz{*kuNwuvAqiFrNF zE}h+?nb-U)LUyy_JPT4sA?RY>s<2R~%;w&$x%v!0NryH8%Y72wD6~wE!oofExrXZ{5rY#ZL|#7r1y^{u9k)`*zYe zW&HBvmVmd}?FSH?fRql0k<`dkIl)q~TK%Il$~g5b0MA|bK2TM&%~l#yhp1-zfOI`Da9LY)7ALJIQPi>!B1V zj7V_^uA#T$yOV%Ps<{FOZR}*@rAN!@*;d>&cs*n50}EvtCq$5L0g<^F9fH^qE>Ii{ z$W4huz$*Ai-F)vQlyAj~7+tmBPf7r?{(+uoJcNs+_dV-*2X9P_eNaq${msLfIYqh_ zq0C7XhKNa0>2@wJYN#h(xwo&{jLo5$rFkSMT zz32ALy)ukkgt-rEjxxEc%sr|o2Iv^{O8chVW%=Lz(rCmEsSobX3=2Y*L!{`7zEaVz z!wpU;{FPc})-|k=kR4<{#&b4WnhRg~szQ~6WhElwEmBKh8P}xfOH=E8jO{uCm?bm&m|s85l?veZU;1%3Mj<{J8#_hcM!}>5&WXc z$s#!P{ck{xPw$-}HW9p$p@MmecB054o$^)9Bz5ipVw#U34@MO1n&P5E)y0)7PR@Rk zUfuaEpji=_XCT-KlnCM(tv_6}zaYw>{%P~G8UNJZiXDH6%OrK^KKO|H;zVepA3N%Y z!~89iHg>c}N+(Ok-t==c+B*)C&@nwYQ9SUTQBw+LaK1Mcen?e0_gDK^t{w zB*{5%0!~{fq|eL1%+Ljoi^?Hwx4AmsZ6*rcQ*$y)^Lq-`$taftaj5+=hp}d!kgOAO!%1x>EfICZf_v|UCsU=A zkdjp1pTzsocEhMc7elT-12s%=frl>0J*|y;omEr83p)uXT5lN~6qNKpvsbRk9k9@V z++RzH0?c(Oe*^q;x2Y!nDk_FoaaEGiZx{|g*mycpVNEM*fAvr)3T_~o#*g(G{9V1CZFe<2l&f|OKTZ(QG{`;s zG=`gsWIkV;(1aG)4dZ1X`r^G28`Xfjn29a^Dq+6U0pqqar1Hvsh}UJMlR9lv*$e0N zKXnWOJDm+Trx(8TxG<-F#1hD zhQs^uy`5Jb{hTEq!%g<>Kb2yQgOG$uW&2uI<~5loUjZ%e_IBI$O$uD&u!|7;+WZ2T z_<^&heS%5upG8(gN*c$C7&(Bng45>y&9Wh$?0$O0_$eBmgFY%fghf_LfZYLp;X)aD zXAkS@Iab`raFY3Di6>P53yX}`7=hMuh_BcA-vm2KA@3LyziADzB4q zWUms#hG1ctm7*_oX0oyv+~s@g9_R3P$_a6{5P|}uBBUYd(r9ytBYS+S+&CWpCrkHW zVTfV#e(~&ySzQ7T0R(uQ1;O(3hE^fd$lu1SpFnHV7`2|4@hv&&_+}9!U$ZHV!23+p9;KtV4YfWc-apXS7SFzG zub|Zo8A0EjQIA{m)C(Wi7zB~e`SHCbn|B#Fp=hT57(NB2+f?X?%nzsfj(+7Pm38gJ zyDsh)pfdP4>HnB^3g0a>Av{=YT4wU1n@x|99j*T5?cTGnuDcsoI+A9n-sC$V7b3$iZ=`;H7$d?GC_A{lZhE1`;ZOdp!UcDx zwR+5CyI)E{KH**=(g=kAspV}?{xCbHzjnP%)$zDJQNvC^GSd^%-!t;o{g)DyuvoHb zlI~%_ElCYL722^wjl9QN7co~q=6*ElTH56iu;%pY-VWd2I;*c@NzE zSr0OQ_J+S{!)Kh;W#LI!ea=3AO)#uuKzU&*v5(bB%O?|^v$Q(m@U)g~SHJgIuzjye z$T;qUSl>h!rgN?p0f6Rt(6)3Q#7zzo6`^0%WA z1_>JBt)zIJh_(sh;oI{s&1NN?ruN?_vW%-TZ^=K&`f`u@%#O|?;17zIqVtA5-c!W` z(?rO{Fv_VaJSYw=cYmXyT$28L+Dp?tZ}lJEW6*1XB);!nYC0TbtbnQD+zf_y{KC^U znJX5X!#N#RYYX3Yw@^w1RH|m_hj23*B;egV=cBCXnrDqa6iRsA#09s9DVyJP=PgNN zqnpDDpL3Bts^VIOjwc6}sL;cJN&ZVpb)*3d`>~fwcQM}*oFQ?mX1^`dr+;DGQHg!K z9RVQFKl=&N6h3Z1TPNA<2&vvg*^_<0W=FBb1J%5my^u^i)54j*ET)BC>%s#UbhC`W zq}W!8nVy%Lr{N_cd*KDuI)Q!snI`lX#lbga)`oR!=F2Nt(lx!XLsAy)B}iu$P$?#g zGrr)_m24*~Zm3Gm!k42hbOe50Qywl>i~#JRuXHXM)EP~2p|motjf&^i-6S)?4vQwl z^4o6cTe8lNz@RE$bCCaXYG2UW_L=WR|MnF{4EqLm+4u>=V|5e3XQ;MT+93a| z=m+_JsCZs&ViYRJ@lAtvbmD1F%ky^DyOYESf!z@Lt+MC+Dijr0piI_oY zsS&FLwOae@`%iqHdtP_XbN9pRdEMP}&vP+G$h#b@Kvo(W8V-a$%;X}L{Xdu)FT5YX zaD#@1(+dI9HVe8$&0+E8F$eaZ&)}Sr6LI3OnndrHQiVD`(Sl-yl?xGR4?hx`*CPs> zONhU%oAWo*WZFI6%hbs72uJhfiy3)D6r!Y~*2P|kXuqI{{LL}!qSp3W@^dTgVzEc0 z?b8Yq3kkoWjFaV%tqZg3Wfua&!yS0Uzfo233e?XSCBm2gIrO;V-RsML=e;`G2vT;! zl4{k~k9|tw_0_E3lAp>X1(gFbiCbVJ%R%Pe=y4;6h=4>9*a$btGW@`zc7&(7?YUBH zue0cymI}5?HvB{J$m_tXg0imkIy2AKv6A^gXh~_N5`6R+UHkA}OWRZK1JYVtHt!uV z{|Bi>TVryvuCGKLl?AiN4DiK9!zl`*+x6L(-Kv!QEjFgAd0X=f+Jf7}xMVgZBSmpu zQjVj2;DTF_zhL&esN3>_uux-Nw^^rX2MDiT2JNWED6o@B@&hEVi4Ji#mV&0-R2LjQ zj$}l z6Q8q)3Za^Q#zYF-(~)Kb6)kL-ne7`S+y2KYaZ?>paZ!jlLd(aJ#LLi@nU%&3H#2c$ zvKA?jS7P{DPFgs@rqC%PIon>5=eVv3kAcGcZN>hZ8D+Z-FB+{?xTD-uT5;omhs^ws z1P3(V*$PhQL@;Q0=n*CoGn$HvRVtl9L;>1N6GtN@X}YDA;sQm@!PF%Y8zV|FCpS?* zlk6Y&Avqgk%^K_DGwZ@!yixt)Z_rDD=EfJDsMWI<+)^z)gBV7HK}waH%y<|5;)2O# zUaqpRM-fermh}In>pt`H~lY^Mfk%n)?||Y)OvIG zwlaTL=nzupF&x=r4^hvb;;Hx0O6I*G^QCoV24IbgD5g`<|7GO@Hzc|3bFv4kTMaT7 zDry3H_*@G2I{f%;1Fx6ZZs~qIFmdvd)%3BZ=jAU3?n znb5)IFnA-YO6uLmLp4VaXfCJ6Ein-By;@4xSayRbaeX%H^4UN;G1AeGP|LAneVAVI z5_2(xT>J>Jy-iy3=7s!rnw-Ft{zvi~0}u#C+MrrMrE<-!n(b?Q>*(6%wJjE!vfuL4DKcLUu>e7nudq%tF@@!(5UQmi$_gjX;PIyD4 zZ7SmftMJ6Q#9_O1WmcqDXsKB{F{!zppGDhc_R0{Cr2UBQg z2K(4gmP*ogeKMN+yaXbyohSU%0fAt#xIgfB&88-5ifo-op>q#z&PnU_lpDV+5Uzw` zdN|3Rf6Pu~M8@dHFmf-&GRPjndl$SCXO)*~nY8`AXX@;62MF*y!xuXJxnN#>KkFVi zrlCvRkIGE9^7p^ZOmSZ%RGH~}!#O2yq{CDnh7_K-{_1;$%U)<1&CJBftLbc5B^NEn zF$;r#bhR7n6j#B9Swx6@D%(e^e(H%9X0{)r$A7Wc9bMB&A-K8S(#*fRXo;yN0_e@vYiBlh@FUyv({lkg8dsmQm%}|l;-j7b}TZ&g$bL(9p z-EVr?jX3R`?ME*|;>x#I*Y>f;y|2Y(a6yCpa})K9HNtWrBU7-#^OA)4km^Phx-sI|TnC-MB8oS=Td*8Y8b!vl4IK6bD_Zo5og6Ut@? zvAONh*$LM*7kSH`EPIy!N`L27)Z@Brhw#{2!b-S&SbwAMVGo||8bf(JMNC5|rgZha zNf{&!%xx47150Lg1{8=F5`0jhvPpqODf>dl0evrcXq3m;4fK!PqjIM-m;+Awfo5OHI`H@& zLXH$SCJ)3du`7=0@%QN`w@1v{}j*Ln=>>G2(s*wvz4hbXlR?7Cha_$u5pKUOGTPq z>4R|K#%bS|i~Fxrh3{VW-b@lqQl;)sxzm2g z?1I?3Y;Es=1blqa(l{2I0|<3)=Wz50>kD3FZmUs`%>0RTyBAZBw89zyllH>qIE}s8 z(!k8+4UYoUof0F4Dauyf8p4W4Ag8+EVy~E z$3t3-)|s-ADXGvq@Je1_8fy!xl1*+{SxCf77C$ zNOW({o-q{@8n)?#B+O;Ygiz_Y+!g+fJns#yxsPj%%W_3gDUr6}LDPjDgm5_ll{Jmw zV|6RT_EtI9C#5JqsOqF)vJ0@)(|z?ic?-m{M@VjODZLbg_WyU~gWFes2vq?;P;B`oBYO5%Q}=;&Cvg^ykgQ9! zPQMP6z${qjD{%tSsC3`m+ZPn?CeC&y8&D?Io55yM6rGdz0`Q=_SZ7KTjSSua9*rrX^6 z=B~{u?fT6LHV)JslV@6IE7lzFR6&&-9S9_56i6bp*>%~Rx%1pi%>R&3qU+8mjHH&&ua#YSlcTG07P2UV;khI3?lG1#qXd>-6}(hNK53Y=!D!zucS%@r8z__jj=+Wr`DY}1Aj5gUX_ z?^CdF2R40ZV$ovyMOuA%FW2IKT=F2}N#>Jz^Ydq+lTE`je{-mr&0P3aU9&!fk!!qw z{1F4G(P{)Hc#|&IYRIt-LB7bt$KJr9xhf1o=%T`yhTYzWV>LX)HA!O$kTy}X(QeeI z7fw4FpJL-t=zBi}t+>hUkKrcE{n_$VHk%M=U0j$uSah#Ufle!KUP;BY)KN@@!W!bk zADG{|)eSw*wflmp&@v+;8b~$;MHQWkv67jtCeFtp>XwG)(H;<%>G=Y;fAgxejUawC z)h)_%T`H?Pu+9bau%!}4CQf~sI0d#)|ITHj9GX>&17e$QABBl(w%%(T90GgzO!py% v@twPgE@6tleXaZZVE|cBk?j8x=S)$e|CAOTmHu7)-!up~5>}&Q|Kk4ua`~<9 literal 0 HcmV?d00001 diff --git a/compulse/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/compulse/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 0000000..0bedcf2 --- /dev/null +++ b/compulse/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/compulse/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/compulse/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/compulse/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/compulse/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/compulse/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/compulse/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/compulse/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/compulse/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000..89c2725 --- /dev/null +++ b/compulse/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/compulse/ios/Runner/Base.lproj/LaunchScreen.storyboard b/compulse/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..f2e259c --- /dev/null +++ b/compulse/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/compulse/ios/Runner/Base.lproj/Main.storyboard b/compulse/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f3c2851 --- /dev/null +++ b/compulse/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/compulse/ios/Runner/Info.plist b/compulse/ios/Runner/Info.plist new file mode 100644 index 0000000..10af817 --- /dev/null +++ b/compulse/ios/Runner/Info.plist @@ -0,0 +1,47 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Compulse + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + compulse + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + + diff --git a/compulse/ios/Runner/Runner-Bridging-Header.h b/compulse/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000..308a2a5 --- /dev/null +++ b/compulse/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/compulse/lib/banner.png b/compulse/lib/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..349edbb4c220061527998ffcc23eabf9773cc632 GIT binary patch literal 6222 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

E^(*wS0FCz3on zB$uzv*b*%Fwryi)RfK5tfe255#XM*XwH{d*0j4 z=6;l-6_hof{^&)wPTGa@&zU{eDp#Ww(YKQ_9$+&(;Wj3w_F!XkYRj-2NUnu{<2b)N(oITrO0pS$2= zyxTmDkZ_;~9kjyn&9$!xnWj=^v;tn z!oWTpAYA!qL{p7ZPJ6zYuMZ6PKx zX?az(SufSD%q%1)^?KkBFhK%PXGbkD{W#cY8F>YgH~K~Q(M;uRv^V*QcVBO$+y*kV zuz{M> read(Function f) async { + final directory = await getApplicationDocumentsDirectory(); + final file = File('${directory.path}/reminderTiles.txt'); + List list = []; + if (await file.exists()) { + List lines = await file.readAsLines(); + for (int i = 0; i < lines.length; i++) { + Map line = Map.from(json.decode(lines[i])); + list.add(StatusTile(taskText: line["taskText"]!, timeDone: line["timeDone"]!, isDone: line["isDone"]!.toLowerCase() == 'true', videoPath: line["videoPath"]!, key: Key(line["taskText"]!), delete: f,)); + } + return list; + } else { + return []; + } + + +} + +write(List l) async { + final directory = await getApplicationDocumentsDirectory(); + final file = File('${directory.path}/reminderTiles.txt'); + String s = ""; + for (int i = 0; i < l.length; i++) { + s += json.encode(l[i].str()) + "\n"; + } + await file.writeAsString(s); +} \ No newline at end of file diff --git a/compulse/lib/getVideo.dart b/compulse/lib/getVideo.dart new file mode 100644 index 0000000..edb4b65 --- /dev/null +++ b/compulse/lib/getVideo.dart @@ -0,0 +1,15 @@ +import 'dart:async'; +import 'package:image_picker/image_picker.dart'; +import 'package:path_provider/path_provider.dart'; + +Future recordVideo(){ + return ImagePicker().pickVideo(source: ImageSource.camera, maxDuration: const Duration(seconds: 10)); +} + +Future recordToDisk(String name) async { + XFile? videoFile = await ImagePicker().pickVideo(source: ImageSource.camera, maxDuration: const Duration(seconds: 10)); + final directory = await getApplicationDocumentsDirectory(); + + videoFile?.saveTo(directory.path + "/$name.max"); + return (directory.path + "/$name.max"); +} \ No newline at end of file diff --git a/compulse/lib/login.dart b/compulse/lib/login.dart new file mode 100644 index 0000000..7ecbf17 --- /dev/null +++ b/compulse/lib/login.dart @@ -0,0 +1,86 @@ +import 'package:flutter/material.dart'; + +const PRIMARY_COLOR = 0xFF2F3B48; +const SECONDARY_COLOR = 0xFFFDF5EB; +const BUTTON_GREEN = 0xFF00C475; + +class LoginRoute extends StatelessWidget { + LoginRoute({Key? key}) : super(key: key); + + final TextEditingController usernameController = TextEditingController(); + // final TextEditingController passwordController = TextEditingController(); + final _formKey = GlobalKey(); + + void _sendUsernameBack(BuildContext context, bool isLogin) { + Navigator.pop(context, [usernameController.text, isLogin]); + } + + String? isNotEmpty(value) { + if (value.isEmpty) { + return 'Please enter a value'; + } + return null; + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Color(PRIMARY_COLOR), + appBar: AppBar( + backgroundColor: Color(PRIMARY_COLOR), + iconTheme: IconThemeData(color: Color(SECONDARY_COLOR)), + title: const Text('Log In', style: TextStyle(color: Color(SECONDARY_COLOR)),), + ), + body: Center( + child: Form( + key: _formKey, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Container( + width: 300.0, + padding: const EdgeInsets.only(bottom: 10.0), + child: TextFormField( + controller: usernameController, + decoration: const InputDecoration( + fillColor: Color(SECONDARY_COLOR), + filled: true, + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: Color(BUTTON_GREEN)), + borderRadius: BorderRadius.all(Radius.circular(10)), + ), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(color: Color(BUTTON_GREEN)), + borderRadius: BorderRadius.all(Radius.circular(10)), + ), + border: OutlineInputBorder( + borderSide: BorderSide(color: Color(BUTTON_GREEN)), + borderRadius: BorderRadius.all(Radius.circular(10)), + ), + hintText: 'Enter your username', + ), + autocorrect: false, + autofocus: true, + validator: isNotEmpty)), + ElevatedButton( + style: ButtonStyle(backgroundColor: MaterialStateProperty.all(Color(BUTTON_GREEN))), + onPressed: () { + if (_formKey.currentState!.validate()) { + _sendUsernameBack(context, true); + } + }, + child: const Text("Log In"), + ), + ElevatedButton( + style: ButtonStyle(backgroundColor: MaterialStateProperty.all(Color(BUTTON_GREEN))), + onPressed: () { + if (_formKey.currentState!.validate()) { + _sendUsernameBack(context, false); + } + }, + child: const Text("Sign Up"), + ) + ])), + )); + } +} \ No newline at end of file diff --git a/compulse/lib/main.dart b/compulse/lib/main.dart new file mode 100644 index 0000000..438a2b3 --- /dev/null +++ b/compulse/lib/main.dart @@ -0,0 +1,168 @@ +import 'package:flutter/material.dart'; +import 'fileHandler.dart'; +import 'statusTile.dart'; +import 'newItemPage.dart'; +import 'login.dart'; +import 'serviceCalls.dart'; +import 'package:google_fonts/google_fonts.dart'; + +const PRIMARY_COLOR = 0xFF2F3B48; +const SECONDARY_COLOR = 0xFFFDF5EB; +const BUTTON_GREEN = 0xFF00C475; + +void main(List args) { + runApp(CheckUpApp1()); +} + +class CheckUpApp1 extends StatelessWidget { + + + const CheckUpApp1({Key? key}) : super(key: key); + + + // This widget is the root of your application. + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Check-Up', + home: const CheckUpApp(), + ); + } +} + +class CheckUpApp extends StatefulWidget { + + const CheckUpApp({Key? key}) : super(key: key); + + @override + _CheckUpAppState createState() => _CheckUpAppState(); +} + +class _CheckUpAppState extends State { + String username = ""; + late Future> _listFuture; + + + void removeItemList(StatusTile t) async { + List s = await _listFuture; + s.remove(t); + write(s); + postUpdate(username, s); + refreshList(); + } + + void addItemList(StatusTile t) async { + List s = await _listFuture; + s.add(t); + write(s); + postUpdate(username, s); + refreshList(); + } + + void refreshList() { + setState(() { + _listFuture = updateList(); + }); + } + + @override + void initState() { + super.initState(); + _listFuture = updateList(); + } + + Future> updateList() async { + return await read(removeItemList); + } + + @override + Widget build(BuildContext context) { + return FutureBuilder>( + future: _listFuture, + builder: + (BuildContext context, AsyncSnapshot> snapshot) { + if (snapshot.hasData) { + final List items = snapshot.data!.toList(); + return MaterialApp( + theme: ThemeData( + primaryColor: Color(PRIMARY_COLOR), + backgroundColor: Color(SECONDARY_COLOR)), + home: Scaffold( + backgroundColor: Color(PRIMARY_COLOR), + appBar: AppBar( + backgroundColor: Color(PRIMARY_COLOR), + title: const Image(image: AssetImage('assets/banner.png')), + actions: [TextButton(child: Icon(Icons.person, color: Color(BUTTON_GREEN),), onPressed: () {_login(context);},)], + ), + body: ReorderableListView( + children: items, + onReorder: (int oldIndex, int newIndex) { + if (oldIndex < newIndex) { + newIndex -= 1; + } + final StatusTile item = items.removeAt(oldIndex); + items.insert(newIndex, item); + write(items); + postUpdate(username, items); + }), + floatingActionButton: FloatingActionButton( + foregroundColor: Color(SECONDARY_COLOR), + backgroundColor: Color(BUTTON_GREEN), + onPressed: () {_awaitAcess(context);}, + tooltip: "Add Item", + child: const Icon(Icons.add), + ), + ), + ); + } + return MaterialApp( + home: Scaffold( + appBar: AppBar( + backgroundColor: Color(PRIMARY_COLOR), + title: const Image(image: AssetImage('assets/banner.png')), + ), + floatingActionButton: FloatingActionButton( + foregroundColor: Color(SECONDARY_COLOR), + backgroundColor: Color(BUTTON_GREEN), + onPressed: () {_awaitAcess(context);}, + tooltip: "Add Item", + child: const Icon(Icons.add), + ), + )); + }); + } + + void _login(BuildContext context) async { + final result = await Navigator.push( + context, + MaterialPageRoute( + builder: (context) => LoginRoute(), + ), + ); + username = result[0]; + if (result[1] == false) { + postInsert(result[0], await _listFuture); + } else { + _listFuture = getSelect(result[0], removeItemList); + List s = await _listFuture; + write(s); + refreshList(); + } + } + + void _awaitAcess(BuildContext context) async { + final result = await Navigator.push( + context, + MaterialPageRoute( + builder: (context) => AddListItemRoute(), + ), + ); + if (result != null) { + setState(() { + addItemList(StatusTile(taskText: result, isDone: false, key: Key(result), timeDone: "Not done yet", videoPath: "", delete: removeItemList,)); + }); + } + } +} + + diff --git a/compulse/lib/newItemPage.dart b/compulse/lib/newItemPage.dart new file mode 100644 index 0000000..370d6e8 --- /dev/null +++ b/compulse/lib/newItemPage.dart @@ -0,0 +1,79 @@ +import 'package:flutter/material.dart'; + +const PRIMARY_COLOR = 0xFF2F3B48; +const SECONDARY_COLOR = 0xFFFDF5EB; +const BUTTON_GREEN = 0xFF00C475; + +class AddListItemRoute extends StatelessWidget { + AddListItemRoute({Key? key}) : super(key: key); + + final TextEditingController taskTitleController = TextEditingController(); + final _formKey = GlobalKey(); + + void _sendDataBack(BuildContext context) { + Navigator.pop(context, taskTitleController.text); + } + + String? isNotEmpty(value) { + if (value.isEmpty) { + return 'Please enter a value'; + } + return null; + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Color(PRIMARY_COLOR), + appBar: AppBar( + backgroundColor: Color(PRIMARY_COLOR), + iconTheme: IconThemeData(color: Color(SECONDARY_COLOR)), + title: const Text('Add New Task', style: TextStyle(color: Color(SECONDARY_COLOR)),), + ), + body: Center( + child: Form( + key: _formKey, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Container( + width: 300.0, + padding: const EdgeInsets.only(bottom: 10.0), + child: TextFormField( + style: TextStyle(color: Color(PRIMARY_COLOR)), + controller: taskTitleController, + decoration: const InputDecoration( + fillColor: Color(SECONDARY_COLOR), + filled: true, + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: Color(BUTTON_GREEN)), + borderRadius: BorderRadius.all(Radius.circular(10)), + ), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(color: Color(BUTTON_GREEN)), + borderRadius: BorderRadius.all(Radius.circular(10)), + ), + border: OutlineInputBorder( + borderSide: BorderSide(color: Color(BUTTON_GREEN)), + borderRadius: BorderRadius.all(Radius.circular(10)), + ), + + hintText: 'Enter task description', + ), + autocorrect: false, + autofocus: true, + validator: isNotEmpty, + )), + ElevatedButton( + style: ButtonStyle(backgroundColor: MaterialStateProperty.all(Color(BUTTON_GREEN))), + onPressed: () { + if (_formKey.currentState!.validate()) { + _sendDataBack(context); + } + }, + child: const Text("Add Task"), + ) + ]))), + ); + } +} \ No newline at end of file diff --git a/compulse/lib/serviceCalls.dart b/compulse/lib/serviceCalls.dart new file mode 100644 index 0000000..84c4fb9 --- /dev/null +++ b/compulse/lib/serviceCalls.dart @@ -0,0 +1,60 @@ +import 'dart:convert'; + +import 'package:flutter/material.dart'; +import 'package:http/http.dart' as http; +import 'statusTile.dart'; +import 'dart:convert'; + +void postInsert(String username, List l) { + String data = ""; + for (int i = 0; i < l.length; i++) { + data += json.encode(l[i].str()) + "\n"; + } + http.post( + Uri.parse("https://checkup-cloudsql-api-6fcck7nssq-uc.a.run.app/insert"), + headers: { + 'Content-Type': 'application/json; charset=UTF-8', + }, + body: jsonEncode({'username': username, 'data': data})); +} + +Future> getSelect(String username, Function f) async { + var response = await http.get( + Uri.parse("https://checkup-cloudsql-api-6fcck7nssq-uc.a.run.app/select") + .replace(queryParameters: { + "username": username + })); +print(response.body); + + Map result = Map.from(json.decode(response.body)); + + List list = []; + print(result["Data"]); + + List lines = LineSplitter.split(result["Data"]).toList(); + for (int i = 0; i < lines.length; i++) { + Map line = Map.from(json.decode(lines[i])); + list.add(StatusTile( + taskText: line["taskText"]!, + timeDone: line["timeDone"]!, + isDone: line["isDone"]!.toLowerCase() == 'true', + videoPath: line["videoPath"]!, + key: Key(line["taskText"]!), + delete: f, + )); + } + return list; +} + +void postUpdate(String username, List l) { + String data = ""; + for (int i = 0; i < l.length; i++) { + data += json.encode(l[i].str()) + "\n"; + } + http.post( + Uri.parse("https://checkup-cloudsql-api-6fcck7nssq-uc.a.run.app/update"), + headers: { + 'Content-Type': 'application/json; charset=UTF-8', + }, + body: jsonEncode({'username': username, 'data': data})); +} diff --git a/compulse/lib/statusTile.dart b/compulse/lib/statusTile.dart new file mode 100644 index 0000000..5308873 --- /dev/null +++ b/compulse/lib/statusTile.dart @@ -0,0 +1,155 @@ +import 'package:camera/camera.dart'; +import 'package:flutter/material.dart'; +import 'dart:convert'; +import 'getVideo.dart'; +import 'videoScreen.dart'; + +const PRIMARY_COLOR = 0xFF2F3B48; +const SECONDARY_COLOR = 0xFFFDF5EB; +const BUTTON_GREEN = 0xFF00C475; + +class StatusTile extends StatefulWidget { + final String taskText; + String timeDone; + bool isDone; + String videoPath; + Key key; + Function delete; + + StatusTile( + {required this.taskText, + required this.isDone, + required this.key, + required this.timeDone, + required this.videoPath, + required this.delete}); + + void remove() { + delete(this); + } + + @override + _StatusTileState createState() => _StatusTileState(); + + Map str() { + return { + "taskText": taskText, + "timeDone": timeDone, + "isDone": isDone.toString(), + "videoPath": videoPath + }; + } +} + +class _StatusTileState extends State { + var displayVideo = false; + + void setVideo(bool b) { + setState(() { + displayVideo = b; + }); + } + + void updateTime(String s) { + setState(() { + widget.timeDone = s; + }); + } + + void updateVideo(String x) async { + String s = await recordToDisk(x); + setState(() { + widget.videoPath = s; + }); + debugPrint(widget.videoPath); + } + + void updateIsDone(bool b) { + setState(() { + widget.isDone = b; + }); + } + + List expand() { + if (displayVideo == true && widget.videoPath != "") { + return [Column(children: [ButtonBar( + children: [ + TextButton( + style: ButtonStyle(foregroundColor: MaterialStateProperty.all(Color(BUTTON_GREEN))), + onPressed: () { + widget.remove(); + }, + child: Icon(Icons.delete_forever)), + TextButton( + style: ButtonStyle(foregroundColor: MaterialStateProperty.all(Color(BUTTON_GREEN))), + onPressed: () { + setVideo(!displayVideo); + }, + child: widget.videoPath == "" ? Icon(Icons.camera_alt) : Icon(Icons.play_arrow)), + TextButton( + style: ButtonStyle(foregroundColor: MaterialStateProperty.all(Color(BUTTON_GREEN))), + onPressed: () { + setVideo(false); + widget.videoPath = ""; + DateTime d = DateTime.now(); + updateTime("Last completed on ${d.month}/${d.day}/${d.year} at ${d.hour}:${d.minute}"); + }, + child: Icon(Icons.check)), + ], + alignment: MainAxisAlignment.center, + ), + VideoPlayerScreen(widget.videoPath), + ], + ) + ]; + } else { + return [ButtonBar( + children: [ + TextButton( + style: ButtonStyle(foregroundColor: MaterialStateProperty.all(Color(BUTTON_GREEN))), + onPressed: () { + widget.remove(); + }, + child: Icon(Icons.delete_forever)), + TextButton( + style: ButtonStyle(foregroundColor: MaterialStateProperty.all(Color(BUTTON_GREEN))), + onPressed: () { + if (widget.videoPath == "") { + updateVideo(widget.taskText); + } else { + setVideo(!displayVideo); + } + + }, + child: widget.videoPath == "" ? Icon(Icons.camera_alt) : Icon(Icons.play_arrow)), + TextButton( + style: ButtonStyle(foregroundColor: MaterialStateProperty.all(Color(BUTTON_GREEN))), + onPressed: () { + setVideo(false); + widget.videoPath = ""; + DateTime d = DateTime.now(); + updateTime( + "Last completed on ${d.month}/${d.day}/${d.year} at ${d.hour}:${d.minute}"); + }, + child: Icon(Icons.check)), + ], + alignment: MainAxisAlignment.center, + )]; + } + } + + @override + Widget build(BuildContext context) { + return ExpansionTile( + iconColor: Color(SECONDARY_COLOR), + collapsedIconColor: Color(SECONDARY_COLOR), + backgroundColor: Color(PRIMARY_COLOR), + collapsedBackgroundColor: Color(PRIMARY_COLOR), + key: widget.key, + title: Text(widget.taskText, style: TextStyle(color: Color(SECONDARY_COLOR)),), + subtitle: Text(widget.timeDone, style: TextStyle(color: Color(SECONDARY_COLOR)),), + children: expand(), + ); +} +} + diff --git a/compulse/lib/videoScreen.dart b/compulse/lib/videoScreen.dart new file mode 100644 index 0000000..df3627c --- /dev/null +++ b/compulse/lib/videoScreen.dart @@ -0,0 +1,56 @@ +import 'dart:async'; +import 'dart:io'; + +import 'package:flutter/material.dart'; +import 'package:video_player/video_player.dart'; + +class VideoPlayerScreen extends StatefulWidget { + String path; + + VideoPlayerScreen(this.path); + + @override + _VideoPlayerScreenState createState() => _VideoPlayerScreenState(); +} + +class _VideoPlayerScreenState extends State { + late VideoPlayerController _controller; + late Future _initializeVideoPlayerFuture; + + @override + void initState() { + super.initState(); + _controller = VideoPlayerController.file(File(widget.path)); + + _initializeVideoPlayerFuture = _controller.initialize(); + + _controller.setLooping(true); + } + + @override + void dispose() { + _controller.dispose(); + + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return FutureBuilder( + future: _initializeVideoPlayerFuture, + builder: (context, snapshot) { + if (snapshot.connectionState == ConnectionState.done) { + _controller.play(); + return AspectRatio( + aspectRatio: _controller.value.aspectRatio, + child: VideoPlayer(_controller), + ); + } else { + return const Center( + child: CircularProgressIndicator(), + ); + } + }, + ); + } +} \ No newline at end of file diff --git a/compulse/pubspec.lock b/compulse/pubspec.lock new file mode 100644 index 0000000..3529798 --- /dev/null +++ b/compulse/pubspec.lock @@ -0,0 +1,467 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + archive: + dependency: transitive + description: + name: archive + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.11" + args: + dependency: transitive + description: + name: args + url: "https://pub.dartlang.org" + source: hosted + version: "2.3.0" + async: + dependency: transitive + description: + name: async + url: "https://pub.dartlang.org" + source: hosted + version: "2.8.2" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + camera: + dependency: "direct main" + description: + name: camera + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.4+9" + camera_platform_interface: + dependency: transitive + description: + name: camera_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.5" + camera_web: + dependency: transitive + description: + name: camera_web + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.1+1" + characters: + dependency: transitive + description: + name: characters + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + charcode: + dependency: transitive + description: + name: charcode + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.1" + clock: + dependency: transitive + description: + name: clock + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + collection: + dependency: transitive + description: + name: collection + url: "https://pub.dartlang.org" + source: hosted + version: "1.15.0" + cross_file: + dependency: transitive + description: + name: cross_file + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.2" + crypto: + dependency: transitive + description: + name: crypto + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.1" + csslib: + dependency: transitive + description: + name: csslib + url: "https://pub.dartlang.org" + source: hosted + version: "0.17.1" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.4" + fake_async: + dependency: transitive + description: + name: fake_async + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + ffi: + dependency: transitive + description: + name: ffi + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.2" + file: + dependency: transitive + description: + name: file + url: "https://pub.dartlang.org" + source: hosted + version: "6.1.2" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_launcher_icons: + dependency: "direct main" + description: + name: flutter_launcher_icons + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.2" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.4" + flutter_plugin_android_lifecycle: + dependency: transitive + description: + name: flutter_plugin_android_lifecycle + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.5" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + google_fonts: + dependency: "direct main" + description: + name: google_fonts + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.0" + html: + dependency: transitive + description: + name: html + url: "https://pub.dartlang.org" + source: hosted + version: "0.15.0" + http: + dependency: transitive + description: + name: http + url: "https://pub.dartlang.org" + source: hosted + version: "0.13.4" + http_parser: + dependency: transitive + description: + name: http_parser + url: "https://pub.dartlang.org" + source: hosted + version: "4.0.0" + image: + dependency: transitive + description: + name: image + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.1" + image_picker: + dependency: "direct main" + description: + name: image_picker + url: "https://pub.dartlang.org" + source: hosted + version: "0.8.4+5" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.5" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.4.3" + js: + dependency: transitive + description: + name: js + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.3" + lints: + dependency: transitive + description: + name: lints + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + matcher: + dependency: transitive + description: + name: matcher + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.11" + meta: + dependency: transitive + description: + name: meta + url: "https://pub.dartlang.org" + source: hosted + version: "1.7.0" + path: + dependency: transitive + description: + name: path + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.0" + path_provider: + dependency: "direct main" + description: + name: path_provider + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.8" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.11" + path_provider_ios: + dependency: transitive + description: + name: path_provider_ios + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.7" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.5" + path_provider_macos: + dependency: transitive + description: + name: path_provider_macos + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.5" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.3" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.5" + pedantic: + dependency: transitive + description: + name: pedantic + url: "https://pub.dartlang.org" + source: hosted + version: "1.11.1" + petitparser: + dependency: transitive + description: + name: petitparser + url: "https://pub.dartlang.org" + source: hosted + version: "4.4.0" + platform: + dependency: transitive + description: + name: platform + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.0" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.2" + process: + dependency: transitive + description: + name: process + url: "https://pub.dartlang.org" + source: hosted + version: "4.2.4" + quiver: + dependency: transitive + description: + name: quiver + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.1+1" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.1" + stack_trace: + dependency: transitive + description: + name: stack_trace + url: "https://pub.dartlang.org" + source: hosted + version: "1.10.0" + stream_channel: + dependency: transitive + description: + name: stream_channel + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + stream_transform: + dependency: transitive + description: + name: stream_transform + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + test_api: + dependency: transitive + description: + name: test_api + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.3" + typed_data: + dependency: transitive + description: + name: typed_data + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.0" + vector_math: + dependency: transitive + description: + name: vector_math + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.1" + video_player: + dependency: "direct main" + description: + name: video_player + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.16" + video_player_platform_interface: + dependency: transitive + description: + name: video_player_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "5.0.1" + video_player_web: + dependency: transitive + description: + name: video_player_web + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.6" + win32: + dependency: transitive + description: + name: win32 + url: "https://pub.dartlang.org" + source: hosted + version: "2.3.8" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.0" + xml: + dependency: transitive + description: + name: xml + url: "https://pub.dartlang.org" + source: hosted + version: "5.3.1" + yaml: + dependency: transitive + description: + name: yaml + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.0" +sdks: + dart: ">=2.15.1 <3.0.0" + flutter: ">=2.5.0" diff --git a/compulse/pubspec.yaml b/compulse/pubspec.yaml new file mode 100644 index 0000000..f8cf3bc --- /dev/null +++ b/compulse/pubspec.yaml @@ -0,0 +1,99 @@ +name: compulse +description: A new Flutter project. + +# The following line prevents the package from being accidentally published to +# pub.dev using `flutter pub publish`. This is preferred for private packages. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev + +# The following defines the version and build number for your application. +# A version number is three numbers separated by dots, like 1.2.43 +# followed by an optional build number separated by a +. +# Both the version and the builder number may be overridden in flutter +# build by specifying --build-name and --build-number, respectively. +# In Android, build-name is used as versionName while build-number used as versionCode. +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning +# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +version: 1.0.0+1 + +environment: + sdk: ">=2.15.1 <3.0.0" + +# Dependencies specify other packages that your package needs in order to work. +# To automatically upgrade your package dependencies to the latest versions +# consider running `flutter pub upgrade --major-versions`. Alternatively, +# dependencies can be manually updated by changing the version numbers below to +# the latest version available on pub.dev. To see which dependencies have newer +# versions available, run `flutter pub outdated`. +dependencies: + flutter: + sdk: flutter + + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^1.0.2 + camera: ^0.9.4+9 + video_player: ^2.2.16 + image_picker: ^0.8.4+5 + path_provider: ^2.0.8 + flutter_launcher_icons: ^0.9.2 + google_fonts: ^2.2.0 + +dev_dependencies: + flutter_test: + sdk: flutter + + # The "flutter_lints" package below contains a set of recommended lints to + # encourage good coding practices. The lint set provided by the package is + # activated in the `analysis_options.yaml` file located at the root of your + # package. See that file for information about deactivating specific lint + # rules and activating additional ones. + flutter_lints: ^1.0.0 + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec +flutter_icons: + android: "launcher_icon" + ios: true + image_path: "assets/favicon.png" +# The following section is specific to Flutter. +flutter: + + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + + # To add assets to your application, add an assets section, like this: + assets: + - assets/banner.png + # - images/a_dot_burr.jpeg + # - images/a_dot_ham.jpeg + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/assets-and-images/#resolution-aware. + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/assets-and-images/#from-packages + + # To add custom fonts to your application, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts from package dependencies, + # see https://flutter.dev/custom-fonts/#from-packages diff --git a/compulse/test/widget_test.dart b/compulse/test/widget_test.dart new file mode 100644 index 0000000..435ce31 --- /dev/null +++ b/compulse/test/widget_test.dart @@ -0,0 +1,30 @@ +// This is a basic Flutter widget test. +// +// To perform an interaction with a widget in your test, use the WidgetTester +// utility that Flutter provides. For example, you can send tap and scroll +// gestures. You can also use WidgetTester to find child widgets in the widget +// tree, read text, and verify that the values of widget properties are correct. + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import 'package:compulse/main.dart'; + +void main() { + testWidgets('Counter increments smoke test', (WidgetTester tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(const CheckUpApp()); + + // Verify that our counter starts at 0. + expect(find.text('0'), findsOneWidget); + expect(find.text('1'), findsNothing); + + // Tap the '+' icon and trigger a frame. + await tester.tap(find.byIcon(Icons.add)); + await tester.pump(); + + // Verify that our counter has incremented. + expect(find.text('0'), findsNothing); + expect(find.text('1'), findsOneWidget); + }); +} diff --git a/compulse/web/icons/Icon-192.png b/compulse/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 zcmZ`-2T+sGz6~)*FVZ`aW+(v>MIm&M-g^@e2u-B-DoB?qO+b1Tq<5uCCv>ESfRum& zp%X;f!~1{tzL__3=gjVJ=j=J>+nMj%ncXj1Q(b|Ckbw{Y0FWpt%4y%$uD=Z*c-x~o zE;IoE;xa#7Ll5nj-e4CuXB&G*IM~D21rCP$*xLXAK8rIMCSHuSu%bL&S3)8YI~vyp@KBu9Ph7R_pvKQ@xv>NQ`dZp(u{Z8K3yOB zn7-AR+d2JkW)KiGx0hosml;+eCXp6+w%@STjFY*CJ?udJ64&{BCbuebcuH;}(($@@ znNlgBA@ZXB)mcl9nbX#F!f_5Z=W>0kh|UVWnf!At4V*LQP%*gPdCXd6P@J4Td;!Ur z<2ZLmwr(NG`u#gDEMP19UcSzRTL@HsK+PnIXbVBT@oHm53DZr?~V(0{rsalAfwgo zEh=GviaqkF;}F_5-yA!1u3!gxaR&Mj)hLuj5Q-N-@Lra{%<4ONja8pycD90&>yMB` zchhd>0CsH`^|&TstH-8+R`CfoWqmTTF_0?zDOY`E`b)cVi!$4xA@oO;SyOjJyP^_j zx^@Gdf+w|FW@DMdOi8=4+LJl$#@R&&=UM`)G!y%6ZzQLoSL%*KE8IO0~&5XYR9 z&N)?goEiWA(YoRfT{06&D6Yuu@Qt&XVbuW@COb;>SP9~aRc+z`m`80pB2o%`#{xD@ zI3RAlukL5L>px6b?QW1Ac_0>ew%NM!XB2(H+1Y3AJC?C?O`GGs`331Nd4ZvG~bMo{lh~GeL zSL|tT*fF-HXxXYtfu5z+T5Mx9OdP7J4g%@oeC2FaWO1D{=NvL|DNZ}GO?O3`+H*SI z=grGv=7dL{+oY0eJFGO!Qe(e2F?CHW(i!!XkGo2tUvsQ)I9ev`H&=;`N%Z{L zO?vV%rDv$y(@1Yj@xfr7Kzr<~0{^T8wM80xf7IGQF_S-2c0)0D6b0~yD7BsCy+(zL z#N~%&e4iAwi4F$&dI7x6cE|B{f@lY5epaDh=2-(4N05VO~A zQT3hanGy_&p+7Fb^I#ewGsjyCEUmSCaP6JDB*=_()FgQ(-pZ28-{qx~2foO4%pM9e z*_63RT8XjgiaWY|*xydf;8MKLd{HnfZ2kM%iq}fstImB-K6A79B~YoPVa@tYN@T_$ zea+9)<%?=Fl!kd(Y!G(-o}ko28hg2!MR-o5BEa_72uj7Mrc&{lRh3u2%Y=Xk9^-qa zBPWaD=2qcuJ&@Tf6ue&)4_V*45=zWk@Z}Q?f5)*z)-+E|-yC4fs5CE6L_PH3=zI8p z*Z3!it{1e5_^(sF*v=0{`U9C741&lub89gdhKp|Y8CeC{_{wYK-LSbp{h)b~9^j!s z7e?Y{Z3pZv0J)(VL=g>l;<}xk=T*O5YR|hg0eg4u98f2IrA-MY+StQIuK-(*J6TRR z|IM(%uI~?`wsfyO6Tgmsy1b3a)j6M&-jgUjVg+mP*oTKdHg?5E`!r`7AE_#?Fc)&a z08KCq>Gc=ne{PCbRvs6gVW|tKdcE1#7C4e`M|j$C5EYZ~Y=jUtc zj`+?p4ba3uy7><7wIokM79jPza``{Lx0)zGWg;FW1^NKY+GpEi=rHJ+fVRGfXO zPHV52k?jxei_!YYAw1HIz}y8ZMwdZqU%ESwMn7~t zdI5%B;U7RF=jzRz^NuY9nM)&<%M>x>0(e$GpU9th%rHiZsIT>_qp%V~ILlyt^V`=d z!1+DX@ah?RnB$X!0xpTA0}lN@9V-ePx>wQ?-xrJr^qDlw?#O(RsXeAvM%}rg0NT#t z!CsT;-vB=B87ShG`GwO;OEbeL;a}LIu=&@9cb~Rsx(ZPNQ!NT7H{@j0e(DiLea>QD zPmpe90gEKHEZ8oQ@6%E7k-Ptn#z)b9NbD@_GTxEhbS+}Bb74WUaRy{w;E|MgDAvHw zL)ycgM7mB?XVh^OzbC?LKFMotw3r@i&VdUV%^Efdib)3@soX%vWCbnOyt@Y4swW925@bt45y0HY3YI~BnnzZYrinFy;L?2D3BAL`UQ zEj))+f>H7~g8*VuWQ83EtGcx`hun$QvuurSMg3l4IP8Fe`#C|N6mbYJ=n;+}EQm;< z!!N=5j1aAr_uEnnzrEV%_E|JpTb#1p1*}5!Ce!R@d$EtMR~%9# zd;h8=QGT)KMW2IKu_fA_>p_und#-;Q)p%%l0XZOXQicfX8M~7?8}@U^ihu;mizj)t zgV7wk%n-UOb z#!P5q?Ex+*Kx@*p`o$q8FWL*E^$&1*!gpv?Za$YO~{BHeGY*5%4HXUKa_A~~^d z=E*gf6&+LFF^`j4$T~dR)%{I)T?>@Ma?D!gi9I^HqvjPc3-v~=qpX1Mne@*rzT&Xw zQ9DXsSV@PqpEJO-g4A&L{F&;K6W60D!_vs?Vx!?w27XbEuJJP&);)^+VF1nHqHBWu z^>kI$M9yfOY8~|hZ9WB!q-9u&mKhEcRjlf2nm_@s;0D#c|@ED7NZE% zzR;>P5B{o4fzlfsn3CkBK&`OSb-YNrqx@N#4CK!>bQ(V(D#9|l!e9(%sz~PYk@8zt zPN9oK78&-IL_F zhsk1$6p;GqFbtB^ZHHP+cjMvA0(LqlskbdYE_rda>gvQLTiqOQ1~*7lg%z*&p`Ry& zRcG^DbbPj_jOKHTr8uk^15Boj6>hA2S-QY(W-6!FIq8h$<>MI>PYYRenQDBamO#Fv zAH5&ImqKBDn0v5kb|8i0wFhUBJTpT!rB-`zK)^SNnRmLraZcPYK7b{I@+}wXVdW-{Ps17qdRA3JatEd?rPV z4@}(DAMf5EqXCr4-B+~H1P#;t@O}B)tIJ(W6$LrK&0plTmnPpb1TKn3?f?Kk``?D+ zQ!MFqOX7JbsXfQrz`-M@hq7xlfNz;_B{^wbpG8des56x(Q)H)5eLeDwCrVR}hzr~= zM{yXR6IM?kXxauLza#@#u?Y|o;904HCqF<8yT~~c-xyRc0-vxofnxG^(x%>bj5r}N zyFT+xnn-?B`ohA>{+ZZQem=*Xpqz{=j8i2TAC#x-m;;mo{{sLB_z(UoAqD=A#*juZ zCv=J~i*O8;F}A^Wf#+zx;~3B{57xtoxC&j^ie^?**T`WT2OPRtC`xj~+3Kprn=rVM zVJ|h5ux%S{dO}!mq93}P+h36mZ5aZg1-?vhL$ke1d52qIiXSE(llCr5i=QUS?LIjc zV$4q=-)aaR4wsrQv}^shL5u%6;`uiSEs<1nG^?$kl$^6DL z43CjY`M*p}ew}}3rXc7Xck@k41jx}c;NgEIhKZ*jsBRZUP-x2cm;F1<5$jefl|ppO zmZd%%?gMJ^g9=RZ^#8Mf5aWNVhjAS^|DQO+q$)oeob_&ZLFL(zur$)); zU19yRm)z<4&4-M}7!9+^Wl}Uk?`S$#V2%pQ*SIH5KI-mn%i;Z7-)m$mN9CnI$G7?# zo`zVrUwoSL&_dJ92YhX5TKqaRkfPgC4=Q&=K+;_aDs&OU0&{WFH}kKX6uNQC6%oUH z2DZa1s3%Vtk|bglbxep-w)PbFG!J17`<$g8lVhqD2w;Z0zGsh-r zxZ13G$G<48leNqR!DCVt9)@}(zMI5w6Wo=N zpP1*3DI;~h2WDWgcKn*f!+ORD)f$DZFwgKBafEZmeXQMAsq9sxP9A)7zOYnkHT9JU zRA`umgmP9d6=PHmFIgx=0$(sjb>+0CHG)K@cPG{IxaJ&Ueo8)0RWgV9+gO7+Bl1(F z7!BslJ2MP*PWJ;x)QXbR$6jEr5q3 z(3}F@YO_P1NyTdEXRLU6fp?9V2-S=E+YaeLL{Y)W%6`k7$(EW8EZSA*(+;e5@jgD^I zaJQ2|oCM1n!A&-8`;#RDcZyk*+RPkn_r8?Ak@agHiSp*qFNX)&i21HE?yuZ;-C<3C zwJGd1lx5UzViP7sZJ&|LqH*mryb}y|%AOw+v)yc`qM)03qyyrqhX?ub`Cjwx2PrR! z)_z>5*!*$x1=Qa-0uE7jy0z`>|Ni#X+uV|%_81F7)b+nf%iz=`fF4g5UfHS_?PHbr zB;0$bK@=di?f`dS(j{l3-tSCfp~zUuva+=EWxJcRfp(<$@vd(GigM&~vaYZ0c#BTs z3ijkxMl=vw5AS&DcXQ%eeKt!uKvh2l3W?&3=dBHU=Gz?O!40S&&~ei2vg**c$o;i89~6DVns zG>9a*`k5)NI9|?W!@9>rzJ;9EJ=YlJTx1r1BA?H`LWijk(rTax9(OAu;q4_wTj-yj z1%W4GW&K4T=uEGb+E!>W0SD_C0RR91 literal 0 HcmV?d00001 diff --git a/compulse/web/icons/Icon-512.png b/compulse/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 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 literal 0 HcmV?d00001 diff --git a/compulse/web/icons/Icon-maskable-192.png b/compulse/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 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 X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! literal 0 HcmV?d00001 diff --git a/compulse/web/icons/Icon-maskable-512.png b/compulse/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 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 MPgg&ebxsLQ025IeI{*Lx literal 0 HcmV?d00001 diff --git a/compulse/web/index.html b/compulse/web/index.html new file mode 100644 index 0000000..a3517ca --- /dev/null +++ b/compulse/web/index.html @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + compulse + + + + + + + diff --git a/compulse/web/manifest.json b/compulse/web/manifest.json new file mode 100644 index 0000000..684235c --- /dev/null +++ b/compulse/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "compulse", + "short_name": "compulse", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +}