From a6c9e9521147a07881f2a1bd2a66593e3058699d Mon Sep 17 00:00:00 2001 From: Albertus Angga Raharja <albertus.angga@ui.ac.id> Date: Mon, 23 Mar 2020 10:09:13 +0700 Subject: [PATCH] Init codebase, CI/CD --- .firebase/hosting.YnVpbGQvd2Vi.cache | 14 + .firebaserc | 5 + .gitignore | 76 ++ .gitlab-ci.yml | 45 ++ README.md | 61 ++ analysis_options.yaml | 5 + android/.gitignore | 7 + android/app/build.gradle | 72 ++ android/app/google-services.json | 40 + android/app/src/debug/AndroidManifest.xml | 7 + android/app/src/main/AndroidManifest.xml | 47 ++ .../com/example/mobile_apps/MainActivity.kt | 6 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes android/app/src/main/res/values/styles.xml | 18 + android/app/src/profile/AndroidManifest.xml | 7 + android/build.gradle | 34 + android/gradle.properties | 4 + .../gradle/wrapper/gradle-wrapper.properties | 6 + android/settings.gradle | 15 + assets/images/google_logo.png | Bin 0 -> 51352 bytes firebase.json | 16 + ios/.gitignore | 32 + ios/Flutter/AppFrameworkInfo.plist | 26 + ios/Flutter/Debug.xcconfig | 2 + ios/Flutter/Release.xcconfig | 2 + ios/Podfile | 87 +++ ios/Runner.xcodeproj/project.pbxproj | 506 +++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 91 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 ++++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 564 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 1588 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 1025 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 1716 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 1920 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 1895 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 3831 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 1888 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 3294 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 3612 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 + ios/Runner/Base.lproj/LaunchScreen.storyboard | 37 + ios/Runner/Base.lproj/Main.storyboard | 26 + ios/Runner/Info.plist | 45 ++ ios/Runner/Runner-Bridging-Header.h | 1 + lib/main.dart | 6 + lib/src/app.dart | 25 + lib/src/common/constants.dart | 4 + lib/src/extensions/scaffold_extension.dart | 16 + lib/src/models/inventory.dart | 31 + lib/src/models/inventory.g.dart | 31 + .../repositories/inventory_repository.dart | 14 + lib/src/routes.dart | 37 + lib/src/screens/home/home_screen.dart | 65 ++ .../screens/home/inventories/inventories.dart | 48 ++ .../screens/home/inventories/inventory.dart | 26 + lib/src/screens/login/login_screen.dart | 89 +++ lib/src/services/auth_service.dart | 11 + lib/src/theme.dart | 44 ++ pubspec.lock | 691 ++++++++++++++++++ pubspec.yaml | 93 +++ test/navigation_test.dart | 10 + web/favicon.png | Bin 0 -> 917 bytes web/icons/Icon-192.png | Bin 0 -> 5292 bytes web/icons/Icon-512.png | Bin 0 -> 8252 bytes web/index.html | 64 ++ web/manifest.json | 23 + 87 files changed, 2889 insertions(+) create mode 100644 .firebase/hosting.YnVpbGQvd2Vi.cache create mode 100644 .firebaserc create mode 100644 .gitignore create mode 100644 .gitlab-ci.yml create mode 100644 README.md create mode 100644 analysis_options.yaml create mode 100644 android/.gitignore create mode 100644 android/app/build.gradle create mode 100644 android/app/google-services.json create mode 100644 android/app/src/debug/AndroidManifest.xml create mode 100644 android/app/src/main/AndroidManifest.xml create mode 100644 android/app/src/main/kotlin/com/example/mobile_apps/MainActivity.kt create mode 100644 android/app/src/main/res/drawable/launch_background.xml create mode 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/values/styles.xml create mode 100644 android/app/src/profile/AndroidManifest.xml create mode 100644 android/build.gradle create mode 100644 android/gradle.properties create mode 100644 android/gradle/wrapper/gradle-wrapper.properties create mode 100644 android/settings.gradle create mode 100644 assets/images/google_logo.png create mode 100644 firebase.json create mode 100644 ios/.gitignore create mode 100644 ios/Flutter/AppFrameworkInfo.plist create mode 100644 ios/Flutter/Debug.xcconfig create mode 100644 ios/Flutter/Release.xcconfig create mode 100644 ios/Podfile create mode 100644 ios/Runner.xcodeproj/project.pbxproj create mode 100644 ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 ios/Runner/AppDelegate.swift create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 ios/Runner/Base.lproj/Main.storyboard create mode 100644 ios/Runner/Info.plist create mode 100644 ios/Runner/Runner-Bridging-Header.h create mode 100644 lib/main.dart create mode 100644 lib/src/app.dart create mode 100644 lib/src/common/constants.dart create mode 100644 lib/src/extensions/scaffold_extension.dart create mode 100644 lib/src/models/inventory.dart create mode 100644 lib/src/models/inventory.g.dart create mode 100644 lib/src/repositories/inventory_repository.dart create mode 100644 lib/src/routes.dart create mode 100644 lib/src/screens/home/home_screen.dart create mode 100644 lib/src/screens/home/inventories/inventories.dart create mode 100644 lib/src/screens/home/inventories/inventory.dart create mode 100644 lib/src/screens/login/login_screen.dart create mode 100644 lib/src/services/auth_service.dart create mode 100644 lib/src/theme.dart create mode 100644 pubspec.lock create mode 100644 pubspec.yaml create mode 100644 test/navigation_test.dart create mode 100644 web/favicon.png create mode 100644 web/icons/Icon-192.png create mode 100644 web/icons/Icon-512.png create mode 100644 web/index.html create mode 100644 web/manifest.json diff --git a/.firebase/hosting.YnVpbGQvd2Vi.cache b/.firebase/hosting.YnVpbGQvd2Vi.cache new file mode 100644 index 0000000..9c0a10e --- /dev/null +++ b/.firebase/hosting.YnVpbGQvd2Vi.cache @@ -0,0 +1,14 @@ +favicon.png,1584779381428,fcc7c4545d5b62ad01682589e6fdc7ea03d0a3b42069963c815c344b632eb5cf +flutter_service_worker.js,1584901267607,8f801cedfa47876022973baf2c58466ca901503e035e0ecc23be15a326912675 +manifest.json,1584783582956,ec5652f2a192fb913800fb92fafcd77941e2d9c4fade39fe6c7abac9ed9e3170 +assets/AssetManifest.json,1584901267102,3483c0e5487d0a84a9d3ed20281d4ba7800154bc6194d426987fb0187fc24a31 +assets/FontManifest.json,1584901267102,9cd4a4d214a9fce72dd36c28e1ef4a60895d922bc0e25613a2539a6fdd1a3921 +index.html,1584893603570,ccae05411f7685dde888dba2a5c76d0e7f6e9fee83f6c2febf4734eac8d0287f +icons/Icon-192.png,1584779381428,d2e0131bb7851eb9d98f7885edb5ae4b4d6b7a6c7addf8a25b9b712b39274c0f +icons/Icon-512.png,1584779381428,7a31ce91e554f1941158ca46f31c7f3f2b7c8c129229ea74a8fae1affe335033 +assets/assets/images/google_logo.png,1584889755884,617c12e1e5d33f572e0e819bacad57d66b0e8292fd07aa04fe7c21746852ffb9 +assets/packages/cupertino_icons/assets/CupertinoIcons.ttf,1575319380000,3d5615fc7a84c016d70e93141c13a613fda9babcede78918fbd190f0b9d5b578 +assets/fonts/MaterialIcons-Regular.ttf,1475273174000,49f9a5d2c31ecd331d178c6c3d587181ce635721e46240a8547f0a5374f3257d +assets/LICENSE,1584901267102,83612489337a65c2e762255b27a9298c3c3940c6b67b2af5ebe0374643ab2d69 +main.dart.js,1584901264058,3bf3fedd30adf74c89a82ba23ec682abd2e30b49dd0a7ea0283f189d5513b76e +main.dart.js.map,1584901264389,5a03322124ee86bbff8700cb6b220a4aea0a40db520d7be4b0e0ec4e99f559d8 diff --git a/.firebaserc b/.firebaserc new file mode 100644 index 0000000..593ffa9 --- /dev/null +++ b/.firebaserc @@ -0,0 +1,5 @@ +{ + "projects": { + "default": "corona-fasilkom" + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8003b58 --- /dev/null +++ b/.gitignore @@ -0,0 +1,76 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# Visual Studio Code related +.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +.dart_tool/ +.flutter-plugins +.packages +.pub-cache/ +.pub/ +/build/ + +# Android related +**/android/**/gradle-wrapper.jar +**/android/.gradle +**/android/captures/ +**/android/gradlew +**/android/gradlew.bat +**/android/local.properties +**/android/**/GeneratedPluginRegistrant.java + +# iOS/XCode related +**/ios/**/*.mode1v3 +**/ios/**/*.mode2v3 +**/ios/**/*.moved-aside +**/ios/**/*.pbxuser +**/ios/**/*.perspectivev3 +**/ios/**/*sync/ +**/ios/**/.sconsign.dblite +**/ios/**/.tags* +**/ios/**/.vagrant/ +**/ios/**/DerivedData/ +**/ios/**/Icon? +**/ios/**/Pods/ +**/ios/**/.symlinks/ +**/ios/**/profile +**/ios/**/xcuserdata +**/ios/.generated/ +**/ios/Flutter/App.framework +**/ios/Flutter/Flutter.framework +**/ios/Flutter/Generated.xcconfig +**/ios/Flutter/app.flx +**/ios/Flutter/app.zip +**/ios/Flutter/flutter_assets/ +**/ios/ServiceDefinitions.json +**/ios/Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!**/ios/**/default.mode1v3 +!**/ios/**/default.mode2v3 +!**/ios/**/default.pbxuser +!**/ios/**/default.perspectivev3 +!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages + +# Plugins generated file +.flutter-plugins +.flutter-plugins-dependencies + +lib/generated_plugin_registrant.dart diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..5eb8514 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,45 @@ +stages: + - lint + - test + - build + - deploy + +lint: + stage: lint + image: cirrusci/flutter:v1.15.3-web + script: + - flutter analyze + +test: + stage: test + image: cirrusci/flutter:v1.15.3-web + stage: test + coverage: '/lines......: \d+\.\d+\%/' + script: + - flutter test --coverage + - lcov --list coverage/lcov.info + - genhtml coverage/lcov.info --output=coverage + artifacts: + paths: + - coverage + +build-web: + stage: build + image: cirrusci/flutter:v1.15.3-web + script: + - flutter config --enable-web + - flutter build web --release + artifacts: + paths: + - build/web + +deploy: + stage: deploy + image: andreysenov/firebase-tools:latest + script: + # This line enables using experimental Skia rendering engine to massively increase Flutter Web performance! + # Remove this line if encounter any issue with rendering. + - FLUTTER_WEB_USE_SKIA=true + - TOKEN="1//0g6T_ox804J8zCgYIARAAGBASNwF-L9IruWNUi840C2WIKLKyZ5zc5ZveCpsbkCeXOeI8YAc_Gly1HynegIbXzXvUCGjiwI2NsVw" + - firebase use corona-fasilkom --token $TOKEN + - firebase deploy --only hosting -m "Pipe $CI_PIPELINE_ID Build $CI_BUILD_ID" --token $TOKEN diff --git a/README.md b/README.md new file mode 100644 index 0000000..9798488 --- /dev/null +++ b/README.md @@ -0,0 +1,61 @@ +# Fasilkom COVID-19 Project +A health care equipment marketplace to help COVID-19 situation. + +## Getting Started +1. Install Flutter by following instructions in [Flutter.dev documentation](https://flutter.dev/docs/get-started/install) +2. Add flutter to your $PATH if you have not done so +3. Switch channel to `beta` to allow compiling to Web by running +```bash +flutter channel beta && flutter upgrade` +``` +4. Run this command to enable compiling to Web +```bash +flutter config --enable-web +``` +5. Run this application in Chrome by running +```bash +flutter run -d chrome +``` +6. Enjoy the benefit of Flutter development! You can do hot reload by pressing r (small r) in the terminal and hot restart by pressing R (capital r), but if you + +## Using Text Editor or IDE +For Flutter development, you can both use VSCode or IntelliJ Idea. +You can also select the devices that you want to target using VSCode or IntelliJ Idea. +In VSCode, you can select the devices in the bottom right of the Editor. +In IntelliJ, there will be Dropdown menu beside the start button. + +## Setting up different Firebase App +For using different Firebase App than the one that is used in this project do: +- Android: Change `android/app/google-services.json` with your own `google-services.json` file +- Web: Change `firebaseConfig` variables in `web/index.html` with your own config from your Firebase console +- iOS: TODO + +## Style Guide +This codebase will use [Effective Dart](https://dart.dev/guides/language/effective-dart) style guide as it's primary source of truth for linting. To achieve strictness of code quality, we use [pedantic](https://pub.dev/packages/pedantic), the package that is used in Google for ensuring code quality and consistency. +If someday in the future we disagree with the convention, please edit `analysis_options.yaml` + + +## Generate JSON Model (Serializer/Deserializer) Class using pub runner +Serializing and deserializing is easy in Flutter because of package `dart:convert`, but using that package requires us to create boilerplate code that tells what JSON key will map to what attribute. Hence, this is not a scalable solution for building a large app. + +To make a new JSON model, we can just import `json_annotations` and declare the class with `@JsonSerializable()` (see example in `models/` directory), but we need code generator to run in our terminal generate the code for us so that we don't have to. To do this, please run: +```bash +flutter pub run build_runner build +``` + +Script above works for building the code one time, so everytime we make a changes to the models class, we have to run the script again. To avoid doing that, we can run it in watch mode by using: +```bash +flutter pub run build_runner watch +``` + +And voila! Flutter will generate the model code for us. + +For more info about JSON serialization head over to [this documentation](https://flutter.dev/docs/development/data-and-backend/json). + +## Architecture/State Management Guide +This Flutter app uses a library called [provider](https://pub.dev/packages/provider) for managing it's state. +Why Provider? Because it is very simple and relatively easier to learn compared to state management patterns like Redux, MobX, etc. +The idea of Provider is actually very simple: Lift the state of a Widget up to the Provider, and make it accessible to all Widget that are descendants of the Provider widget. +According to the author, provider is a mixture between dependency injection and state management, built with widgets for widgets. +If you think that Provider is not clean enough to manage the state, you can combine it by using BLoC Pattern, this pattern is recommended by the Google Flutter team on the Google I/O event. +For more tutorial about Provider pattern, please check out [this link](https://flutter.dev/docs/development/data-and-backend/state-mgmt/simple). diff --git a/analysis_options.yaml b/analysis_options.yaml new file mode 100644 index 0000000..6535cfe --- /dev/null +++ b/analysis_options.yaml @@ -0,0 +1,5 @@ +include: package:pedantic/analysis_options.yaml + +analyzer: + exclude: + - "**/*.g.dart" diff --git a/android/.gitignore b/android/.gitignore new file mode 100644 index 0000000..bc2100d --- /dev/null +++ b/android/.gitignore @@ -0,0 +1,7 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java diff --git a/android/app/build.gradle b/android/app/build.gradle new file mode 100644 index 0000000..f39456d --- /dev/null +++ b/android/app/build.gradle @@ -0,0 +1,72 @@ +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" + +// Apply plugin for Firebase +apply plugin: 'com.google.gms.google-services' + +android { + compileSdkVersion 28 + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + lintOptions { + disable 'InvalidPackage' + } + + defaultConfig { + // TODO: Change this application ID to proper ID + applicationId "id.ui.cs.coronafasilkom" + minSdkVersion 16 + targetSdkVersion 28 + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + + // This is required to add cloud_firestore plugin + multiDexEnabled true + } + + buildTypes { + release { + // TODO: For Google SignIn to work we have to add SHA1 fingerprint to Firebase console + // See https://developers.google.com/android/guides/client-auth to get each of our own SHA1 fingerprint + + // 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/android/app/google-services.json b/android/app/google-services.json new file mode 100644 index 0000000..853355a --- /dev/null +++ b/android/app/google-services.json @@ -0,0 +1,40 @@ +{ + "project_info": { + "project_number": "341221363005", + "firebase_url": "https://corona-fasilkom.firebaseio.com", + "project_id": "corona-fasilkom", + "storage_bucket": "corona-fasilkom.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:341221363005:android:e6e1521d7317cbc4a7c954", + "android_client_info": { + "package_name": "id.ui.cs.coronafasilkom" + } + }, + "oauth_client": [ + { + "client_id": "341221363005-ev5ijn7e8vn3qnrgjtmfjci5an4mtjij.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCxcEQkWjDlolAzS9dFvq9viW8ghRlOcpQ" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "341221363005-ev5ijn7e8vn3qnrgjtmfjci5an4mtjij.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..080e574 --- /dev/null +++ b/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="com.example.mobile_apps"> + <!-- Flutter needs it to communicate with the running application + to allow setting breakpoints, to provide hot reload, etc. + --> + <uses-permission android:name="android.permission.INTERNET"/> +</manifest> diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..36de621 --- /dev/null +++ b/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,47 @@ +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="com.example.mobile_apps"> + <!-- io.flutter.app.FlutterApplication is an android.app.Application that + calls FlutterMain.startInitialization(this); in its onCreate method. + In most cases you can leave this as-is, but you if you want to provide + additional functionality it is fine to subclass or reimplement + FlutterApplication and put your custom class here. --> + <application + android:name="io.flutter.app.FlutterApplication" + android:label="mobile_apps" + android:icon="@mipmap/ic_launcher"> + <activity + android:name=".MainActivity" + android:launchMode="singleTop" + android:theme="@style/LaunchTheme" + android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" + android:hardwareAccelerated="true" + android:windowSoftInputMode="adjustResize"> + <!-- Specifies an Android theme to apply to this Activity as soon as + the Android process has started. This theme is visible to the user + while the Flutter UI initializes. After that, this theme continues + to determine the Window background behind the Flutter UI. --> + <meta-data + android:name="io.flutter.embedding.android.NormalTheme" + android:resource="@style/NormalTheme" + /> + <!-- Displays an Android View that continues showing the launch screen + Drawable until Flutter paints its first frame, then this splash + screen fades out. A splash screen is useful to avoid any visual + gap between the end of Android's launch screen and the painting of + Flutter's first frame. --> + <meta-data + android:name="io.flutter.embedding.android.SplashScreenDrawable" + android:resource="@drawable/launch_background" + /> + <intent-filter> + <action android:name="android.intent.action.MAIN"/> + <category android:name="android.intent.category.LAUNCHER"/> + </intent-filter> + </activity> + <!-- Don't delete the meta-data below. + This is used by the Flutter tool to generate GeneratedPluginRegistrant.java --> + <meta-data + android:name="flutterEmbedding" + android:value="2" /> + </application> +</manifest> diff --git a/android/app/src/main/kotlin/com/example/mobile_apps/MainActivity.kt b/android/app/src/main/kotlin/com/example/mobile_apps/MainActivity.kt new file mode 100644 index 0000000..5675817 --- /dev/null +++ b/android/app/src/main/kotlin/com/example/mobile_apps/MainActivity.kt @@ -0,0 +1,6 @@ +package com.example.mobile_apps + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() { +} diff --git a/android/app/src/main/res/drawable/launch_background.xml b/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..304732f --- /dev/null +++ b/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Modify this file to customize your launch splash screen --> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:drawable="@android:color/white" /> + + <!-- You can insert your own image assets here --> + <!-- <item> + <bitmap + android:gravity="center" + android:src="@mipmap/launch_image" /> + </item> --> +</layer-list> diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/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!ia0y~yVDJE84rT@hh9qO>QU(SF$r9IylHmNblJdl&R0hYC z{G?O`&)mfH)S%SFl*+=BsWuD@4C?}XLR=Xb7#RJ!7{h04Zu=H;^aq4w44VZJaXaum z<miu(qdyqKW-^A)mMB{aQDD37F@sSggGCCXwl||eFr!@_qg_6udp)CP6QfT%$Uwht zM!z1$z=@1OlNf_0GX_s#44uvxI)gE62H0?r`ApX7Ob!K1&SgxV4a~l6%>G@>0o`I5 z6U6gpN>(hBs@ovlyiK}omrVN}&28UY_JdsVcA=Cl0|SF_NswPKgMfg5KtMnO2sE4r zf%}pIPku2lFue41aSVw#{PxUsz9t6&hrp0GdlTMw^~h@f`fs1s!olsWbZ#C0v7PJ9 zExVjNeb(Ol`RU07XFf|X@qSK7qke0_C&kUH>MnD(8u-m<DX!pr&7!*J@$?w=?>i5B zt(&|xZ@%@sBNk%nt_5+E&U1QAlyT>>sMB2Zd5T5*R3&Sld5=98o%0qdm+@@-JjKB8 z(xcUiGOB?O=e)LCdt!o~wXBiQlFwyn4J<FWNWSJ4nBMpL;FUI(rH3~e&pDIh;bAoU ztzZ2bW)81qVfkN|u{A76$?AP4bE6=r(zGc-Lo<wJg7Q&smA|XLthZ(8RZ(WK&f9r_ Qfq{X+)78&qol`;+05GG~Q2+n{ literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/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!ia0y~yU@!n-4rT@hhJ-tuTNxM_BuiW)N`mv#O3D+9QW+dm z@{>{(JaZG%Q-e|yQz{EjrrIztFmwg@gt#&=FffMC4mtWmbKAF&qdyqKXG0ipk&vT5 zAmZ%d{SXF=bCKq@Z-GZZ;tV#~j83JDzFmxd-Hahq8AGNqhE8V;o5>h9i!po_WB6=l zU2kT?Kvt(bR^JA;;7+;DUGlvL6sMk6nsrHO&Q;BA-wby`jSBSdXJueu5G@Jv3uX`y zP*5;1FzBB@fBpXR=g+?ff&5MV!VC-yOFdm2Lp+YZy>e2h$w0vMVh8iNMNLhM)++IJ z{QqCg*LgRGXKpKZaOLSMJFo8MNc{figWv3mbJp+w<kyyaNLPH_7hlO)dzZ0qy_k(Z z>-BoBm(|-hT|4dcbJ2lEyX!??Y`jpZ81*D{;rF6b`?;0>>pbJRKPRw2)?8wK8GH9> zL)n=k&vkA#ITl(SS<U;QyJmmHI>sBW`??>AG{pM|AK2Jc#t<e_zlr_!#IRdOVook+ QU|?YIboFyt=akR{0OC)($p8QV literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/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!ia0y~yU`POA4rT@hhO2JvAPLD5*NBqf{Irtt#G+IN$CUh} zR0Yr6#Prml)Wnp^!jq{s3=9n40(?ST85kHsj{eZx_Kne_fiZlx=C*GkM}LGI{lOSM zJLKpO-pGCkS99Ap_k-UdY{uXzjN!Aza;8BPGwAv==mjz8hcFm~FxcfWYPvCMc`=&B zF`6eaTBI;qXENFsFgg@5I+ifHRx`TQGP>6>y4N#$)H8ZEGkUc!`m{6pbTImMF#2{f z`gJk-_b~?aGX_m$44TXsJQ-wH$W+GA>5O4B7{g{VhRtFOpT!tHo5?tW$tsn}K99+{ zjLE&4*|Uz>tC88eNi3sZJbQ{n(LBkD<x;ilq#8F%H*b?}-67q!OSbEP=C*Gx`$4`a z+^}{50|SFtNswPKgMfm8fq_9lLP9}7!~FU4&%XzO-7Kks3=E9^o-U3d8Ta1ayzY0{ zL7?@agT}(|SylOrK1ofFmnI8kJ@^~XcG_jy^?RKu*=(E^&#S)H&w8yZvf=)&eKY-w zm|raJxBG=m{J;Op`S6opmcNp}?EbiJ|LylI8@^a`_|yg^ycT9kzOS+28!uC_y=una zz_vQ43%``t^0)0%Q~9Oqb>d1t=Sn-plsE283-d*czTa-zm@iQD#kujt@|Kvt4hp|H z71QJA-@DE-vCc=}m3vdfeqD}l&W>B;IduNM%M_}RPx;yPVrk2E_T?&?d+vqXsA}xF zGk52_Ny78;-$vOoENNLjTll#WOG?YLuZ?eO;uVxk)@?h*_~6>qo(~l}_f@BaD>p=c zm>y<U&gZXf>aWRpaQm|`^KGX?!;c=*_;Kycp<DlUdiD5zSo`y6a;n5+gROg>Yksb1 rdBk${xlomwC<})`ozH<A-&hmd*~)g$ZRcZPU|{fc^>bP0l+XkKcl<5t literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/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!ia0y~yV3+{H9Lx+13>Rhybuln7NS3%plmzFem6RtIr7}3C z<R_&nc;+Uirv{}arc@T5OtoQPU<?lM32|j$V9?z5E#&AA2-4j4jWK94WB6=Nj{=Ce zWWgfMZQrc+d=EMLgF(ZcLED!>$Dctjh(SM?K|h4SAdJB{hQT_6!9JhSFr3jep3y9U z(L9OKDxJ|flhG!d(I$t{HiywRm(ebd(Y}z;v6#`Zgwd&#(Yb=rrHawDn$fL>(XE!z zt&Y*Xj?trm(W8;kvysuWiP5u}(X)lotC`WOh0&*-(Wisaw}a8QlhLo6(XWTmzlYJk zmocD^F|eO8Z~|lCM8?2Lj6o9_gC>F8A3T{ccnV|4RK}2LjG@yRLuW9C&0q|h$rv_^ zF?<$d_-uBwU=HgjPRC?Uw`?x2A}+rQ?!a2^kVfvX7VhwN?#NE=s4niP9-inPl?69d z7T#1{bVqf`J=LWT)RsR~Tk%+J<rB4)Pt{gEQ(OH^ZS`|?5PG4x?VBYylx82DV9LP2 zz+V#N7tA0a;E>QT9|ZQFKYxDR#LKT37?|`uT^vIyZoR#b9vmDf()v(?iz7_L)oF78 zkJJ<)r<N9%0|$JqH#XSb$PoJRf4+y|q?Y3Mca3Ad+3~&pyDx2Cq@BDI+qFWEwajuA z4;tBtBK{elKPpyaGw=12pQ;rPEUWotk33QAzG34cxVT*<>8pUt8M$!5-N#*39u$gn zR>-(G$wg0`aolam=a?PG9$oC(GH>-!X0d*^l*gJvuFJp95x7~EvFLL3EEhhxt`pq; z%_lBC*86lUSiR`uj?O)w{s`}^n&Wz}@?RH+ochG+^SU~oY!t72t=ZWjXFc({Ty9i< zoXX3Kohi2Ju9xPeP296QFr{gETuR&Xh?K77YDUL{MQ1+I?2fS6ciP3jaR24wmqlki zKfgU-wdbO}>o1>vX;$n~9ltDoY4ItEi|?MFbkSNqMRU<y|MTK&bIwUz{B}H{#59<7 zroydX0u?)xQa9b?@`(FVovb6{AN5koBkD_bt%XSJD)y6Ib^Gc?=5*_tH>kMU-}~Bs z)+NdN<kpgB5-RGy{$2ZDVI$J1wo0M!;<MSmnHT$~D_#8YI&}3vMa4kH`pxATB{f-P z3t7BUL!FrxIsH2}cOScQ<H?&pk3<Q(JB56@^Xi?n44==@ATROFE8e_(_07IUFuZJI zm)5-7wuw(g7O!}-(>zgg`VE)XKX=tVT|2z5{L4{YJjHWS*rIm-E6Ws`IFvdRnm87H fR&jd1QhDAN-h`R^uRUjAU|{fc^>bP0l+XkKAv&s= literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6372eebdb28e45604e46eeda8dd24651419bc0 GIT binary patch literal 1443 zcmeAS@N?(olHy`uVBq!ia0y~yU^oE69Lx+145>_WOc@v$BuiW)N`mv#O3D+9QW+dm z@{>{(JaZG%Q-e|yQz{EjrrIztFy0FA32|j$U<f(-Bjo50M(1+Iz=@1uvlzo?Yi|1% za`cB-@^pxl=C*H)-ffKD?Tn$*8N+9b<xJDu_DyFyNDYIg2ZN3ugN{FgZUBQ`AcI~I zgMKiBeh7m>7=vLLgJC#>aTJ4T9D`W`gLwjjbtZ#N4x^eAqnb0LmM5cOIHO54qe%>- zNi3sjJfm3xqeU{KMGB*38lzP@qg4i@bta=t7NczrqirsuT`r?t9;018qkTT3eF39G z5u;-<qhkr9Qz@fU8KX-jqe~T|YZaqwHKSV%qkA2rdp)B^1EWVHqh}MNXEUQ$Gox1v zqgN}VcMGF;E7Uta?TkJhj6R)=z8#Fdos7O+jDB5=e%*|IJ&gW6jQ+ih0ey@C{fq$< z7z6tm11EsOCukyL&?Ls-NsPgh8H1-V22W)SnZg({l`&)*W9T$c_=L`244ugsHiI#2 zCO9xb;mM@u&tw?JWD?C}p1@?4!eo=dWS7n4kjLa$$mCSa<Xp<+QpV(3!Q@uS<W|Mx zUL}^%FP1q$Ja?LS!EA}*`I2ReB`cRpR<Dw(T`N_;L8@Vsbki2;=55j~+ofA~NVo2k zZrdf(wp+gY03=>~4uK+6lW`UY0|SF-NswPKgMfko7&thbzyBTz-gcI+Wnf^o^K@|x zskrs_3VX0{ph#Pyi^G})N%|2R%{L?-ZV(U%Y+lqcfu(WAio}U)uIrV(+3WUaecD+A zmQ6SJem|G<Y|hO0zZt9Nm6w%qa~bfQe(k0G@73BxB6U9=w#!qC$o$Qnp1E#9Tm0{Z zo0lKtxBv5@_+$3{MUSrUbvwSkynj;sb0yvVzkIXmuCD&_C#ziZSE%0QFQ@M>do_Kp z-*x@+`J3Y19B#kQTkx(t_`-K<>p6dn#rh_GuokuWC9d+nXX1zFdIcZVw{qEhc&=6O z^|eUFqwV?=KCBk6c(Pr4!l%_@70=G=P581}wBp75D22D-njfy%?{qk*AOB#Z{bq-g z`q2+|)-Q6ns2@Io{eMN{rubzF`u|EA+wSjG@UL6#aQc1N1oQe;4(H#;OmN?SS>~@F ztIeOC+&g|0i+=ccTfE@YZP5>((!~ot`|Cb<K0oHb#rcs3F53qlxN0AF;QD;M2XD4> zb^PFdrt<Y$wHojKchWz;7Uc;(Z<?=v>-VXypJEaJ95?T2$v)Ws{O#V4Ednvz`|Pb} zf4VOe!@bWom-}e`tT2YtP3!%mny<H?DPcI=q~9OCYq6V>=z+}-K6mV2ZEt5Icwo(g z%Zr!wX>UAuh9QhqUj7<;)5IBxDQpH>KRz6|eoM6P*rQ_`EdPlXYgN?$U-3W2|NYf9 z3~H?J-^u1!lq%j3KgpL6_~F~TxcJXA&m~w0?N0Rh)m167XXobE9?sqiHmlnth&$|i z@b&H6->;<n*{pUSW)9rV@Q8K2S^mw~*V#FiwHvLk$nTx@ub=DSvV@Y$lX9=NuW9Hz zz0mHpeOA|-i@FkPqqY>epMCgPeb()B(Tr|RH~O+1PwlVxdT!ROU2OGQ3PvhLeQAwP z<HL5Y`*mPrRekss5x>O|AMWqpQ}lM;-?Ix_3Z(ZoZK*%HiZ|EUDeVf^rGH<21r@EM zSf|zZ`p5aNP1ut4@|gFs0GYW>Kcl68^QPJ_Y<l^5%bymmu2W$0H0$RkA&~_PtQroC lTmcPCQ07b~p2b`1KQB5V5V4<OEdv7sgQu&X%Q~loCIB3;a@_y` literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..1f83a33 --- /dev/null +++ b/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <!-- Theme applied to the Android Window while the process is starting --> + <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar"> + <!-- Show a splash screen on the activity. Automatically removed when + Flutter draws its first frame --> + <item name="android:windowBackground">@drawable/launch_background</item> + </style> + <!-- Theme applied to the Android Window as soon as the process has started. + This theme determines the color of the Android Window while your + Flutter UI initializes, as well as behind your Flutter UI while its + running. + + This Theme is only used starting with V2 of Flutter's Android embedding. --> + <style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar"> + <item name="android:windowBackground">@android:color/white</item> + </style> +</resources> diff --git a/android/app/src/profile/AndroidManifest.xml b/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..080e574 --- /dev/null +++ b/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="com.example.mobile_apps"> + <!-- Flutter needs it to communicate with the running application + to allow setting breakpoints, to provide hot reload, etc. + --> + <uses-permission android:name="android.permission.INTERNET"/> +</manifest> diff --git a/android/build.gradle b/android/build.gradle new file mode 100644 index 0000000..aae9990 --- /dev/null +++ b/android/build.gradle @@ -0,0 +1,34 @@ +buildscript { + ext.kotlin_version = '1.3.50' + repositories { + google() + jcenter() + } + + dependencies { + classpath 'com.android.tools.build:gradle:3.5.0' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + + // Depedency for Firebase + classpath 'com.google.gms:google-services:4.3.3' + } +} + +allprojects { + repositories { + google() + jcenter() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/android/gradle.properties b/android/gradle.properties new file mode 100644 index 0000000..ecdde07 --- /dev/null +++ b/android/gradle.properties @@ -0,0 +1,4 @@ +org.gradle.jvmargs=-Xmx4608m +android.enableR8=true +android.useAndroidX=true +android.enableJetifier=true diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..296b146 --- /dev/null +++ b/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-5.6.2-all.zip diff --git a/android/settings.gradle b/android/settings.gradle new file mode 100644 index 0000000..5a2f14f --- /dev/null +++ b/android/settings.gradle @@ -0,0 +1,15 @@ +include ':app' + +def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() + +def plugins = new Properties() +def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') +if (pluginsFile.exists()) { + pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } +} + +plugins.each { name, path -> + def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() + include ":$name" + project(":$name").projectDir = pluginDirectory +} diff --git a/assets/images/google_logo.png b/assets/images/google_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..96c2b56a3e81740b9e0dbcd09d14fca604a7e89f GIT binary patch literal 51352 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 literal 0 HcmV?d00001 diff --git a/firebase.json b/firebase.json new file mode 100644 index 0000000..6603732 --- /dev/null +++ b/firebase.json @@ -0,0 +1,16 @@ +{ + "hosting": { + "public": "build/web", + "ignore": [ + "firebase.json", + "**/.*", + "**/node_modules/**" + ], + "rewrites": [ + { + "source": "**", + "destination": "/index.html" + } + ] + } +} diff --git a/ios/.gitignore b/ios/.gitignore new file mode 100644 index 0000000..e96ef60 --- /dev/null +++ b/ios/.gitignore @@ -0,0 +1,32 @@ +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 0000000..6b4c0f7 --- /dev/null +++ b/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CFBundleDevelopmentRegion</key> + <string>$(DEVELOPMENT_LANGUAGE)</string> + <key>CFBundleExecutable</key> + <string>App</string> + <key>CFBundleIdentifier</key> + <string>io.flutter.flutter.app</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundleName</key> + <string>App</string> + <key>CFBundlePackageType</key> + <string>FMWK</string> + <key>CFBundleShortVersionString</key> + <string>1.0</string> + <key>CFBundleSignature</key> + <string>????</string> + <key>CFBundleVersion</key> + <string>1.0</string> + <key>MinimumOSVersion</key> + <string>8.0</string> +</dict> +</plist> diff --git a/ios/Flutter/Debug.xcconfig b/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000..e8efba1 --- /dev/null +++ b/ios/Flutter/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "Generated.xcconfig" diff --git a/ios/Flutter/Release.xcconfig b/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000..399e934 --- /dev/null +++ b/ios/Flutter/Release.xcconfig @@ -0,0 +1,2 @@ +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "Generated.xcconfig" diff --git a/ios/Podfile b/ios/Podfile new file mode 100644 index 0000000..6697f0a --- /dev/null +++ b/ios/Podfile @@ -0,0 +1,87 @@ +# Uncomment this line to define a global platform for your project +# platform :ios, '9.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def parse_KV_file(file, separator='=') + file_abs_path = File.expand_path(file) + if !File.exists? file_abs_path + return []; + end + generated_key_values = {} + skip_line_start_symbols = ["#", "/"] + File.foreach(file_abs_path) do |line| + next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } + plugin = line.split(pattern=separator) + if plugin.length == 2 + podname = plugin[0].strip() + path = plugin[1].strip() + podpath = File.expand_path("#{path}", file_abs_path) + generated_key_values[podname] = podpath + else + puts "Invalid plugin specification: #{line}" + end + end + generated_key_values +end + +target 'Runner' do + use_frameworks! + use_modular_headers! + + # Flutter Pod + + copied_flutter_dir = File.join(__dir__, 'Flutter') + copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework') + copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec') + unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path) + # Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet. + # That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration. + # CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist. + + generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig') + unless File.exist?(generated_xcode_build_settings_path) + raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path) + cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR']; + + unless File.exist?(copied_framework_path) + FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir) + end + unless File.exist?(copied_podspec_path) + FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir) + end + end + + # Keep pod path relative so it can be checked into Podfile.lock. + pod 'Flutter', :path => 'Flutter' + + # Plugin Pods + + # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock + # referring to absolute paths on developers' machines. + system('rm -rf .symlinks') + system('mkdir -p .symlinks/plugins') + plugin_pods = parse_KV_file('../.flutter-plugins') + plugin_pods.each do |name, path| + symlink = File.join('.symlinks', 'plugins', name) + File.symlink(path, symlink) + pod name, :path => File.join(symlink, 'ios') + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + target.build_configurations.each do |config| + config.build_settings['ENABLE_BITCODE'] = 'NO' + end + end +end diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..7dd6513 --- /dev/null +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,506 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + 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 = "<group>"; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; +/* 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 = "<group>"; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + ); + sourceTree = "<group>"; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + ); + name = Products; + sourceTree = "<group>"; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 97C146F11CF9000F007C117D /* Supporting Files */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = "<group>"; + }; + 97C146F11CF9000F007C117D /* Supporting Files */ = { + isa = PBXGroup; + children = ( + ); + name = "Supporting Files"; + sourceTree = "<group>"; + }; +/* 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 = 1020; + 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 = "<group>"; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = "<group>"; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + 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 = 8.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; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.mobileApps; + 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; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + 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 = 8.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + 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 = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + 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; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.mobileApps; + 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; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.mobileApps; + 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 */; +} diff --git a/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Workspace + version = "1.0"> + <FileRef + location = "group:Runner.xcodeproj"> + </FileRef> +</Workspace> diff --git a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>IDEDidComputeMac32BitWarning</key> + <true/> +</dict> +</plist> diff --git a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>PreviewsEnabled</key> + <false/> +</dict> +</plist> diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..a28140c --- /dev/null +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,91 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Scheme + LastUpgradeVersion = "1020" + version = "1.3"> + <BuildAction + parallelizeBuildables = "YES" + buildImplicitDependencies = "YES"> + <BuildActionEntries> + <BuildActionEntry + buildForTesting = "YES" + buildForRunning = "YES" + buildForProfiling = "YES" + buildForArchiving = "YES" + buildForAnalyzing = "YES"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "97C146ED1CF9000F007C117D" + BuildableName = "Runner.app" + BlueprintName = "Runner" + ReferencedContainer = "container:Runner.xcodeproj"> + </BuildableReference> + </BuildActionEntry> + </BuildActionEntries> + </BuildAction> + <TestAction + buildConfiguration = "Debug" + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + shouldUseLaunchSchemeArgsEnv = "YES"> + <Testables> + </Testables> + <MacroExpansion> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "97C146ED1CF9000F007C117D" + BuildableName = "Runner.app" + BlueprintName = "Runner" + ReferencedContainer = "container:Runner.xcodeproj"> + </BuildableReference> + </MacroExpansion> + <AdditionalOptions> + </AdditionalOptions> + </TestAction> + <LaunchAction + buildConfiguration = "Debug" + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + launchStyle = "0" + useCustomWorkingDirectory = "NO" + ignoresPersistentStateOnLaunch = "NO" + debugDocumentVersioning = "YES" + debugServiceExtension = "internal" + allowLocationSimulation = "YES"> + <BuildableProductRunnable + runnableDebuggingMode = "0"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "97C146ED1CF9000F007C117D" + BuildableName = "Runner.app" + BlueprintName = "Runner" + ReferencedContainer = "container:Runner.xcodeproj"> + </BuildableReference> + </BuildableProductRunnable> + <AdditionalOptions> + </AdditionalOptions> + </LaunchAction> + <ProfileAction + buildConfiguration = "Profile" + shouldUseLaunchSchemeArgsEnv = "YES" + savedToolIdentifier = "" + useCustomWorkingDirectory = "NO" + debugDocumentVersioning = "YES"> + <BuildableProductRunnable + runnableDebuggingMode = "0"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "97C146ED1CF9000F007C117D" + BuildableName = "Runner.app" + BlueprintName = "Runner" + ReferencedContainer = "container:Runner.xcodeproj"> + </BuildableReference> + </BuildableProductRunnable> + </ProfileAction> + <AnalyzeAction + buildConfiguration = "Debug"> + </AnalyzeAction> + <ArchiveAction + buildConfiguration = "Release" + revealArchiveInOrganizer = "YES"> + </ArchiveAction> +</Scheme> diff --git a/ios/Runner.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Workspace + version = "1.0"> + <FileRef + location = "group:Runner.xcodeproj"> + </FileRef> +</Workspace> diff --git a/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>IDEDidComputeMac32BitWarning</key> + <true/> +</dict> +</plist> diff --git a/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>PreviewsEnabled</key> + <false/> +</dict> +</plist> diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000..70693e4 --- /dev/null +++ b/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/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d36b1fa --- /dev/null +++ b/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/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 zcmeAS@N?(olHy`uVBq!ia0y~yU||4Z4kiW$h7a|7u7G&yj=qiz3>*8o|0J?9Ffb@2 zdj$D1FjT2AFf_C<F#KX*U}$*3z))(y!0;-8fx&791A}<MoLzx73=9lxN#5=*4F5rJ z!QSPQ85lHAd%8G=RNQ)dH##TfyW{bX|NqaKx$%1T`@Fo}Tey{M6tuKdRF>EYZQ<YZ z;f!?94flJeT}8E6TbMegZ7Y#hFo}GAOGP>`<X6Ljw{6x7r(C#Ww*9P_^-`6PC_%Hh z>Nj$7&&r-9tv@bzJN?=JpBk$!-MM9JoV9=dW8?pwu7NBJ3<|t6y+Q6`U|>jKAb}wP z@+Bh!0|T)Pl1v9FZXm^Uuwph+JwYdHhz%mJCqRlp?qVRtH*lRKG3a0ov7XqFZ91Ky zp=-yFYtOcR=f2*kwYysJ-=qE$>O2e#H@0)<=fu^epDtZ+>1(~szd!s}W7(I@b#Gt@ z_`hNGum4BdrH|jWKFYwr@U{OJJ2L~r75i86JPZs0|5wx-fT#uk4l*z}{A~tHe&q*C zUa?1)JdVo%hrf%7G5};X+;p%dP!~WAfH@DY2HgcH20$fO)E@x39qa;_0Z{*8dI6gO zP|q*^$H)u`ARb5nfkOsr2~-V%00Nud|BD^f0I2gAnF)t5*Z^4YzmkW#0NH@m^;hf@ z7#LR62mEhfWLWUe@ozIDL&Gojul#Hb46o#`*h@ep6BrPZ?thuVl3)43l28LcNr8uf z0Tk8-AP<AXG2lO5pMuqZA`2;~zOMfl2y+WF8^kRV5Vt@bn!vDw1;cG%Jq^E5+y-(# zR1eg1*bM|r2L1=9AW&3e38!XoEMR&L77NHee-#f3AT+nEzzAqOZgGSeuo{#YL5Z3H z6x%3Cia57`Ll|TLII>>Jf8_@U$Q662pTQK=I(DcUXoSL31d2n^4PXF8k^5g}2}n#O zpu`j&)8Q^a7{CB^9w^!x7{O_hfeoDOP+WlOyukmM27tmE%>aVV1A77H0;mBC{((&g z<q9<ap_vW}16b%07eHtRU~wLn0BZOZ{(nV112Y3CTQTxL^1lHj&mDl|IV_U>zu3W& zujCJa%4VnmxWgLNEyxZH{LcWAbpOi?j%Kh=U&a4j{Euk2@Pi!z%41-MuBc}K`C{=u zMgt-}12-TZlH?F>0Xy`HJp&sg;YdId4#>Ui5QoZxLljif!BQ1S(*5shNQff41zheQ zfCMZ9GXtpHXW)T^I&O!qsE69~l^@|2a1w&LB>|E}8W_Qa7aoUxT@MLSaJazS0u3}Q zZo%$Qc)+3=04fa7JcHc;s82zXh$MtP+CXafU&&(+DrCu5@?fh;3u|Npz&gQR06A~* zKSq#b|1Wm1)x@{}YQO?WlEX9r6wNE@84OTj8)OMy{~@^m$pBCuV_<{CwggJD#GMoZ z|1*Fj-TyL!)5%wUkOAO4b^ww^7?{CzECUa=WSOw-N4@S9`xXCJ?f7%<+SBs=@2vt- zxhsE61-0NHE>jEmFMjVviR_9^kGFp4<TsB2x9mVA%2oR}+y1?`lZ)kos05`r?5r#M ze}VE%!2bkrE?ZqsJPVQ+K+O&iEAT(4sKw4&QUA67S2(x<0cuK;!veLoK+Ow~HIVdz z&I<Uyj`>wQq^0_mAIfToEc~bow_HKezS!z|C@6b_S_oG}E9zH4JiPIMbudKhQr3Hu zLDiN7!wcOHc_9!-mo|Q12x&>(;@-o2)gIIU3rMJVzYyHOY2Z7&n-A1zVrIA^aW5Yl z4kthO1%q`nq_%yZ0nz=!c+YN7wl`o1$Xv&AFC1b~hUtgCAh1%0jg8+YL6q*|eXsOh z31lh{!xia!_8?Oe7#2MIaLy4_Ofxg6wtwdVB}+Dj7nXaXA*MQ9eOS8)((=2-_g(<h zu;5_`sHn&Xm6Zt$4d)K;c7k~GirhVZsO@%pg!c%8QiuUVKwSktsGMtHZ1{J0bw8vH zrX{d`H@Lbwz~I3BNE8x#46Ys5qaa3=D8{8iZECNmy$bFeI4D1w8VdFj!_toHArOUM z7KLA4y%HQ`4681_?tmDd;l5r0<PQl34Uau#kV=S|LAEp87o>}a;fhL}KE(J7Q!181 z{Tcbl6cS<#wVmPaAcf2fA!>2rP=&MN1jC&m!6dT$Iuj%mFU*Z&g?Q7UcGo|cMJ6k> z*Z%`In=}Hi$AC=YVfdo4ZW|~TBp6l%#iT>cT(;v7B)}E~6y`#GxqR0upA*yX-TO6n z`s{Vgpj6?ocGo=5EB}x0+xqcaRAKGn0#k6~Yu44NbN>Fy|GSU30o42qShp@w>uWyq z0#MK5%j(tB!~Wi805|YNU+-EP`rnKJY}V;rNtsvoL$z#K7a9fAQnGgS6u6es*T0s) zwLIQsgwV2UohMw&mvyTr!nIs|ZH3VCdlwTz%YnMLaL$E;bywk>fWvir;hYOc>XyPe z0mtfk;hYP{>q_CAfRnH6*Z$hh2o8d%$iK_s&NN*8f6J@;Y!0B-@r$&t^WiT0y5`^I zRrS&gpa$%Mg;(q0?w_*dm;dU2xeTB-qr)ZJwf}_IK$T6%2wnX@<@J5Gfd8OSQ`osJ z?0@I={k#i6Rj<d24OjR7+Rg}WF{~`v_AC6qS;H@O0|teux5ECv0%>AkV_0(O&a3#p zw;4cfnud^5(SKLhOFMv?B@?{rSJ!{dX9hR5f>suMUH>na0n|8f(2{mQs5%9*8)nuf z#w!RLa~OuM7IsCk*8hU-Sv$)X@2JTAJiUI+x_?*er_Qw%^EWM71xm*Z-~`#o^_fFp z!M~fz=b2VQdO48v%Wwsnc0tNOg)XS`2MwhLSez_?1}MWTc}S2q{5sACPB07pZDa(+ zHp7bg9B_JoDgiao;YxBFO3cAo3StMia|MY<h5%?xGkoobqy>k+$&iQ)_<sW&)eKkc zL5Ts>;{z)J^~^v@z^&^g`(U;Q-2`VxhAZ|fVGfxe0@LUZN(kUyjrvrOH6Sx4gVF=I z$K;vH49?a8|CekU;>Lk`ClJqq8ru-hf?B3v&w|_GV9zozGtB7uKI>@hdXrf8Rc~Hh zU2XsI9QP~v1*@M4F;s60=|3%>dFS_?W7TI5U0u+0?f>hwQ`6=CzPR;kZg0i=^Z%xB zGYR}*VYsoJf9{EC_Lm}7?cVF<`g;G)ZE~A`{q(QP{JDO9xi13`!vVI0Z?Em2e4TLh zT>UTY)A6+jr!pEaFi1B<uKDj>`&E8Z)QL}@=l@;(bp75Zzd-#;-UDy0*Pr+#u=(@+ z-?N{t-~UL9k&U5&_dw3odb>scoTs(Un7jYO)u*S!W3&%2Fl=C)vGCXVw%7LjhTMj2 zAgQlUPp{vV)WFD)z-(~)>-^Rktpd(H&+Y3gf8M+vV-C^s@K^uZU+;4o(sLOg0^5H5 zKWFw;zWw$7dghjbe|6Ff1`G^249iykn}74!y?V2l{|jUOudTPN|9@Z4{`W3zP6-AE zGlt7C{|&SMvm_k<rT<sv02>1j$X~0j|5x5!{ceBE|HK9VqH`b?tf>2&-xK-2Fy-%U z2C<p8ndu>(iOTbF2Sv?Yy#|7c|6d#xQm5|95-;dtQU_K?O8KCUn(*@8oOs61)FF zoxH;D@A~6$zx@B*gDDPO^?#4tr$*!YPZLsw*VjY6(6{2>{e8QNR@OZ8zgPdhp8sq7 z4X6vw{;Ds2dg<_OoA31v-(kjDO!`&7WaqYv)$i=rw^pq9n$HZ0lZ997U!R;G^?T?4 zxWDP`k^jv=Bk4C7WSsu$m(TmXp8wwO{>O8E2K&6(KNad1_VE96pa1(D^?c_1!*!pI zLqmso-T$lR;q&71*5w{q6Y@WD?f!p{1OB!<uYkE%E&6}{nwY4(dv`h_ZJ%ttw{ZU2 z=zn{w|KGf@_rFEj-}kQ%DnNav7W)77(qHShzP6XHcxTUd_qYDBmH#<6FfuTM65af- z^&9^_@sG25zd!c>+T(S7&vwGCi2d&$pR+Fa$R4wZ|9hqXUj@};;Q0O)_J95M*YzK| z>vn(t_dWLiQO1AYw?hq_^Q-<<(*5nVy(|7l9IS=~Ku_d<?e*(zz6Lzs^S|nU;rzp2 z<$u4jm-)854jNB4cF)#czt-k&!28?#++@DR+kM<zdb)no_kZet5+*={>h`t&S@D0j z_x(Qe+x}DZzSr_jJ%7#rJ`Ok~?*8xfCaC=(f49&7qgnf8``_rFxA#42y!#vKvIhmP z{@cgL*1qCCJNs$%|DR^x|DFCSzibgKN+nkOXP=#Y_MotR^!I<!(h5AbKQDLvtG)LB zp`CmRBzhP81L;5b?CiVB|8u{{|5&yD;II6@x3lK{Ook{paPDh;>erL@*`R2%`w_c8 za@%oX`|d@L_Gdw2qe12M|J&hV^Zz(~PTTxGc>l)gd-Zm!{vBRe^XmHn^%jUn9jd<G z|92&S?fX6d_c7O>n*W!#de#3`b6Bz<mP{!6yMNQKC(LKJe!W!uf9pBj|BcoE?>5_& z+kD*ossArD-7bmxe?2bp?<3}=!uFr<iT_Po+Wv3%{;9?FUVeYJK*DN4=zsn7c0V0H zr~N!~K5F+rce&rfUf=)mp9uW_0h&z{(q7j;J;~1I|EDMNcl>X@-{-CP|MT4Wy*_R~ zG=~~2`ggx7^J#beF3XyG^=4mU_wP;qcUaf%>+ZXY{|En=$N=?t<l6sx{s-^>`*Q#9 zU-l9128z%upSJj4d`#sdf3NTVvX>_R`+Ui9{?hfoW~KZM|E>}M)jM<b|JC~IY(5^J z{aU*A{<o{v@9p{S{nnTN9lY*;G+RyJnPZ}xAzqqs?^k`|)6U=K)#?A9)Uy9;$r1m0 z|N4*47;~smFW3A({{DVU{<imjkMAjeQvdT<{m+y09Y0P`bND)~6%zgjLazRweLt%5 z&*#~%&qma}S^oP-{k8u$?|<6+Kk3EJ|Bt2}w3}@&3C%$>__Ejj+JAH9{~PiD-zxua zpa19O>3{z=>2EvxSJH~}3M4-#aJ~ND`#+-gjnng!^KFh?D*sz%|3liUpP_ZJ)ze~g zEkjsntcv-6e!X4Y!tYP~Wq!?DZ}25I{_d~*|GS$jESJ56hll3M|JUco*S;y9Z9aSB z?<4hLR?qg|`Fnfr&)_3(Ki8ViwcmW4<tC)~3R(N_f9=<e_P1j4uhy^qzViN>FB9(v z++%qBKV3v|?qmmO_S1^_zrMEk>&5fm=Kd7k?f&n3{VVe+@BWHERj)rbi;+D+3KljF zrLXFZ-#t6_KX2ZjOxu&eb@QHID}85u2wbQ?5P0?fYJGI=7vtH|v-kS{{U-a}^2?F> zpReA%`ZNEnACoQ{`{9oLSHClZ3+n?aum4N0?yp()`A+@!?dSIX{}wqva^*ko{@+KE zLjLxjsfDJHzCHie*Cc<P=%1fgGXJ-{#cSiff1D2Uuc<S3IiLCasNsJVG;Slm{F_=I zTls|F+}teL`fvOEKPSDG|2-1u|NBVcr0W0bjprWpi$D$KTlz1)GVkj{|J+=YWSP=i z{yMc+ub&XMufG2+v}f+i%=xg~R`BENfBn_`^;y}q#>e)QJbJ$3UH;KJnP2Pff0}7u z&HbyzpJ^*3?O7c8RsVB-_;mZ7TQB}ycfT?E-`&S{&j0uRf5+NmZTHi-WJ5nZy!*EN z`=7A-`<?o0mLJr=$^Mc|x_|k<tzpZeD_?fMFI8{61&KYGqQCpU_^%ePug^~2{CUU! z0~7yme1BkmK-HV&;s33t{M9Y~zryEocOEmi_AyxatNx?B_1E}+SMuN7{Vo4z-Tfe| z?|%Pvrq|Zr3IC{a!6Ft`Q5mfK^}qdU_x|fE|DT&|-#q^p@80(MU0>th%(#1WM`xXd zdgC!oUuZ?pz`5h&q5JFYe(a7u3sM~aL$rE7Z~gh}9r^!e9m)OIY{9vuyyBt`G(+4- z{=5J0h1%$|XTNR!cXP#KyVLD;?;d6EYin~b6#25d`*){L!_8OFrbENu>;J=+|Ni_g z{Et}TkI(xOudvr2U-Qk`iqqs=!FOm8^Je|O-P`|czNTL5{rvCr{ZF*NU9Z2-UT-b` zLD#B2C0@Oe@6W;5IV`tc|9cm?bS2ao5}W^Rp2%L?b}8|H;fr*J!a4iozpGp@l>ggl z*mAC4->IwJ0-8nMto?WT{NMDw&;La~y#Jl2{-WKr;s^YE(`pSvz6t-$$Uoy0#%<{T zY8tcwap2$U`WFZ0`+fWF_owG}{pIkVpZ6WEFZ*r3^Q?W|^B4V!r=8=tBXwQ=yQe{- zWyADe{k8IQWD76VZ+v|7=g|tm{j>M4lDPS|cf!@lwO623euC52_<vpZ4L-!~H*8t- zx5xLsv)$3P+I9QY8^sh$cG>5*ta%nF4^8QRuh(Cb|2y}WUewF@p4#2D{OXN-|KCRH zUU}x6YnM`b7up;#xcE!o{+n^c?Tz}EyWcL_C$Z;Xe9z~~`|slCTz9UuGZAxI`%n-T z%gn3)hrK@DxJLfp_M;c(YaZgO56+kC`SW<;mA}Ui-AP(;wpHi58MK(SxbRE<S3^F} z(qxC-+y8gRUGRURa$%306nA2s=9T`|HP6<jLi}D}@%8@O|2r<<{rk43S|}rozxVOO z8!InZ$bD*4hUIU*o&UV|cfGs$|L*OdNAr#y(DP$Do0XVnsB=f|nSaZzIsM;YxuNv$ zce#)96`S@;{Fxi~^!_W5ozJEn`e=RV(A$M|XWXlyrCHyef4l$xeH`$u{}0D|JvrV} zpDsl3beFe2E^j+lDF1dVV}n-5(TMadj2n8j|Ns75J^yya`pPf=7w`K1t6#C@+I=DC zGuHLqa+@Wb%zm8L{GXliw=Uy<-93)pR)g&lpW4jbuG)O@{(h(WeE%-K1O^5JW$A?a zuky|(oUX0<xo7f^NEx61@9fup7T^AF<J#xHpZm4^+GE}fsaqVrzP8`;{%QKt-+%8i z3jF@xxK^I~$hXgbi@g)`E=t2{-L6;rO&FZ=*^Yb@cAU#7kaS{`K=KTGQL#MkV(+*T zXd-aF%OJe!|AopK>hF0Q1d@N3Zz}sPzgt(vTJ)L!uYmPn`(zHX&4~HC{h!avpYwIN z6|?ypeojvOxUS%h86=G`xNl=ri}|lOMgAXWq}a1*k1p}IwBB~kJ(mq`Y%sX*WaL}$ z&zd>mpNq}MgBvQ+S6E(xBv`EtjC@P}y*_^E(#(oaYoKxD&}w#|<#qh`WY7??L#p|K zBd_e&w;#Ry@yX2%1-q|vNQ0`0RXZ5f0{*Xk7jGpj=3gDV0W?s)V3%~l{;&H>tmgf3 zyxY$UTJR9Of$>}1fA921mtJltQA;V+XEbAwU|?f7Ad=It_sai6vLHiC)Shg;C&2(R zH=J?7Bk6=azvkOteE08{ljiTM_TbjH&tbM3xqr`>?*1R~(w*@YBnvG|XTG!RpEP&k z#}b=Tvomuu%J=^Q`>P@I4ukd8`dUSuxqa&A+kOh~ozD#FuODDwm~n~MVAsFTZV^_p z{xt?N`;$LtDtzq+2XpW)Mz+`X`7K9xKYH|XL&>r&>{p<c|7Ux#`v1}0k2?8Vjv6bT zzI}K7zm1^kA|cJ}K>7Zk<@xp{_ru=0#OyKFna8*F=Y*?Jjb|22zrXk6<^3O4-;Z8@ z{8r70*NUrG)`Kgr8L8*@f1Fz^U;E(Kt!YqKo0uJ#ec$$bHh+A5eehp!Yt%tX`oXLE z`M+-nU%ze!4T~ik8Shm+zq3Am*S>2Z|G_QA2`AVpzTY|i|Ie>mZ3x4*{<r)tU0?Y3 zFE7-GCvzI^|M~P)S{fRFLN^)iTYry^-&ePICB#Pxb9p~ZzkdHdXfUFIkzv9awjXcT z$L!zuFerhUp?ca*7KY1@)Zg!WoGt%<XYg@pJ=V~&fB({_&#%2(%D~Lf;F;4Pzl{-E zctabF3<xd{sGkW=DhJrW(an&<fSn7;LpcoKusXno!rj0K72m*kfQ^BffkB!f2h@cn zkqdSfgEYjI8z7E`adW^7;+>1;nFDN4U!k}g><wm65I~&^@`eGZTThlZK;;bB^Pqgg z0P?^A22fZaa|s1An!6EP0|o|=b2os7FF*`XFhiY-#w9+~c^IaH+?N9?K0vw>*p4pJ zh+$<|_2Aa-|KH!1-!GP3v7@@~53?Q<XqAzHtPK+j1E>%Ib-#&cfYw_zkh0Wl5UrX* zaSBPE04oLs8;TKxLXRF{^+1RL)D9+oVc{V03j5Rlj7bMlOs-!q3uItmP%UwdC`m~y zNwrEYN=+<DWiT=@wA3{)(={>*F|@EUF|#r?)iyA&GBBue+`JS;LvDUbW?Cg~4cs!^ QlAxuUp00i_>zopr0K8b=b^rhX literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..28c6bf03016f6c994b70f38d1b7346e5831b531f GIT binary patch literal 564 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpR#^NA%Cx&(BWL`2bFuwD2 zaSX8#TsvjAw@jeOvGY5>_q|>h+1u6fBdexi<)tM8-3iJOH-6e{csS^|t`^`h%M4z^ zvrUsp%yCUni-1dr!HteCeu1-6sf(@4&z-gOX8TrnJhnM~hPD2_`!&xEoBNpM46ZP5 z>RM6Fs4Du%wQt&V4?nF#Au;N4dCxlR<XldO9-6?g%eZUVFOxLhq?If5795yX*H)3r zcr-L!Dsz*&v#QSl(?&xbdB=-h`NEg}1Tfsq{4(uywXxqq5w)$a&)ne^j#c_lpTP8G z*_&ovJMIUWi|u_Gk1ED$Xa95SQ_5@D^>EhFOs+Q*8UNIXwA$#oIyO8|+tqV&R#9*$ zUnSd|Hw&5HJe<YZ<N71*xK-Ib1>-|^3yuFWnr2?uxcNuK(*U^*-n;k6AAGamV&=3x zQTjVJM+cmBEL?H-jDy2s*;QO>QThRLANE|lxz@Sy?+%4F#V^}4%*``0mhkR1xTsnd zsl4K{bVpgeu!#g~y%YEC?D&;me>Lr&{KSK$>&ee#llSpUG=!hMOnEB&rtbEo$NBpo ze0#XwfU{CPz~%7UQ+uQ}ChR*S%%W*wac<_u>)Jc^mA`9MySCxd!B^Kd#zy?>WBq3t zA?<j7a@z02UrV#jFFU2SH1ENFaf?TqF86c<HRj3ddVAgxk5KwL|Js^`@zZL)>x*4_ W$LnK$#EXG}fx*+&&t;ucLK6TGg!*^@ literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2ccbfd967d9697cd4b83225558af2911e9571c9b GIT binary patch literal 1283 zcmeAS@N?(olHy`uVBq!ia0y~yV9)?z4mJh`hMs>rav2y{PI<aGhE&WsI>R?dBvs;g z{d;TUyFpPJ%eF4Kv7n|^zp=ULn1t;EM$XP7lUeld*i<WYMHn1eEM+Rk!LA?E!ztJy zD8yIC>OAGhrAO=?vmAmpT<U+jYxid3dVb^0cemaCn{#@yPnp^KJ?}ry{%?H#%xAl{ z8!DE^W+>R*XMV$8#$?-Y`cDL-1XCS@pJejB8Rvppy6eq7etCUAujg?q<WvaP_dQE4 z{y3yycZjut%lnV#r5Q_NT~$>j6J!e{Uv#AAYb{|~a_aH522J@Q@fi&BOpfuWHHbGp zf5x@0=W&%z;t#%xYZ_i1#tsY?XV=JR1*ru$Xe%q8GYMi`*I43cb15zIa$ef*g)OP` zxn+8uo27Eb>{9r}R#PV@sJksCu`zk^$I#qqi)ZJWE@$GC^4#7iY9ct-)8d8n31bVb zX;lK#VjdrPy!sZ;@og0)Rhw5$KOp&F-NcXuofoDxM?Z25Q1Tbd+xYNCT0eV~Php(s z<cV5Oqt_M$Mm(3`W4LW2^O=pEcVCd0)6OHW!U}d3U4JIHF7H4Q=S9Q*f&ljpaicX$ z!zMRzPZfB&W>r(KmiUp+T6+&?C9dbVk>SLWbgX<w;Owuib8E8IxITQlYSWzjwe_o? zU#jS)hV?5lUU-G>@7~0v#&fvx<GF_OUrTZeT5o(*zs?;a!Ie>}_S)%a@u$R+v$Lgb zcLiOYf4R$3h^y$~8P-z=e?C;X^D^2|@K|_BOOua4qui|r8!K13nyLg|73lx<s9^v3 zvz!;@UdMXwyu6)h+Ey2blZUP~$h(=BrA$6PZRxgW&$lFPoN%IEU%xNr>rZXr*ju;F zgx|erIDfsIxhjhHXMvIP?8enx7P6mu>*fc1c=y;ahGSjp;lGuBcQh{SzH#ApT49dK z`Ang8Y6pT&Jlr#3(Hn0W*>~S9f3}}*)^yfuapkkQmiJL7h52FRWrLWr4F+59@QKX* z&iiA|j)#}$b~)uf+UVL>vE{JpQwhGc<u`8Kl#sa+s53)ilYsTF7rV~0@BgWj-}_+F z>;jIHlKqXlCF80s&R_HEmS6Euygc@5k7ASXhVP2g(|73{u6(F=?yx`%zx0!xh0k=> z@2~H(ejI6YT%e^_^d0ZiKSyPK{bY7bNiOgy*`?Sx*{Rj0zP_&O%zjCcZ5wK1&7b$b zS-4u+Re)>xxmODx+IoKSah(vkF4bmQOJ?4@n*L71#9h^eYmdsG-&9-ce|Um#?yRl} zHz)kP-&6SUG5^IIEML~BMqVrRQjA}+dhu305AQAA`6pzU9W{1E>(0+>-l`ogtQT#4 zv{I4dqgB+-Pp<{^Wvq|eKaP}%{%owt&7)o~)wHF}A<4B|UA%w)kz-Te{&=aQJFhvL zcU`h$Qee7tc-{WP?;gh+O*;8F!nyT<D)aZAC7TcAEpl@>Ed4_zXS=)6n^)GSALu(@ zFj_mOP`4*Na%-LC^ZU2XzIy6y&|qkMNLIl0d(*@(Mjs@LFW7h~w7dO(eCMgX;W}ey z)$1FVT(;b{_T{serM4|X+iVsv?@3bGd0_hizGsX6s!a`EBIo^}j%A+F$3@YdzmBZj z*|cUF%e7fvr+yyrOFrYjRQJK&Nt+6#ztwGP_&n*`Q6J-9SNuJG)iEwe+w485%%@SC z)0^p~ht+}=x9!*b3^nYjoiqK*szo(3n7-R@emEuiR&Q1|0|Nttr>mdKI;Vst04OMA Ap8x;= literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..f091b6b0bca859a3f474b03065bef75ba58a9e4c GIT binary patch literal 1588 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 KKbLh*2~7ZftovC2 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..4cde12118dda48d71e01fcb589a74d069c5d7cb5 GIT binary patch literal 1025 zcmeAS@N?(olHy`uVBq!ia0y~yV2}l24mJh`hOo)${0t1tCp=voLn`KMo$i|v6Do4N z{`<b~Ml(xh`LD=b>FK#DR4OpQeBF{oZd^@ytAg%E#Qb2~b^X?|T}6qm0$PzPyj`7G zy_Gu?Tvy63oEqf4uq)x$(ur!5kEj^Gzq`Ntx7tjVxiiC8v%gDvxBLB{bJyoo%T4N0 zVODtQ=;^K!J27NZ$iBu<udg*~FCT{NPxs`yB%kkH^y~kVxl@EEL=|Y%PVng3d}#8q z<uOzJJgdYHcvLY+uqG)m@JPD6bPRpZxu$Va^MN0sr8bOC2?so^*lbvKh};Sgs%$+h z%z0c-{RwkH(}6=il6kTD6)&fCJPV0F<;TF?Bk39J5G@vA`r&eC%fk5NqHDVarDk-x z#vd$NV4viCPRBKQ>KQ4|sNM5<Z%F-|(6+L@mi2H#y-Rk8FvrT>|D|4BlJT3qaC^dy z`Al<PiMy#~=q4m2sI}#?9&Y^C@l7N{dP<V>i+Wy`_(SF_GH?1bcJn2~W`yzIR&v&n zHwq7(^p$5v+Sf3x^?C*FF4e(q*QF|>HkSQxN`4T-liuBTV8bK*O%EQdEA!sxwmOn= z?UScxwmjbZIdxYN+ghe~{*9XrWo&{UU72!%^|WrmE}d^*TJBs<%zjqs`ZenD!Q0Wg z)z!{jsrNI}RyWA{w*5T9?C;-wPVEGH0LQ{N4|eXGuy?QG!nJd+n?Brnto>zY-v1XL z^bO0mMaTI!UQYe^r=s(u>x)yB0SOPXB<H>3tXO586LHe?cEZ!6=k?X@+|Imt;Z5WD zy7))8PqyglPMaOg!<eMimcFg+%}dVdtM<*i@^<glqlSk1ah8#fj-)uHpW86uz%GZJ zw`Vq2PrkAD=<^FRj+H0h?MwOaQ24{w`J9WV3-2mw+thra!*cfH?eczx7q&g<onjPw zjQ4gzN^Pp$O<AJ~_apM$N(OAR^An%#UT;yE(la-|=fm|kN{yx}>(U-fn|rcqYiLo; zi<r*s=eT9%pIz!-&S{>jtaq;Xd#<$P&F$UmocfM*F7Q)L-FK^}@kZzL?dBhoKEIE# zDxCIWncWkao!4w0KVN51@IfQ|xfjc|2d{o4sfadyjXc04r0&GMzV4H7e%%jVlkmGw zj<WvBzklLH_U;>ZE<P&GxmID5uF}h7ebPdivmo=ww_2NX?D2nmX7ukdOgxZNIPZ5^ z&a=hh@6uz7I}T1L(l)+SsQgm!fyQ-9UMtRQp6;h9NB3=Q+b^CRHOpyHfoAp9%MTXU zxm(RSx3th|dD^5SsnY$cpWR!?W#DoBcVyz#M|0+{2w$IlV#1PuNwNR-ePFXu%k;VA q^R|5R?a8lx23>mWT{!KG{qOgR*SIgbw=gg;FnGH9xvX<aXaWFyM)8~g literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d0ef06e7edb86cdfe0d15b4b0d98334a86163658 GIT binary patch literal 1716 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 V&a^duV_;xl@O1TaS?83{1OVHl_EP`= literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..dcdc2306c28505ebc0b6c3a359c4d252bf626b9f GIT binary patch literal 1920 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..2ccbfd967d9697cd4b83225558af2911e9571c9b GIT binary patch literal 1283 zcmeAS@N?(olHy`uVBq!ia0y~yV9)?z4mJh`hMs>rav2y{PI<aGhE&WsI>R?dBvs;g z{d;TUyFpPJ%eF4Kv7n|^zp=ULn1t;EM$XP7lUeld*i<WYMHn1eEM+Rk!LA?E!ztJy zD8yIC>OAGhrAO=?vmAmpT<U+jYxid3dVb^0cemaCn{#@yPnp^KJ?}ry{%?H#%xAl{ z8!DE^W+>R*XMV$8#$?-Y`cDL-1XCS@pJejB8Rvppy6eq7etCUAujg?q<WvaP_dQE4 z{y3yycZjut%lnV#r5Q_NT~$>j6J!e{Uv#AAYb{|~a_aH522J@Q@fi&BOpfuWHHbGp zf5x@0=W&%z;t#%xYZ_i1#tsY?XV=JR1*ru$Xe%q8GYMi`*I43cb15zIa$ef*g)OP` zxn+8uo27Eb>{9r}R#PV@sJksCu`zk^$I#qqi)ZJWE@$GC^4#7iY9ct-)8d8n31bVb zX;lK#VjdrPy!sZ;@og0)Rhw5$KOp&F-NcXuofoDxM?Z25Q1Tbd+xYNCT0eV~Php(s z<cV5Oqt_M$Mm(3`W4LW2^O=pEcVCd0)6OHW!U}d3U4JIHF7H4Q=S9Q*f&ljpaicX$ z!zMRzPZfB&W>r(KmiUp+T6+&?C9dbVk>SLWbgX<w;Owuib8E8IxITQlYSWzjwe_o? zU#jS)hV?5lUU-G>@7~0v#&fvx<GF_OUrTZeT5o(*zs?;a!Ie>}_S)%a@u$R+v$Lgb zcLiOYf4R$3h^y$~8P-z=e?C;X^D^2|@K|_BOOua4qui|r8!K13nyLg|73lx<s9^v3 zvz!;@UdMXwyu6)h+Ey2blZUP~$h(=BrA$6PZRxgW&$lFPoN%IEU%xNr>rZXr*ju;F zgx|erIDfsIxhjhHXMvIP?8enx7P6mu>*fc1c=y;ahGSjp;lGuBcQh{SzH#ApT49dK z`Ang8Y6pT&Jlr#3(Hn0W*>~S9f3}}*)^yfuapkkQmiJL7h52FRWrLWr4F+59@QKX* z&iiA|j)#}$b~)uf+UVL>vE{JpQwhGc<u`8Kl#sa+s53)ilYsTF7rV~0@BgWj-}_+F z>;jIHlKqXlCF80s&R_HEmS6Euygc@5k7ASXhVP2g(|73{u6(F=?yx`%zx0!xh0k=> z@2~H(ejI6YT%e^_^d0ZiKSyPK{bY7bNiOgy*`?Sx*{Rj0zP_&O%zjCcZ5wK1&7b$b zS-4u+Re)>xxmODx+IoKSah(vkF4bmQOJ?4@n*L71#9h^eYmdsG-&9-ce|Um#?yRl} zHz)kP-&6SUG5^IIEML~BMqVrRQjA}+dhu305AQAA`6pzU9W{1E>(0+>-l`ogtQT#4 zv{I4dqgB+-Pp<{^Wvq|eKaP}%{%owt&7)o~)wHF}A<4B|UA%w)kz-Te{&=aQJFhvL zcU`h$Qee7tc-{WP?;gh+O*;8F!nyT<D)aZAC7TcAEpl@>Ed4_zXS=)6n^)GSALu(@ zFj_mOP`4*Na%-LC^ZU2XzIy6y&|qkMNLIl0d(*@(Mjs@LFW7h~w7dO(eCMgX;W}ey z)$1FVT(;b{_T{serM4|X+iVsv?@3bGd0_hizGsX6s!a`EBIo^}j%A+F$3@YdzmBZj z*|cUF%e7fvr+yyrOFrYjRQJK&Nt+6#ztwGP_&n*`Q6J-9SNuJG)iEwe+w485%%@SC z)0^p~ht+}=x9!*b3^nYjoiqK*szo(3n7-R@emEuiR&Q1|0|Nttr>mdKI;Vst04OMA Ap8x;= literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c8f9ed8f5cee1c98386d13b17e89f719e83555b2 GIT binary patch literal 1895 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 OVDNPHb6Mw<&;$VbO<Vi` literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d6b8609df07bf62e5100a53a01510388bd2b22 GIT binary patch literal 2665 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d6b8609df07bf62e5100a53a01510388bd2b22 GIT binary patch literal 2665 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..75b2d164a5a98e212cca15ea7bf2ab5de5108680 GIT binary patch literal 3831 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 U*#tT>FfcH9y85}Sb4q9e0QKHA1^@s6 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..c4df70d39da7941ef3f6dcb7f06a192d8dcb308d GIT binary patch literal 1888 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 O7(8A5T-G@yGywok=Zg*i literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6a84f41e14e27f4b11f16f9ee39279ac98f8d5ac GIT binary patch literal 3294 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d0e1f58536026aebc4f1f70e481f6993c9ff088d GIT binary patch literal 3612 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 0000000..0bedcf2 --- /dev/null +++ b/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/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0y~yU|<Ac4i*LmhOII@ObiSR+@3CuAr*6yf1PJwU}9%v Vnk8dc$iTqB;OXk;vd$@?2>@r242}Q* literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/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!ia0y~yU|<Ac4i*LmhOII@ObiSR+@3CuAr*6yf1PJwU}9%v Vnk8dc$iTqB;OXk;vd$@?2>@r242}Q* literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/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!ia0y~yU|<Ac4i*LmhOII@ObiSR+@3CuAr*6yf1PJwU}9%v Vnk8dc$iTqB;OXk;vd$@?2>@r242}Q* literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000..89c2725 --- /dev/null +++ b/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/ios/Runner/Base.lproj/LaunchScreen.storyboard b/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..f2e259c --- /dev/null +++ b/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12121" systemVersion="16G29" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" colorMatched="YES" initialViewController="01J-lp-oVM"> + <dependencies> + <deployment identifier="iOS"/> + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/> + </dependencies> + <scenes> + <!--View Controller--> + <scene sceneID="EHf-IW-A2E"> + <objects> + <viewController id="01J-lp-oVM" sceneMemberID="viewController"> + <layoutGuides> + <viewControllerLayoutGuide type="top" id="Ydg-fD-yQy"/> + <viewControllerLayoutGuide type="bottom" id="xbc-2k-c8Z"/> + </layoutGuides> + <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3"> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4"> + </imageView> + </subviews> + <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> + <constraints> + <constraint firstItem="YRO-k0-Ey4" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="1a2-6s-vTC"/> + <constraint firstItem="YRO-k0-Ey4" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="4X2-HB-R7a"/> + </constraints> + </view> + </viewController> + <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/> + </objects> + <point key="canvasLocation" x="53" y="375"/> + </scene> + </scenes> + <resources> + <image name="LaunchImage" width="168" height="185"/> + </resources> +</document> diff --git a/ios/Runner/Base.lproj/Main.storyboard b/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f3c2851 --- /dev/null +++ b/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r"> + <dependencies> + <deployment identifier="iOS"/> + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/> + </dependencies> + <scenes> + <!--Flutter View Controller--> + <scene sceneID="tne-QT-ifu"> + <objects> + <viewController id="BYZ-38-t0r" customClass="FlutterViewController" sceneMemberID="viewController"> + <layoutGuides> + <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/> + <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/> + </layoutGuides> + <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC"> + <rect key="frame" x="0.0" y="0.0" width="600" height="600"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> + </view> + </viewController> + <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/> + </objects> + </scene> + </scenes> +</document> diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist new file mode 100644 index 0000000..c72e714 --- /dev/null +++ b/ios/Runner/Info.plist @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CFBundleDevelopmentRegion</key> + <string>$(DEVELOPMENT_LANGUAGE)</string> + <key>CFBundleExecutable</key> + <string>$(EXECUTABLE_NAME)</string> + <key>CFBundleIdentifier</key> + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundleName</key> + <string>mobile_apps</string> + <key>CFBundlePackageType</key> + <string>APPL</string> + <key>CFBundleShortVersionString</key> + <string>$(FLUTTER_BUILD_NAME)</string> + <key>CFBundleSignature</key> + <string>????</string> + <key>CFBundleVersion</key> + <string>$(FLUTTER_BUILD_NUMBER)</string> + <key>LSRequiresIPhoneOS</key> + <true/> + <key>UILaunchStoryboardName</key> + <string>LaunchScreen</string> + <key>UIMainStoryboardFile</key> + <string>Main</string> + <key>UISupportedInterfaceOrientations</key> + <array> + <string>UIInterfaceOrientationPortrait</string> + <string>UIInterfaceOrientationLandscapeLeft</string> + <string>UIInterfaceOrientationLandscapeRight</string> + </array> + <key>UISupportedInterfaceOrientations~ipad</key> + <array> + <string>UIInterfaceOrientationPortrait</string> + <string>UIInterfaceOrientationPortraitUpsideDown</string> + <string>UIInterfaceOrientationLandscapeLeft</string> + <string>UIInterfaceOrientationLandscapeRight</string> + </array> + <key>UIViewControllerBasedStatusBarAppearance</key> + <false/> +</dict> +</plist> diff --git a/ios/Runner/Runner-Bridging-Header.h b/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000..308a2a5 --- /dev/null +++ b/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/lib/main.dart b/lib/main.dart new file mode 100644 index 0000000..26c981e --- /dev/null +++ b/lib/main.dart @@ -0,0 +1,6 @@ +import 'package:flutter/material.dart'; +import 'package:mobile_apps/src/app.dart'; + +void main() { + runApp(App()); +} diff --git a/lib/src/app.dart b/lib/src/app.dart new file mode 100644 index 0000000..aaa1041 --- /dev/null +++ b/lib/src/app.dart @@ -0,0 +1,25 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; +import 'package:mobile_apps/src/services/auth_service.dart'; +import 'package:provider/provider.dart'; + +import 'routes.dart'; +import 'theme.dart'; + +class App extends StatelessWidget { + @override + Widget build(BuildContext context) { + return MultiProvider( + providers: [ + // Add service that can be accessed globally here + Provider<AuthService>(create: (_) => AuthService()), + ], + child: MaterialApp( + theme: AppTheme.light(), + darkTheme: AppTheme.dark(), + initialRoute: AppRoutes.login.route, + routes: AppRoutes.routes, + ), + ); + } +} diff --git a/lib/src/common/constants.dart b/lib/src/common/constants.dart new file mode 100644 index 0000000..6d1c74e --- /dev/null +++ b/lib/src/common/constants.dart @@ -0,0 +1,4 @@ +class MarginConstants { + static double horizontalFromScreen = 16.0; + static double verticalFromScreen = 16.0; +} diff --git a/lib/src/extensions/scaffold_extension.dart b/lib/src/extensions/scaffold_extension.dart new file mode 100644 index 0000000..0273b66 --- /dev/null +++ b/lib/src/extensions/scaffold_extension.dart @@ -0,0 +1,16 @@ +import 'package:flutter/material.dart'; +import 'package:dartx/dartx.dart'; + +extension ScaffoldExtension on ScaffoldState { + ScaffoldFeatureController<SnackBar, SnackBarClosedReason> showErrorSnackBar( + String text, + ) { + return showSnackBar( + SnackBar( + content: Text(text), + backgroundColor: Colors.redAccent, + duration: 5.seconds, + ), + ); + } +} diff --git a/lib/src/models/inventory.dart b/lib/src/models/inventory.dart new file mode 100644 index 0000000..847aa6e --- /dev/null +++ b/lib/src/models/inventory.dart @@ -0,0 +1,31 @@ +import 'package:equatable/equatable.dart'; +import 'package:json_annotation/json_annotation.dart'; +import 'package:to_string/to_string.dart'; + +part 'inventory.g.dart'; + +@JsonSerializable() +@ToString() +class Inventory extends Equatable { + final String name; + final String imageUrl; + final int availableStock; + final int totalStock; + + Inventory({ + this.name, + this.imageUrl, + this.availableStock, + this.totalStock, + }); + + factory Inventory.fromJson(Map<String, dynamic> json) => _$InventoryFromJson(json); + + Map<String, dynamic> toJson() => _$InventoryToJson(this); + + @override + List<Object> get props => [name, imageUrl]; + + @override + String toString() => _$InventoryToString(this); +} diff --git a/lib/src/models/inventory.g.dart b/lib/src/models/inventory.g.dart new file mode 100644 index 0000000..92cf8cc --- /dev/null +++ b/lib/src/models/inventory.g.dart @@ -0,0 +1,31 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'inventory.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +Inventory _$InventoryFromJson(Map<String, dynamic> json) { + return Inventory( + name: json['name'] as String, + imageUrl: json['imageUrl'] as String, + availableStock: json['availableStock'] as int, + totalStock: json['totalStock'] as int, + ); +} + +Map<String, dynamic> _$InventoryToJson(Inventory instance) => <String, dynamic>{ + 'name': instance.name, + 'imageUrl': instance.imageUrl, + 'availableStock': instance.availableStock, + 'totalStock': instance.totalStock, + }; + +// ************************************************************************** +// ToStringGenerator +// ************************************************************************** + +String _$InventoryToString(Inventory o) { + return '''Inventory{name: ${o.name}, imageUrl: ${o.imageUrl}, availableStock: ${o.availableStock}, totalStock: ${o.totalStock}}'''; +} diff --git a/lib/src/repositories/inventory_repository.dart b/lib/src/repositories/inventory_repository.dart new file mode 100644 index 0000000..58a5c04 --- /dev/null +++ b/lib/src/repositories/inventory_repository.dart @@ -0,0 +1,14 @@ +import 'package:cloud_firestore/cloud_firestore.dart'; +import 'package:flutter/widgets.dart'; +import 'package:mobile_apps/src/models/inventory.dart'; + +class InventoryRepository { + CollectionReference get inventoriesCollections => Firestore.instance.collection('inventories'); + + Stream<QuerySnapshot> get inventoriesSnapshots => inventoriesCollections.snapshots(); + + List<Inventory> inventories(AsyncSnapshot<QuerySnapshot> snapshot) { + if (!snapshot.hasData || snapshot.hasError) return []; + return snapshot.data.documents.map<Inventory>((document) => Inventory.fromJson(document.data)).toList(); + } +} diff --git a/lib/src/routes.dart b/lib/src/routes.dart new file mode 100644 index 0000000..a23b36e --- /dev/null +++ b/lib/src/routes.dart @@ -0,0 +1,37 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; + +import 'screens/home/home_screen.dart'; +import 'screens/login/login_screen.dart'; + +class AppRoute { + final String route; + final WidgetBuilder widgetBuilder; + + AppRoute(this.route, this.widgetBuilder) : assert(route.startsWith('/')), assert(widgetBuilder != null); +} + +class AppRoutes { + // Add known registered routes in this variable + static final List<AppRoute> _registeredRoutes = [ + AppRoutes.home, + AppRoutes.login, + ]; + + static Map<String, WidgetBuilder> get routes => Map.fromEntries( + _registeredRoutes.map( + (route) => + MapEntry<String, WidgetBuilder>(route.route, route.widgetBuilder), + ), + ); + + // Route for Home Screen + static final AppRoute home = AppRoute('/home', (_) => HomeScreen()); + + // Route for Login Screen + static final AppRoute login = AppRoute('/login', (_) => LoginScreen()); + + /** + * Add new Route definition below here and add it to [AppRoutes._registeredRoutes] + */ +} diff --git a/lib/src/screens/home/home_screen.dart b/lib/src/screens/home/home_screen.dart new file mode 100644 index 0000000..3bd8bfc --- /dev/null +++ b/lib/src/screens/home/home_screen.dart @@ -0,0 +1,65 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/scheduler.dart'; +import 'package:flutter/widgets.dart'; +import 'package:mobile_apps/src/common/constants.dart'; +import 'package:mobile_apps/src/screens/home/inventories/inventories.dart'; +import 'package:mobile_apps/src/services/auth_service.dart'; +import 'package:provider/provider.dart'; + +import '../../routes.dart'; + +class HomeScreen extends StatelessWidget { + @override + Widget build(BuildContext context) { + final authService = Provider.of<AuthService>(context); + if (!authService.isAuthenticated) { + SchedulerBinding.instance.addPostFrameCallback((_) { + Navigator.of(context).pushReplacementNamed(AppRoutes.login.route); + }); + return Container(); + } + final account = authService.account; + return Scaffold( + body: ListView( + children: <Widget>[ + Container( + margin: EdgeInsets.symmetric( + horizontal: MarginConstants.horizontalFromScreen, + vertical: MarginConstants.verticalFromScreen, + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: <Widget>[ + Text( + 'Halo,\n${account.displayName}!', + style: Theme.of(context).textTheme.subtitle1, + textAlign: TextAlign.left, + ), + Padding( + padding: EdgeInsets.only(top: 24.0), + child: InventoriesWidget(), + ), + ], + ), + ), + ], + ), + appBar: AppBar( + title: + Text('Siaga Wabah', style: TextStyle(fontWeight: FontWeight.bold)), + actions: <Widget>[ + Container( + child: Icon(Icons.share), + margin: EdgeInsets.only(right: 8.0), + ), + Container( + margin: + EdgeInsets.only(right: MarginConstants.horizontalFromScreen * 2), + child: Icon(Icons.notifications), + ), + ], + centerTitle: true, + ), + ); + } +} diff --git a/lib/src/screens/home/inventories/inventories.dart b/lib/src/screens/home/inventories/inventories.dart new file mode 100644 index 0000000..4b5cfb4 --- /dev/null +++ b/lib/src/screens/home/inventories/inventories.dart @@ -0,0 +1,48 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/scheduler.dart'; +import 'package:flutter/widgets.dart'; +import 'package:mobile_apps/src/repositories/inventory_repository.dart'; + +// Extension import +import 'package:mobile_apps/src/extensions/scaffold_extension.dart'; + +import 'inventory.dart'; + +class InventoriesWidget extends StatelessWidget { + @override + Widget build(BuildContext context) { + final repository = InventoryRepository(); + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: <Widget>[ + Text( + 'Persediaan Siaga Wabah', + style: Theme.of(context).textTheme.headline5, + ), + StreamBuilder( + stream: repository.inventoriesCollections.snapshots(), + builder: (_, snapshot) { + if (snapshot.hasError) { + SchedulerBinding.instance.addPostFrameCallback((_) { + Scaffold.of(context).showErrorSnackBar( + 'Oops! Ada sesuatu yang salah, mohon coba lagi ya.'); + }); + } + if (snapshot.connectionState == ConnectionState.waiting) { + return Center(child: CircularProgressIndicator()); + } + final inventories = repository.inventories(snapshot).take(5); + return Column( + children: [ + ...inventories + .map((inventory) => InventoryWidget(inventory)) + .toList(), + FlatButton(child: Text('Lihat Semua'), onPressed: () {},), + ], + ); + }, + ) + ], + ); + } +} diff --git a/lib/src/screens/home/inventories/inventory.dart b/lib/src/screens/home/inventories/inventory.dart new file mode 100644 index 0000000..7e52872 --- /dev/null +++ b/lib/src/screens/home/inventories/inventory.dart @@ -0,0 +1,26 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; +import 'package:mobile_apps/src/models/inventory.dart'; + +extension ImageStringExtension on String { + NetworkImage get networkImage => NetworkImage(this); +} + +class InventoryWidget extends StatelessWidget { + final Inventory inventory; + + const InventoryWidget(this.inventory, {Key key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Card( + child: ListTile( + trailing: CircleAvatar( + backgroundImage: inventory.imageUrl?.networkImage, + ), + title: Text(inventory.name), + subtitle: Text('${inventory.availableStock}/${inventory.totalStock}'), + ), + ); + } +} diff --git a/lib/src/screens/login/login_screen.dart b/lib/src/screens/login/login_screen.dart new file mode 100644 index 0000000..a647a59 --- /dev/null +++ b/lib/src/screens/login/login_screen.dart @@ -0,0 +1,89 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; +import 'package:google_sign_in/google_sign_in.dart'; +import 'package:provider/provider.dart'; + +import '../../routes.dart'; +import '../../services/auth_service.dart'; + +class LoginScreen extends StatefulWidget { + @override + _LoginScreenState createState() => _LoginScreenState(); +} + +class _LoginScreenState extends State<LoginScreen> { + bool isLoading = false; + + void onGoogleSignInButtonPressed( + BuildContext context, AuthService authService) async { + final googleSignIn = GoogleSignIn(); + try { + setState(() => isLoading = true); + if (await googleSignIn.isSignedIn()) await googleSignIn.disconnect(); + final account = await googleSignIn.signIn(); + if (account == null) throw 'Mohon masuk menggunakan Akun Google'; + await authService.authenticate(account); + setState(() => isLoading = false); + } catch (e) { + Scaffold.of(context).showSnackBar( + SnackBar( + content: Text('Terjadi kesalahan, mohon masuk menggunakan Akun Google'), + ), + ); + setState(() => isLoading = false); + } + if (authService.isAuthenticated) { + await Navigator.of(context).pushNamedAndRemoveUntil(AppRoutes.home.route, (_) => false); + } + } + + @override + Widget build(BuildContext context) { + final authService = Provider.of<AuthService>(context); + return Scaffold( + body: Builder( + builder: (BuildContext context) => Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: <Widget>[ + Container( + margin: EdgeInsets.symmetric(vertical: 8.0), + child: Text('Siaga Wabah', + style: Theme.of(context).textTheme.headline3), + ), + OutlineButton( + onPressed: isLoading + ? null + : () => onGoogleSignInButtonPressed(context, authService), + color: Colors.pink, + highlightColor: Colors.blue, + child: Padding( + padding: EdgeInsets.all(16.0), + child: Row( + mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.center, + children: <Widget>[ + isLoading + ? CircularProgressIndicator() + : Image( + image: + AssetImage('assets/images/google_logo.png'), + height: 24.0, + ), + Container( + margin: const EdgeInsets.only(left: 10), + child: Text( + 'Sign in with Google', + ), + ) + ], + ), + ), + ), + ], + ), + ), + ), + ); + } +} diff --git a/lib/src/services/auth_service.dart b/lib/src/services/auth_service.dart new file mode 100644 index 0000000..3fd1888 --- /dev/null +++ b/lib/src/services/auth_service.dart @@ -0,0 +1,11 @@ +import 'package:google_sign_in/google_sign_in.dart'; + +class AuthService { + GoogleSignInAccount account; + + Future<void> authenticate(GoogleSignInAccount account) async { + this.account = account; + } + + bool get isAuthenticated => account != null; +} \ No newline at end of file diff --git a/lib/src/theme.dart b/lib/src/theme.dart new file mode 100644 index 0000000..29f383c --- /dev/null +++ b/lib/src/theme.dart @@ -0,0 +1,44 @@ +import 'package:flutter/material.dart'; +import 'package:google_fonts/google_fonts.dart'; + +class AppColors { + static const Color indigo = Color(0xFF096B91); + static const Color pink = Color(0xFFEDD7D7); + static const Color bluePrimary = Color(0xFF007AFF); + static const Color blueAlternative = Color(0xFF82C5E6); +} + +class AppTheme { + static final TextTheme textTheme = GoogleFonts.poppinsTextTheme().apply( + bodyColor: Colors.black, + displayColor: Colors.black, + ); + + static ThemeData _customThemeData(ThemeData base) { + final colorScheme = ColorScheme.light().copyWith( + primary: AppColors.bluePrimary, + primaryVariant: AppColors.blueAlternative, + secondary: AppColors.pink, + ); + return base.copyWith( + primaryColor: AppColors.bluePrimary, + primaryColorLight: AppColors.blueAlternative, + primaryColorDark: AppColors.bluePrimary, + primaryTextTheme: textTheme, + textTheme: textTheme, + accentColor: AppColors.pink, + colorScheme: colorScheme, + appBarTheme: AppBarTheme().copyWith( + color: Colors.white, + iconTheme: IconThemeData().copyWith(color: Colors.black), + ), + iconTheme: IconThemeData().copyWith( + color: Colors.black12, + ), + ); + } + + static ThemeData light() => _customThemeData(ThemeData.light()); + + static ThemeData dark() => _customThemeData(ThemeData.dark()); +} diff --git a/pubspec.lock b/pubspec.lock new file mode 100644 index 0000000..6a66e8a --- /dev/null +++ b/pubspec.lock @@ -0,0 +1,691 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.3" + analyzer: + dependency: transitive + description: + name: analyzer + url: "https://pub.dartlang.org" + source: hosted + version: "0.39.4" + archive: + dependency: transitive + description: + name: archive + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.11" + args: + dependency: transitive + description: + name: args + url: "https://pub.dartlang.org" + source: hosted + version: "1.5.2" + async: + dependency: transitive + description: + name: async + url: "https://pub.dartlang.org" + source: hosted + version: "2.4.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.5" + build: + dependency: transitive + description: + name: build + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.2" + build_config: + dependency: transitive + description: + name: build_config + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.2" + build_daemon: + dependency: transitive + description: + name: build_daemon + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.3" + build_resolvers: + dependency: transitive + description: + name: build_resolvers + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.3" + build_runner: + dependency: "direct dev" + description: + name: build_runner + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.0" + build_runner_core: + dependency: transitive + description: + name: build_runner_core + url: "https://pub.dartlang.org" + source: hosted + version: "4.5.2" + built_collection: + dependency: transitive + description: + name: built_collection + url: "https://pub.dartlang.org" + source: hosted + version: "4.3.2" + built_value: + dependency: transitive + description: + name: built_value + url: "https://pub.dartlang.org" + source: hosted + version: "7.0.9" + characters: + dependency: transitive + description: + name: characters + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.1" + charcode: + dependency: transitive + description: + name: charcode + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.2" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.2" + cloud_firestore: + dependency: "direct main" + description: + name: cloud_firestore + url: "https://pub.dartlang.org" + source: hosted + version: "0.13.4+2" + cloud_firestore_platform_interface: + dependency: transitive + description: + name: cloud_firestore_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + cloud_firestore_web: + dependency: transitive + description: + name: cloud_firestore_web + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.1+2" + code_builder: + dependency: transitive + description: + name: code_builder + url: "https://pub.dartlang.org" + source: hosted + version: "3.2.1" + collection: + dependency: transitive + description: + name: collection + url: "https://pub.dartlang.org" + source: hosted + version: "1.14.11" + convert: + dependency: transitive + description: + name: convert + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.1" + crypto: + dependency: transitive + description: + name: crypto + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.3" + csslib: + dependency: transitive + description: + name: csslib + url: "https://pub.dartlang.org" + source: hosted + version: "0.16.1" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.3" + dart_style: + dependency: transitive + description: + name: dart_style + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.3" + dartx: + dependency: "direct main" + description: + name: dartx + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.0" + dio: + dependency: "direct main" + description: + name: dio + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.9" + equatable: + dependency: "direct main" + description: + name: equatable + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.1" + firebase: + dependency: transitive + description: + name: firebase + url: "https://pub.dartlang.org" + source: hosted + version: "7.2.1" + firebase_auth: + dependency: "direct main" + description: + name: firebase_auth + url: "https://pub.dartlang.org" + source: hosted + version: "0.15.5+3" + firebase_auth_platform_interface: + dependency: transitive + description: + name: firebase_auth_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.7" + firebase_auth_web: + dependency: transitive + description: + name: firebase_auth_web + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.2" + firebase_core: + dependency: "direct main" + description: + name: firebase_core + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.4+3" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.4" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.1+2" + fixnum: + dependency: transitive + description: + name: fixnum + url: "https://pub.dartlang.org" + source: hosted + version: "0.10.11" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + 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" + glob: + dependency: transitive + description: + name: glob + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + google_fonts: + dependency: "direct main" + description: + name: google_fonts + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.10" + google_sign_in: + dependency: "direct main" + description: + name: google_sign_in + url: "https://pub.dartlang.org" + source: hosted + version: "4.2.0" + google_sign_in_platform_interface: + dependency: transitive + description: + name: google_sign_in_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + google_sign_in_web: + dependency: transitive + description: + name: google_sign_in_web + url: "https://pub.dartlang.org" + source: hosted + version: "0.8.4" + graphs: + dependency: transitive + description: + name: graphs + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.0" + html: + dependency: transitive + description: + name: html + url: "https://pub.dartlang.org" + source: hosted + version: "0.14.0+3" + http: + dependency: transitive + description: + name: http + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.0+4" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.0" + http_parser: + dependency: transitive + description: + name: http_parser + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.3" + image: + dependency: transitive + description: + name: image + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.4" + io: + dependency: transitive + description: + name: io + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.3" + js: + dependency: transitive + description: + name: js + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.1+1" + json_annotation: + dependency: "direct main" + description: + name: json_annotation + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.1" + json_serializable: + dependency: "direct dev" + description: + name: json_serializable + url: "https://pub.dartlang.org" + source: hosted + version: "3.2.5" + logging: + dependency: transitive + description: + name: logging + url: "https://pub.dartlang.org" + source: hosted + version: "0.11.4" + matcher: + dependency: transitive + description: + name: matcher + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.6" + meta: + dependency: transitive + description: + name: meta + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.8" + mime: + dependency: transitive + description: + name: mime + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.6+3" + nested: + dependency: transitive + description: + name: nested + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.4" + node_interop: + dependency: transitive + description: + name: node_interop + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.3" + node_io: + dependency: transitive + description: + name: node_io + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1+2" + package_config: + dependency: transitive + description: + name: package_config + url: "https://pub.dartlang.org" + source: hosted + version: "1.9.2" + package_resolver: + dependency: transitive + description: + name: package_resolver + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.10" + path: + dependency: transitive + description: + name: path + url: "https://pub.dartlang.org" + source: hosted + version: "1.6.4" + path_provider: + dependency: transitive + description: + name: path_provider + url: "https://pub.dartlang.org" + source: hosted + version: "1.6.5" + path_provider_macos: + dependency: transitive + description: + name: path_provider_macos + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.4" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + pedantic: + dependency: "direct dev" + description: + name: pedantic + url: "https://pub.dartlang.org" + source: hosted + version: "1.9.0" + petitparser: + dependency: transitive + description: + name: petitparser + url: "https://pub.dartlang.org" + source: hosted + version: "2.4.0" + platform: + dependency: transitive + description: + name: platform + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.1" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.2" + pool: + dependency: transitive + description: + name: pool + url: "https://pub.dartlang.org" + source: hosted + version: "1.4.0" + provider: + dependency: "direct main" + description: + name: provider + url: "https://pub.dartlang.org" + source: hosted + version: "4.0.4" + pub_semver: + dependency: transitive + description: + name: pub_semver + url: "https://pub.dartlang.org" + source: hosted + version: "1.4.4" + pubspec_parse: + dependency: transitive + description: + name: pubspec_parse + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.5" + quiver: + dependency: transitive + description: + name: quiver + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.5" + shelf: + dependency: transitive + description: + name: shelf + url: "https://pub.dartlang.org" + source: hosted + version: "0.7.5" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.3" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_gen: + dependency: transitive + description: + name: source_gen + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.5" + source_span: + dependency: transitive + description: + name: source_span + url: "https://pub.dartlang.org" + source: hosted + version: "1.5.5" + stack_trace: + dependency: transitive + description: + name: stack_trace + url: "https://pub.dartlang.org" + source: hosted + version: "1.9.3" + stream_channel: + dependency: transitive + description: + name: stream_channel + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + stream_transform: + dependency: transitive + description: + name: stream_transform + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.5" + term_glyph: + dependency: transitive + description: + name: term_glyph + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + test_api: + dependency: transitive + description: + name: test_api + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.15" + time: + dependency: transitive + description: + name: time + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + timing: + dependency: transitive + description: + name: timing + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.1+2" + to_string: + dependency: "direct main" + description: + name: to_string + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.1" + to_string_generator: + dependency: "direct dev" + description: + name: to_string_generator + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.1" + typed_data: + dependency: transitive + description: + name: typed_data + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.6" + vector_math: + dependency: transitive + description: + name: vector_math + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.8" + watcher: + dependency: transitive + description: + name: watcher + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.7+14" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + xml: + dependency: transitive + description: + name: xml + url: "https://pub.dartlang.org" + source: hosted + version: "3.5.0" + yaml: + dependency: transitive + description: + name: yaml + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.0" +sdks: + dart: ">=2.7.0 <3.0.0" + flutter: ">=1.12.13+hotfix.4 <2.0.0" diff --git a/pubspec.yaml b/pubspec.yaml new file mode 100644 index 0000000..19f121e --- /dev/null +++ b/pubspec.yaml @@ -0,0 +1,93 @@ +name: mobile_apps +description: A health care equipment marketplace to help COVID-19 situation. + +# 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.7.0 <3.0.0" + +dependencies: + flutter: + sdk: flutter + # Firebase and Google Sign In Dependencies + firebase_core: ^0.4.0+9 + firebase_auth: ^0.15.5+3 + cloud_firestore: ^0.13.3 + google_sign_in: ^4.2.0 + + + # Other Flutter dependencies + google_fonts: ^0.3.10 + provider: ^4.0.4 + + # Dart utils + equatable: ^1.1.1 + dio: ^3.0.9 + json_annotation: ^3.0.0 + to_string: ^1.2.1 + dartx: ^0.3.0 + + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^0.1.3 + +dev_dependencies: + flutter_test: + sdk: flutter + build_runner: ^1.0.0 + json_serializable: ^3.2.0 + to_string_generator: ^1.2.1 + + # Linter dependency + pedantic: ^1.8.0 # The default Linter package used in Google + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# 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 + + assets: + - assets/images/google_logo.png + + # 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/test/navigation_test.dart b/test/navigation_test.dart new file mode 100644 index 0000000..2aae7b9 --- /dev/null +++ b/test/navigation_test.dart @@ -0,0 +1,10 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:mobile_apps/src/app.dart'; +import 'package:mobile_apps/src/screens/login/login_screen.dart'; + +void main() { + testWidgets('Initial route is Login', (WidgetTester tester) async { + await tester.pumpWidget(App()); + expect(find.byType(LoginScreen), findsOneWidget); + }); +} diff --git a/web/favicon.png b/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s77>k44ofy`glX=O&z`$AH z5n0T@pr;JNj1^1m%NQ6KBQrxHN+NuHtdjF{^%7I^lT!66atjzhz^1~gBDWwnwIorY zA~z?m*s8)-39P~@uh<GCtgoa1R#K8}s}$iIpx~Tel&WB=XQF4IWXGkTpkPy!l4cd; z;s(`Tl#*tvlu=SrV5P5LUS6(OZmgGIl&)`RX=$l%V5Dzkq+67drdwQ@SCUwvn^&w1 zF$89gOKNd)QD#9&W`3Rm$lS!F{L&IzB_)tW3NQe1XGvxn!lt}psJD{ybM-+o`i6Q2 z`f#&B#)Cwy{EISE^GXsy=Gz(CfK{T1LG7{82U(8f7>G~7qCqZhc3d|4;4lG&j~$oK zA@xWG2F9zNE{-7<g0;c6{?d*DwbkWz%`Qn?huRyIJUkyNsBkNLtyodm`{EO`fUnl9 zCB0MBRvzN_m}%w8WX9n>;ld7wO#(qnZWJZzI2E3_xA*Lsx!2?73+ET^w%+}I@67GR zPL~gKB+lnDthp%7_f?t4uW8c8|3WP+WgZ_FE&TA=jOG3EO9#GP7O}Aw)>E_$k#Ij{ zy7GD-^V?e9l7~+mufGc|5hy!fsr=)zztlt_?dh+%eqZG?+EVFvYJGT3%B4l+c?Nxv zA961J%WD)5K5(#z=Uq!-q}j6RjfU+9tC!e#p8CvEH~sU+6WhDDJxnp0o^W94eWCU1 zQd#DyR^MO$Yr>MKOsyrcjGjlI&9nHBnS0EEGw0Y$CX2WHmGZe!`~O@#c5SN5zDu26 zDI4BKt!FtLvCi9OcFDt_gv}BORd*bZl^1SM*<kdx(e>A_yFxrSX8ds2x$lS21HT;^ zTCIz7I(nCKmV|Unv7TVUR`#dH$H;AN(TuMbbG%<I39k9|LvpRXBg-;5gQ|}*vuFG$ zvwnK}seW&(xzxRA+wH|GvU|fy47XTio?u><%3CMZUe|J|QuJuIw1-!H;WNWB?$;ib zdFQ+9g^uhz>as0SX1QKp$Jx0PS=bUhTs~c2!d=hEU?gX@B64~UD6e?B`njxgN@xNA DfL3B_ literal 0 HcmV?d00001 diff --git a/web/icons/Icon-192.png b/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 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 L>gTe~DWM4f2kRIC literal 0 HcmV?d00001 diff --git a/web/icons/Icon-512.png b/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/web/index.html b/web/index.html new file mode 100644 index 0000000..be87cca --- /dev/null +++ b/web/index.html @@ -0,0 +1,64 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="UTF-8" /> + <meta content="IE=Edge" http-equiv="X-UA-Compatible" /> + <meta name="description" content="A new Flutter project." /> + + <!-- iOS meta tags & icons --> + <meta name="apple-mobile-web-app-capable" content="yes" /> + <meta name="apple-mobile-web-app-status-bar-style" content="black" /> + <meta name="apple-mobile-web-app-title" content="mobile_apps" /> + <link rel="apple-touch-icon" href="icons/Icon-192.png" /> + + <!-- Favicon --> + <link rel="shortcut icon" type="image/png" href="favicon.png" /> + + <title>COVID10HARI</title> + <link rel="manifest" href="manifest.json" /> + + <meta name="google-signin-client_id" content="341221363005-ev5ijn7e8vn3qnrgjtmfjci5an4mtjij.apps.googleusercontent.com" /> + </head> + <body> + <!-- Firebase dependencies begin here--> + <!-- The core Firebase JS SDK is always required and must be listed first --> + <script src="https://www.gstatic.com/firebasejs/7.12.0/firebase-app.js"></script> + + <!-- TODO: Add SDKs here if we use more Firebase products + https://firebase.google.com/docs/web/setup#available-libraries --> + <script src="https://www.gstatic.com/firebasejs/7.12.0/firebase-analytics.js"></script> + <script src="https://www.gstatic.com/firebasejs/7.12.0/firebase-auth.js"></script> + <script src="https://www.gstatic.com/firebasejs/7.12.0/firebase-firestore.js"></script> + + <script> + // Your web app's Firebase configuration + var firebaseConfig = { + apiKey: "AIzaSyDpDw0CC0N2J-vRIS8mkUbSSyCQFZ58Htg", + authDomain: "corona-fasilkom.firebaseapp.com", + databaseURL: "https://corona-fasilkom.firebaseio.com", + projectId: "corona-fasilkom", + storageBucket: "corona-fasilkom.appspot.com", + messagingSenderId: "341221363005", + appId: "1:341221363005:web:56f1eb3c7f6c522da7c954", + measurementId: "G-TRYY6NYS5Z" + }; + // Initialize Firebase + firebase.initializeApp(firebaseConfig); + firebase.analytics(); + </script> + <!-- Firebase dependencies end--> + + <!-- This script installs service_worker.js to provide PWA functionality to + application. For more information, see: + https://developers.google.com/web/fundamentals/primers/service-workers --> + <script> + if ("serviceWorker" in navigator) { + window.addEventListener("load", function() { + navigator.serviceWorker.register("/flutter_service_worker.js"); + }); + } + </script> + + <script src="main.dart.js" type="application/javascript"></script> + </body> +</html> diff --git a/web/manifest.json b/web/manifest.json new file mode 100644 index 0000000..01d824d --- /dev/null +++ b/web/manifest.json @@ -0,0 +1,23 @@ +{ + "name": "mobile_apps", + "short_name": "mobile_apps", + "start_url": ".", + "display": "minimal-ui", + "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" + } + ] +} -- GitLab