From 086a77b1b8acac750b32a6ba17badfde6b2ae0c6 Mon Sep 17 00:00:00 2001 From: Filip Hracek Date: Tue, 23 Jul 2019 15:40:43 -0700 Subject: [PATCH] Add provider_shopper (#87) This is the code for the sample at https://flutter.dev/docs/development/data-and-backend/state-mgmt/simple. --- provider_shopper/.gitignore | 70 +++ provider_shopper/.metadata | 10 + provider_shopper/README.md | 54 ++ provider_shopper/analysis_options.yaml | 30 + provider_shopper/android/app/build.gradle | 67 +++ .../android/app/src/debug/AndroidManifest.xml | 7 + .../android/app/src/main/AndroidManifest.xml | 33 ++ .../flutter/provider_shopper/MainActivity.kt | 13 + .../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 .../app/src/main/res/values/styles.xml | 8 + .../app/src/profile/AndroidManifest.xml | 7 + provider_shopper/android/build.gradle | 31 ++ provider_shopper/android/gradle.properties | 1 + .../gradle/wrapper/gradle-wrapper.properties | 6 + provider_shopper/android/settings.gradle | 15 + provider_shopper/fonts/Corben/Corben-Bold.ttf | Bin 0 -> 122628 bytes provider_shopper/fonts/Corben/OFL.txt | 94 ++++ .../ios/Flutter/AppFrameworkInfo.plist | 26 + provider_shopper/ios/Flutter/Debug.xcconfig | 1 + provider_shopper/ios/Flutter/Release.xcconfig | 1 + .../ios/Runner.xcodeproj/project.pbxproj | 514 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/xcschemes/Runner.xcscheme | 93 ++++ .../contents.xcworkspacedata | 7 + provider_shopper/ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 +++++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 11112 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 + .../Runner/Base.lproj/LaunchScreen.storyboard | 37 ++ .../ios/Runner/Base.lproj/Main.storyboard | 26 + provider_shopper/ios/Runner/Info.plist | 45 ++ .../ios/Runner/Runner-Bridging-Header.h | 1 + provider_shopper/lib/common/theme.dart | 17 + provider_shopper/lib/main.dart | 44 ++ provider_shopper/lib/models/cart.dart | 38 ++ provider_shopper/lib/models/catalog.dart | 63 +++ provider_shopper/lib/screens/cart.dart | 83 +++ provider_shopper/lib/screens/catalog.dart | 97 ++++ provider_shopper/pubspec.lock | 384 +++++++++++++ provider_shopper/pubspec.yaml | 29 + provider_shopper/test/widget_test.dart | 29 + travis_script.sh | 1 + 65 files changed, 2164 insertions(+) create mode 100644 provider_shopper/.gitignore create mode 100644 provider_shopper/.metadata create mode 100644 provider_shopper/README.md create mode 100644 provider_shopper/analysis_options.yaml create mode 100644 provider_shopper/android/app/build.gradle create mode 100644 provider_shopper/android/app/src/debug/AndroidManifest.xml create mode 100644 provider_shopper/android/app/src/main/AndroidManifest.xml create mode 100644 provider_shopper/android/app/src/main/kotlin/dev/flutter/provider_shopper/MainActivity.kt create mode 100644 provider_shopper/android/app/src/main/res/drawable/launch_background.xml create mode 100644 provider_shopper/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 provider_shopper/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 provider_shopper/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 provider_shopper/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 provider_shopper/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 provider_shopper/android/app/src/main/res/values/styles.xml create mode 100644 provider_shopper/android/app/src/profile/AndroidManifest.xml create mode 100644 provider_shopper/android/build.gradle create mode 100644 provider_shopper/android/gradle.properties create mode 100644 provider_shopper/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 provider_shopper/android/settings.gradle create mode 100644 provider_shopper/fonts/Corben/Corben-Bold.ttf create mode 100644 provider_shopper/fonts/Corben/OFL.txt create mode 100644 provider_shopper/ios/Flutter/AppFrameworkInfo.plist create mode 100644 provider_shopper/ios/Flutter/Debug.xcconfig create mode 100644 provider_shopper/ios/Flutter/Release.xcconfig create mode 100644 provider_shopper/ios/Runner.xcodeproj/project.pbxproj create mode 100644 provider_shopper/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 provider_shopper/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 provider_shopper/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 provider_shopper/ios/Runner/AppDelegate.swift create mode 100644 provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 provider_shopper/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 provider_shopper/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 provider_shopper/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 provider_shopper/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 provider_shopper/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 provider_shopper/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 provider_shopper/ios/Runner/Base.lproj/Main.storyboard create mode 100644 provider_shopper/ios/Runner/Info.plist create mode 100644 provider_shopper/ios/Runner/Runner-Bridging-Header.h create mode 100644 provider_shopper/lib/common/theme.dart create mode 100644 provider_shopper/lib/main.dart create mode 100644 provider_shopper/lib/models/cart.dart create mode 100644 provider_shopper/lib/models/catalog.dart create mode 100644 provider_shopper/lib/screens/cart.dart create mode 100644 provider_shopper/lib/screens/catalog.dart create mode 100644 provider_shopper/pubspec.lock create mode 100644 provider_shopper/pubspec.yaml create mode 100644 provider_shopper/test/widget_test.dart diff --git a/provider_shopper/.gitignore b/provider_shopper/.gitignore new file mode 100644 index 000000000..07488ba61 --- /dev/null +++ b/provider_shopper/.gitignore @@ -0,0 +1,70 @@ +# 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 diff --git a/provider_shopper/.metadata b/provider_shopper/.metadata new file mode 100644 index 000000000..033ad2af2 --- /dev/null +++ b/provider_shopper/.metadata @@ -0,0 +1,10 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: 7a4c33425ddd78c54aba07d86f3f9a4a0051769b + channel: stable + +project_type: app diff --git a/provider_shopper/README.md b/provider_shopper/README.md new file mode 100644 index 000000000..d19099bd8 --- /dev/null +++ b/provider_shopper/README.md @@ -0,0 +1,54 @@ +# provider_shopper + +A Flutter sample app that shows a state management approach using the [Provider][] package. +This is the app discussed in the [Simple app state management][simple] section of +[flutter.dev][]. + +![An animated gif of the app in action](https://camo.githubusercontent.com/cf301d68c65279a074aa3334ef7fff548f87c0e2/68747470733a2f2f666c75747465722e6465762f6173736574732f646576656c6f706d656e742f646174612d616e642d6261636b656e642f73746174652d6d676d742f6d6f64656c2d73686f707065722d73637265656e636173742d653061646130653833636438653766646361643834313637623866376666643765623565663835623063623839353766303363366630356264313662316365612e676966) + +[Provider]: https://pub.dev/packages/provider +[simple]: https://flutter.dev/docs/development/data-and-backend/state-mgmt/simple +[flutter.dev]: https://flutter.dev/ + +## Goals for this sample + +* Show simple use of `Provider` for providing an immutable value to a subtree +* Illustrate a simple state management approach using the ChangeNotifier class +* Show use of `ProxyProvider` for provided objects that depend on other provided objects + +## The important bits + +### `lib/main.dart` + +Here the app sets up objects it needs to track state: a catalog and a shopping cart. It builds +a `MultiProvider` to provide both objects at once to widgets further down the tree. + +The `CartModel` instance is provided using a `ChangeNotifierProxyProvider`, which combines +two types of functionality: + +1. It will automatically subscribe to changes in `CartModel` (if you only want this functionality + simply use `ChangeNotifierProvider`). +2. It takes the value of a previously provided object (in this case, `CatalogModel`, provided + just above), and uses it to build the value of `CartModel` (if you only want + _this_ functionality, simply use `ProxyProvider`). + +### `lib/models/*` + +This directory contains the model classes that are provided in `main.dart`. These classes +represent the app state. + +### `lib/screens/*` + +This directory contains widgets used to construct the two screens of the app: the catalog and +the cart. These widgets have access to the current state of both the catalog and the cart +via `Provider.of`. + +## Questions/issues + +If you have a general question about Provider, the best places to go are: + +* [Provider documentation](https://pub.dev/documentation/provider/latest/) +* [StackOverflow](https://stackoverflow.com/questions/tagged/flutter) + +If you run into an issue with the sample itself, please file an issue +in the [main Flutter repo](https://github.com/flutter/flutter/issues). diff --git a/provider_shopper/analysis_options.yaml b/provider_shopper/analysis_options.yaml new file mode 100644 index 000000000..b9a01f119 --- /dev/null +++ b/provider_shopper/analysis_options.yaml @@ -0,0 +1,30 @@ +include: package:pedantic/analysis_options.1.7.0.yaml + +analyzer: + strong-mode: + implicit-casts: false + implicit-dynamic: false + +linter: + rules: + - avoid_types_on_closure_parameters + - avoid_void_async + - await_only_futures + - camel_case_types + - cancel_subscriptions + - close_sinks + - constant_identifier_names + - control_flow_in_finally + - empty_statements + - hash_and_equals + - implementation_imports + - non_constant_identifier_names + - package_api_docs + - package_names + - package_prefixed_library_names + - test_types_in_equals + - throw_in_finally + - unnecessary_brace_in_string_interps + - unnecessary_getters_setters + - unnecessary_new + - unnecessary_statements diff --git a/provider_shopper/android/app/build.gradle b/provider_shopper/android/app/build.gradle new file mode 100644 index 000000000..bc50930bb --- /dev/null +++ b/provider_shopper/android/app/build.gradle @@ -0,0 +1,67 @@ +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterRoot = localProperties.getProperty('flutter.sdk') +if (flutterRoot == null) { + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +android { + compileSdkVersion 28 + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + lintOptions { + disable 'InvalidPackage' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "dev.flutter.provider_shopper" + minSdkVersion 16 + targetSdkVersion 28 + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig signingConfigs.debug + } + } +} + +flutter { + source '../..' +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.2' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' +} diff --git a/provider_shopper/android/app/src/debug/AndroidManifest.xml b/provider_shopper/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 000000000..f1000ab6d --- /dev/null +++ b/provider_shopper/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/provider_shopper/android/app/src/main/AndroidManifest.xml b/provider_shopper/android/app/src/main/AndroidManifest.xml new file mode 100644 index 000000000..a29325fae --- /dev/null +++ b/provider_shopper/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + diff --git a/provider_shopper/android/app/src/main/kotlin/dev/flutter/provider_shopper/MainActivity.kt b/provider_shopper/android/app/src/main/kotlin/dev/flutter/provider_shopper/MainActivity.kt new file mode 100644 index 000000000..aa40d345d --- /dev/null +++ b/provider_shopper/android/app/src/main/kotlin/dev/flutter/provider_shopper/MainActivity.kt @@ -0,0 +1,13 @@ +package dev.flutter.provider_shopper + +import android.os.Bundle + +import io.flutter.app.FlutterActivity +import io.flutter.plugins.GeneratedPluginRegistrant + +class MainActivity: FlutterActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + GeneratedPluginRegistrant.registerWith(this) + } +} diff --git a/provider_shopper/android/app/src/main/res/drawable/launch_background.xml b/provider_shopper/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 000000000..304732f88 --- /dev/null +++ b/provider_shopper/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/provider_shopper/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/provider_shopper/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ literal 0 HcmV?d00001 diff --git a/provider_shopper/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/provider_shopper/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@Uy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ literal 0 HcmV?d00001 diff --git a/provider_shopper/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/provider_shopper/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f1c8d34e7a88e3f88bea192c3a370d44689c3c GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 0 HcmV?d00001 diff --git a/provider_shopper/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/provider_shopper/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6372eebdb28e45604e46eeda8dd24651419bc0 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 0 HcmV?d00001 diff --git a/provider_shopper/android/app/src/main/res/values/styles.xml b/provider_shopper/android/app/src/main/res/values/styles.xml new file mode 100644 index 000000000..00fa4417c --- /dev/null +++ b/provider_shopper/android/app/src/main/res/values/styles.xml @@ -0,0 +1,8 @@ + + + + diff --git a/provider_shopper/android/app/src/profile/AndroidManifest.xml b/provider_shopper/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 000000000..f1000ab6d --- /dev/null +++ b/provider_shopper/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/provider_shopper/android/build.gradle b/provider_shopper/android/build.gradle new file mode 100644 index 000000000..b7faad8f5 --- /dev/null +++ b/provider_shopper/android/build.gradle @@ -0,0 +1,31 @@ +buildscript { + ext.kotlin_version = '1.2.71' + repositories { + google() + jcenter() + } + + dependencies { + classpath 'com.android.tools.build:gradle:3.2.1' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +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/provider_shopper/android/gradle.properties b/provider_shopper/android/gradle.properties new file mode 100644 index 000000000..8bd86f680 --- /dev/null +++ b/provider_shopper/android/gradle.properties @@ -0,0 +1 @@ +org.gradle.jvmargs=-Xmx1536M diff --git a/provider_shopper/android/gradle/wrapper/gradle-wrapper.properties b/provider_shopper/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..2819f022f --- /dev/null +++ b/provider_shopper/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-4.10.2-all.zip diff --git a/provider_shopper/android/settings.gradle b/provider_shopper/android/settings.gradle new file mode 100644 index 000000000..5a2f14fb1 --- /dev/null +++ b/provider_shopper/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/provider_shopper/fonts/Corben/Corben-Bold.ttf b/provider_shopper/fonts/Corben/Corben-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..47f401cdb431fc78519817db10b8dc0edf0ecbe5 GIT binary patch literal 122628 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 + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 8.0 + + diff --git a/provider_shopper/ios/Flutter/Debug.xcconfig b/provider_shopper/ios/Flutter/Debug.xcconfig new file mode 100644 index 000000000..592ceee85 --- /dev/null +++ b/provider_shopper/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/provider_shopper/ios/Flutter/Release.xcconfig b/provider_shopper/ios/Flutter/Release.xcconfig new file mode 100644 index 000000000..592ceee85 --- /dev/null +++ b/provider_shopper/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/provider_shopper/ios/Runner.xcodeproj/project.pbxproj b/provider_shopper/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 000000000..5de409604 --- /dev/null +++ b/provider_shopper/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,514 @@ +// !$*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 */; }; + 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; + 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; + 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; }; + 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 = ( + 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */, + 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, + 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B80C3931E831B6300D905FE /* App.framework */, + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEBA1CF902C7004384FC /* Flutter.framework */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 97C146F11CF9000F007C117D /* Supporting Files */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; + 97C146F11CF9000F007C117D /* Supporting Files */ = { + isa = PBXGroup; + children = ( + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0910; + ORGANIZATIONNAME = "The Chromium Authors"; + TargetAttributes = { + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 0910; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + 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 */, + 9740EEB41CF90195004384FC /* Debug.xcconfig 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\" thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + 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_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_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; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = S8QB4VV633; + 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 = dev.flutter.providerShopper; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.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_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_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_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_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; + 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 = dev.flutter.providerShopper; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_VERSION = 4.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 = dev.flutter.providerShopper; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_VERSION = 4.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/provider_shopper/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/provider_shopper/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..1d526a16e --- /dev/null +++ b/provider_shopper/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/provider_shopper/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/provider_shopper/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 000000000..786d6aad5 --- /dev/null +++ b/provider_shopper/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/provider_shopper/ios/Runner.xcworkspace/contents.xcworkspacedata b/provider_shopper/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..1d526a16e --- /dev/null +++ b/provider_shopper/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/provider_shopper/ios/Runner/AppDelegate.swift b/provider_shopper/ios/Runner/AppDelegate.swift new file mode 100644 index 000000000..71cc41e34 --- /dev/null +++ b/provider_shopper/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import UIKit +import Flutter + +@UIApplicationMain +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..d36b1fab2 --- /dev/null +++ b/provider_shopper/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/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..3d43d11e66f4de3da27ed045ca4fe38ad8b48094 GIT binary patch literal 11112 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 P-1+_A+?hGkL;m(J7kc&K literal 0 HcmV?d00001 diff --git a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..28c6bf03016f6c994b70f38d1b7346e5831b531f GIT binary patch literal 564 zcmV-40?Yl0P)Px$?ny*JR5%f>l)FnDQ543{x%ZCiu33$Wg!pQFfT_}?5Q|_VSlIbLC`dpoMXL}9 zHfd9&47Mo(7D231gb+kjFxZHS4-m~7WurTH&doVX2KI5sU4v(sJ1@T9eCIKPjsqSr z)C01LsCxk=72-vXmX}CQD#BD;Cthymh&~=f$Q8nn0J<}ZrusBy4PvRNE}+1ceuj8u z0mW5k8fmgeLnTbWHGwfKA3@PdZxhn|PypR&^p?weGftrtCbjF#+zk_5BJh7;0`#Wr zgDpM_;Ax{jO##IrT`Oz;MvfwGfV$zD#c2xckpcXC6oou4ML~ezCc2EtnsQTB4tWNg z?4bkf;hG7IMfhgNI(FV5Gs4|*GyMTIY0$B=_*mso9Ityq$m^S>15>-?0(zQ<8Qy<_TjHE33(?_M8oaM zyc;NxzRVK@DL6RJnX%U^xW0Gpg(lXp(!uK1v0YgHjs^ZXSQ|m#lV7ip7{`C_J2TxPmfw%h$|%acrYHt)Re^PB%O&&=~a zhS(%I#+V>J-vjIib^<+s%ludY7y^C(P8nmqn9fp!i+?vr`bziDE=bx`%2W#Xyrj|i z!XQ4v1%L`m{7KT7q+LZNB^h8Ha2e=`Wp65^0;J00)_^G=au=8Yo;1b`CV&@#=jIBo zjN^JNVfYSs)+kDdGe7`1&8!?MQYKS?DuHZf3iogk_%#9E|5S zWeHrmAo>P;ejX7mwq#*}W25m^ZI+{(Z8fI?4jM_fffY0nok=+88^|*_DwcW>mR#e+ zX$F_KMdb6sRz!~7KkyN0G(3XQ+;z3X%PZ4gh;n-%62U<*VUKNv(D&Q->Na@Xb&u5Q3`3DGf+a8O5x7c#7+R+EAYl@R5us)CIw z7sT@_y~Ao@uL#&^LIh&QceqiT^+lb0YbFZt_SHOtWA%mgPEKVNvVgCsXy{5+zl*X8 zCJe)Q@y>wH^>l4;h1l^Y*9%-23TSmE>q5nI@?mt%n;Sj4Qq`Z+ib)a*a^cJc%E9^J zB;4s+K@rARbcBLT5P=@r;IVnBMKvT*)ew*R;&8vu%?Z&S>s?8?)3*YawM0P4!q$Kv zMmKh3lgE~&w&v%wVzH3Oe=jeNT=n@Y6J6TdHWTjXfX~-=1A1Bw`EW8rn}MqeI34nh zexFeA?&C3B2(E?0{drE@DA2pu(A#ElY&6el60Rn|Qpn-FkfQ8M93AfWIr)drgDFEU zghdWK)^71EWCP(@(=c4kfH1Y(4iugD4fve6;nSUpLT%!)MUHs1!zJYy4y||C+SwQ! z)KM&$7_tyM`sljP2fz6&Z;jxRn{Wup8IOUx8D4uh&(=O zx-7$a;U><*5L^!%xRlw)vAbh;sdlR||& ze}8_8%)c2Fwy=F&H|LM+p{pZB5DKTx>Y?F1N%BlZkXf!}JeGuMZk~LPi7{cidvUGB zAJ4LVeNV%XO>LTrklB#^-;8nb;}6l;1oW&WS=Mz*Az!4cqqQzbOSFq`$Q%PfD7srM zpKgP-D_0XPTRX*hAqeq0TDkJ;5HB1%$3Np)99#16c{ zJImlNL(npL!W|Gr_kxl1GVmF5&^$^YherS7+~q$p zt}{a=*RiD2Ikv6o=IM1kgc7zqpaZ;OB)P!1zz*i3{U()Dq#jG)egvK}@uFLa`oyWZ zf~=MV)|yJn`M^$N%ul5);JuQvaU1r2wt(}J_Qgyy`qWQI`hEeRX0uC@c1(dQ2}=U$ tNIIaX+dr)NRWXcxoR{>fqI{SF_dm1Ylv~=3YHI)h002ovPDHLkV1g(pWS;;4 literal 0 HcmV?d00001 diff --git a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..f091b6b0bca859a3f474b03065bef75ba58a9e4c GIT binary patch literal 1588 zcmV-42Fv-0P)C1SqPt}wig>|5Crh^=oyX$BK<}M8eLU3e2hGT;=G|!_SP)7zNI6fqUMB=)y zRAZ>eDe#*r`yDAVgB_R*LB*MAc)8(b{g{9McCXW!lq7r(btRoB9!8B-#AI6JMb~YFBEvdsV)`mEQO^&#eRKx@b&x- z5lZm*!WfD8oCLzfHGz#u7sT0^VLMI1MqGxF^v+`4YYnVYgk*=kU?HsSz{v({E3lb9 z>+xILjBN)t6`=g~IBOelGQ(O990@BfXf(DRI5I$qN$0Gkz-FSc$3a+2fX$AedL4u{ z4V+5Ong(9LiGcIKW?_352sR;LtDPmPJXI{YtT=O8=76o9;*n%_m|xo!i>7$IrZ-{l z-x3`7M}qzHsPV@$v#>H-TpjDh2UE$9g6sysUREDy_R(a)>=eHw-WAyfIN z*qb!_hW>G)Tu8nSw9yn#3wFMiLcfc4pY0ek1}8(NqkBR@t4{~oC>ryc-h_ByH(Cg5 z>ao-}771+xE3um9lWAY1FeQFxowa1(!J(;Jg*wrg!=6FdRX+t_<%z&d&?|Bn){>zm zZQj(aA_HeBY&OC^jj*)N`8fa^ePOU72VpInJoI1?`ty#lvlNzs(&MZX+R%2xS~5Kh zX*|AU4QE#~SgPzOXe9>tRj>hjU@c1k5Y_mW*Jp3fI;)1&g3j|zDgC+}2Q_v%YfDax z!?umcN^n}KYQ|a$Lr+51Nf9dkkYFSjZZjkma$0KOj+;aQ&721~t7QUKx61J3(P4P1 zstI~7-wOACnWP4=8oGOwz%vNDqD8w&Q`qcNGGrbbf&0s9L0De{4{mRS?o0MU+nR_! zrvshUau0G^DeMhM_v{5BuLjb#Hh@r23lDAk8oF(C+P0rsBpv85EP>4CVMx#04MOfG z;P%vktHcXwTj~+IE(~px)3*MY77e}p#|c>TD?sMatC0Tu4iKKJ0(X8jxQY*gYtxsC z(zYC$g|@+I+kY;dg_dE>scBf&bP1Nc@Hz<3R)V`=AGkc;8CXqdi=B4l2k|g;2%#m& z*jfX^%b!A8#bI!j9-0Fi0bOXl(-c^AB9|nQaE`*)Hw+o&jS9@7&Gov#HbD~#d{twV zXd^Tr^mWLfFh$@Dr$e;PBEz4(-2q1FF0}c;~B5sA}+Q>TOoP+t>wf)V9Iy=5ruQa;z)y zI9C9*oUga6=hxw6QasLPnee@3^Rr*M{CdaL5=R41nLs(AHk_=Y+A9$2&H(B7!_pURs&8aNw7?`&Z&xY_Ye z)~D5Bog^td-^QbUtkTirdyK^mTHAOuptDflut!#^lnKqU md>ggs(5nOWAqO?umG&QVYK#ibz}*4>0000U6E9hRK9^#O7(mu>ETqrXGsduA8$)?`v2seloOCza43C{NQ$$gAOH**MCn0Q?+L7dl7qnbRdqZ8LSVp1ItDxhxD?t@5_yHg6A8yI zC*%Wgg22K|8E#!~cTNYR~@Y9KepMPrrB8cABapAFa=`H+UGhkXUZV1GnwR1*lPyZ;*K(i~2gp|@bzp8}og7e*#% zEnr|^CWdVV!-4*Y_7rFvlww2Ze+>j*!Z!pQ?2l->4q#nqRu9`ELo6RMS5=br47g_X zRw}P9a7RRYQ%2Vsd0Me{_(EggTnuN6j=-?uFS6j^u69elMypu?t>op*wBx<=Wx8?( ztpe^(fwM6jJX7M-l*k3kEpWOl_Vk3@(_w4oc}4YF4|Rt=2V^XU?#Yz`8(e?aZ@#li0n*=g^qOcVpd-Wbok=@b#Yw zqn8u9a)z>l(1kEaPYZ6hwubN6i<8QHgsu0oE) ziJ(p;Wxm>sf!K+cw>R-(^Y2_bahB+&KI9y^);#0qt}t-$C|Bo71lHi{_+lg#f%RFy z0um=e3$K3i6K{U_4K!EX?F&rExl^W|G8Z8;`5z-k}OGNZ0#WVb$WCpQu-_YsiqKP?BB# vzVHS-CTUF4Ozn5G+mq_~Qqto~ahA+K`|lyv3(-e}00000NkvXXu0mjfd`9t{ literal 0 HcmV?d00001 diff --git a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/provider_shopper/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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 literal 0 HcmV?d00001 diff --git a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c8f9ed8f5cee1c98386d13b17e89f719e83555b2 GIT binary patch literal 1895 zcmV-t2blPYP)FQtfgmafE#=YDCq`qUBt#QpG%*H6QHY765~R=q zZ6iudfM}q!Pz#~9JgOi8QJ|DSu?1-*(kSi1K4#~5?#|rh?sS)(-JQqX*}ciXJ56_H zdw=^s_srbAdqxlvGyrgGet#6T7_|j;95sL%MtM;q86vOxKM$f#puR)Bjv9Zvz9-di zXOTSsZkM83)E9PYBXC<$6(|>lNLVBb&&6y{NByFCp%6+^ALR@NCTse_wqvNmSWI-m z!$%KlHFH2omF!>#%1l3LTZg(s7eof$7*xB)ZQ0h?ejh?Ta9fDv59+u#MokW+1t8Zb zgHv%K(u9G^Lv`lh#f3<6!JVTL3(dCpxHbnbA;kKqQyd1~^Xe0VIaYBSWm6nsr;dFj z4;G-RyL?cYgsN1{L4ZFFNa;8)Rv0fM0C(~Tkit94 zz#~A)59?QjD&pAPSEQ)p8gP|DS{ng)j=2ux)_EzzJ773GmQ_Cic%3JJhC0t2cx>|v zJcVusIB!%F90{+}8hG3QU4KNeKmK%T>mN57NnCZ^56=0?&3@!j>a>B43pi{!u z7JyDj7`6d)qVp^R=%j>UIY6f+3`+qzIc!Y_=+uN^3BYV|o+$vGo-j-Wm<10%A=(Yk^beI{t%ld@yhKjq0iNjqN4XMGgQtbKubPM$JWBz}YA65k%dm*awtC^+f;a-x4+ddbH^7iDWGg&N0n#MW{kA|=8iMUiFYvMoDY@sPC#t$55gn6ykUTPAr`a@!(;np824>2xJthS z*ZdmT`g5-`BuJs`0LVhz+D9NNa3<=6m;cQLaF?tCv8)zcRSh66*Z|vXhG@$I%U~2l z?`Q zykI#*+rQ=z6Jm=Bui-SfpDYLA=|vzGE(dYm=OC8XM&MDo7ux4UF1~0J1+i%aCUpRe zt3L_uNyQ*cE(38Uy03H%I*)*Bh=Lb^Xj3?I^Hnbeq72(EOK^Y93CNp*uAA{5Lc=ky zx=~RKa4{iTm{_>_vSCm?$Ej=i6@=m%@VvAITnigVg{&@!7CDgs908761meDK5azA} z4?=NOH|PdvabgJ&fW2{Mo$Q0CcD8Qc84%{JPYt5EiG{MdLIAeX%T=D7NIP4%Hw}p9 zg)==!2Lbp#j{u_}hMiao9=!VSyx0gHbeCS`;q&vzeq|fs`y&^X-lso(Ls@-706qmA z7u*T5PMo_w3{se1t2`zWeO^hOvTsohG_;>J0wVqVe+n)AbQCx)yh9;w+J6?NF5Lmo zecS@ieAKL8%bVd@+-KT{yI|S}O>pYckUFs;ry9Ow$CD@ztz5K-*D$^{i(_1llhSh^ zEkL$}tsQt5>QA^;QgjgIfBDmcOgi5YDyu?t6vSnbp=1+@6D& z5MJ}B8q;bRlVoxasyhcUF1+)o`&3r0colr}QJ3hcSdLu;9;td>kf@Tcn<@9sIx&=m z;AD;SCh95=&p;$r{Xz3iWCO^MX83AGJ(yH&eTXgv|0=34#-&WAmw{)U7OU9!Wz^!7 zZ%jZFi@JR;>Mhi7S>V7wQ176|FdW2m?&`qa(ScO^CFPR80HucLHOTy%5s*HR0^8)i h0WYBP*#0Ks^FNSabJA*5${_#%002ovPDHLkV1oKhTl@e3 literal 0 HcmV?d00001 diff --git a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d6b8609df07bf62e5100a53a01510388bd2b22 GIT binary patch literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ literal 0 HcmV?d00001 diff --git a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d6b8609df07bf62e5100a53a01510388bd2b22 GIT binary patch literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ literal 0 HcmV?d00001 diff --git a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/provider_shopper/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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 literal 0 HcmV?d00001 diff --git a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..c4df70d39da7941ef3f6dcb7f06a192d8dcb308d GIT binary patch literal 1888 zcmV-m2cP(fP)x~L`~4d)Rspd&<9kFh{hn*KP1LP0~$;u(LfAu zp%fx&qLBcRHx$G|3q(bv@+b;o0*D|jwD-Q9uQR(l*ST}s+uPgQ-MeFwZ#GS?b332? z&Tk$&_miXn3IGq)AmQ)3sisq{raD4(k*bHvpCe-TdWq^NRTEVM)i9xbgQ&ccnUVx* zEY%vS%gDcSg=!tuIK8$Th2_((_h^+7;R|G{n06&O2#6%LK`a}n?h_fL18btz<@lFG za}xS}u?#DBMB> zw^b($1Z)`9G?eP95EKi&$eOy@K%h;ryrR3la%;>|o*>CgB(s>dDcNOXg}CK9SPmD? zmr-s{0wRmxUnbDrYfRvnZ@d z6johZ2sMX{YkGSKWd}m|@V7`Degt-43=2M?+jR%8{(H$&MLLmS;-|JxnX2pnz;el1jsvqQz}pGSF<`mqEXRQ5sC4#BbwnB_4` zc5bFE-Gb#JV3tox9fp-vVEN{(tOCpRse`S+@)?%pz+zVJXSooTrNCUg`R6`hxwb{) zC@{O6MKY8tfZ5@!yy=p5Y|#+myRL=^{tc(6YgAnkg3I(Cd!r5l;|;l-MQ8B`;*SCE z{u)uP^C$lOPM z5d~UhKhRRmvv{LIa^|oavk1$QiEApSrP@~Jjbg`<*dW4TO?4qG%a%sTPUFz(QtW5( zM)lA+5)0TvH~aBaOAs|}?u2FO;yc-CZ1gNM1dAxJ?%m?YsGR`}-xk2*dxC}r5j$d* zE!#Vtbo69h>V4V`BL%_&$} z+oJAo@jQ^Tk`;%xw-4G>hhb&)B?##U+(6Fi7nno`C<|#PVA%$Y{}N-?(Gc$1%tr4Pc}}hm~yY#fTOe!@v9s-ik$dX~|ygArPhByaXn8 zpI^FUjNWMsTFKTP3X7m?UK)3m zp6rI^_zxRYrx6_QmhoWoDR`fp4R7gu6;gdO)!KexaoO2D88F9x#TM1(9Bn7g;|?|o z)~$n&Lh#hCP6_LOPD>a)NmhW})LADx2kq=X7}7wYRj-0?dXr&bHaRWCfSqvzFa=sn z-8^gSyn-RmH=BZ{AJZ~!8n5621GbUJV7Qvs%JNv&$%Q17s_X%s-41vAPfIR>;x0Wlqr5?09S>x#%Qkt>?(&XjFRY}*L6BeQ3 z<6XEBh^S7>AbwGm@XP{RkeEKj6@_o%oV?hDuUpUJ+r#JZO?!IUc;r0R?>mi)*ZpQ) z#((dn=A#i_&EQn|hd)N$#A*fjBFuiHcYvo?@y1 z5|fV=a^a~d!c-%ZbMNqkMKiSzM{Yq=7_c&1H!mXk60Uv32dV;vMg&-kQ)Q{+PFtwc zj|-uQ;b^gts??J*9VxxOro}W~Q9j4Em|zSRv)(WSO9$F$s=Ydu%Q+5DOid~lwk&we zY%W(Z@ofdwPHncEZzZgmqS|!gTj3wQq9rxQy+^eNYKr1mj&?tm@wkO*9@UtnRMG>c aR{jt9+;fr}hV%pg00001^@s67{VYS000c7NklQEG_j zup^)eW&WUIApqy$=APz8jE@awGp)!bsTjDbrJO`$x^ZR^dr;>)LW>{ zs70vpsD38v)19rI=GNk1b(0?Js9~rjsQsu*K;@SD40RB-3^gKU-MYC7G!Bw{fZsqp zih4iIi;Hr_xZ033Iu{sQxLS=}yBXgLMn40d++>aQ0#%8D1EbGZp7+ z5=mK?t31BkVYbGOxE9`i748x`YgCMwL$qMsChbSGSE1`p{nSmadR zcQ#R)(?!~dmtD0+D2!K zR9%!Xp1oOJzm(vbLvT^$IKp@+W2=-}qTzTgVtQ!#Y7Gxz}stUIm<1;oBQ^Sh2X{F4ibaOOx;5ZGSNK z0maF^@(UtV$=p6DXLgRURwF95C=|U8?osGhgOED*b z7woJ_PWXBD>V-NjQAm{~T%sjyJ{5tn2f{G%?J!KRSrrGvQ1(^`YLA5B!~eycY(e5_ z*%aa{at13SxC(=7JT7$IQF~R3sy`Nn%EMv!$-8ZEAryB*yB1k&stni)=)8-ODo41g zkJu~roIgAih94tb=YsL%iH5@^b~kU9M-=aqgXIrbtxMpFy5mekFm#edF9z7RQ6V}R zBIhbXs~pMzt0VWy1Fi$^fh+1xxLDoK09&5&MJl(q#THjPm(0=z2H2Yfm^a&E)V+a5 zbi>08u;bJsDRUKR9(INSc7XyuWv(JsD+BB*0hS)FO&l&7MdViuur@-<-EHw>kHRGY zqoT}3fDv2-m{NhBG8X}+rgOEZ;amh*DqN?jEfQdqxdj08`Sr=C-KmT)qU1 z+9Cl)a1mgXxhQiHVB}l`m;-RpmKy?0*|yl?FXvJkFxuu!fKlcmz$kN(a}i*saM3nr z0!;a~_%Xqy24IxA2rz<+08=B-Q|2PT)O4;EaxP^6qixOv7-cRh?*T?zZU`{nIM-at zTKYWr9rJ=tppQ9I#Z#mLgINVB!pO-^FOcvFw6NhV0gztuO?g ztoA*C-52Q-Z-P#xB4HAY3KQVd%dz1S4PA3vHp0aa=zAO?FCt zC_GaTyVBg2F!bBr3U@Zy2iJgIAt>1sf$JWA9kh{;L+P*HfUBX1Zy{4MgNbDfBV_ly z!y#+753arsZUt@366jIC0klaC@ckuk!qu=pAyf7&QmiBUT^L1&tOHzsK)4n|pmrVT zs2($4=?s~VejTFHbFdDOwG;_58LkIj1Fh@{glkO#F1>a==ymJS$z;gdedT1zPx4Kj ztjS`y_C}%af-RtpehdQDt3a<=W5C4$)9W@QAse;WUry$WYmr51ml9lkeunUrE`-3e zmq1SgSOPNEE-Mf+AGJ$g0M;3@w!$Ej;hMh=v=I+Lpz^n%Pg^MgwyqOkNyu2c^of)C z1~ALor3}}+RiF*K4+4{(1%1j3pif1>sv0r^mTZ?5Jd-It!tfPfiG_p$AY*Vfak%FG z4z#;wLtw&E&?}w+eKG^=#jF7HQzr8rV0mY<1YAJ_uGz~$E13p?F^fPSzXSn$8UcI$ z8er9{5w5iv0qf8%70zV71T1IBB1N}R5Kp%NO0=5wJalZt8;xYp;b{1K) zHY>2wW-`Sl{=NpR%iu3(u6l&)rc%%cSA#aV7WCowfbFR4wcc{LQZv~o1u_`}EJA3>ki`?9CKYTA!rhO)if*zRdd}Kn zEPfYbhoVE~!FI_2YbC5qAj1kq;xP6%J8+?2PAs?`V3}nyFVD#sV3+uP`pi}{$l9U^ zSz}_M9f7RgnnRhaoIJgT8us!1aB&4!*vYF07Hp&}L zCRlop0oK4DL@ISz{2_BPlezc;xj2|I z23RlDNpi9LgTG_#(w%cMaS)%N`e>~1&a3<{Xy}>?WbF>OOLuO+j&hc^YohQ$4F&ze z+hwnro1puQjnKm;vFG~o>`kCeUIlkA-2tI?WBKCFLMBY=J{hpSsQ=PDtU$=duS_hq zHpymHt^uuV1q@uc4bFb{MdG*|VoW@15Osrqt2@8ll0qO=j*uOXn{M0UJX#SUztui9FN4)K3{9!y8PC-AHHvpVTU;x|-7P+taAtyglk#rjlH2 z5Gq8ik}BPaGiM{#Woyg;*&N9R2{J0V+WGB69cEtH7F?U~Kbi6ksi*`CFXsi931q7Y zGO82?whBhN%w1iDetv%~wM*Y;E^)@Vl?VDj-f*RX>{;o_=$fU!&KAXbuadYZ46Zbg z&6jMF=49$uL^73y;;N5jaHYv)BTyfh&`qVLYn?`o6BCA_z-0niZz=qPG!vonK3MW_ zo$V96zM!+kJRs{P-5-rQVse0VBH*n6A58)4uc&gfHMa{gIhV2fGf{st>E8sKyP-$8zp~wJX^A*@DI&-;8>gANXZj zU)R+Y)PB?=)a|Kj>8NXEu^S_h^7R`~Q&7*Kn!xyvzVv&^>?^iu;S~R2e-2fJx-oUb cX)(b1KSk$MOV07*qoM6N<$f&6$jw%VRuvdN2+38CZWny1cRtlsl+0_KtW)EU14Ei(F!UtWuj4IK+3{sK@>rh zs1Z;=(DD&U6+tlyL?UnHVN^&g6QhFi2#HS+*qz;(>63G(`|jRtW|nz$Pv7qTovP!^ zP_jES{mr@O-02w%!^a?^1ZP!_KmQiz0L~jZ=W@Qt`8wzOoclQsAS<5YdH;a(4bGLE zk8s}1If(PSIgVi!XE!5kA?~z*sobvNyohr;=Q_@h2@$6Flyej3J)D-6YfheRGl`HEcPk|~huT_2-U?PfL=4BPV)f1o!%rQ!NMt_MYw-5bUSwQ9Z&zC>u zOrl~UJglJNa%f50Ok}?WB{on`Ci`p^Y!xBA?m@rcJXLxtrE0FhRF3d*ir>yzO|BD$ z3V}HpFcCh6bTzY}Nt_(W%QYd3NG)jJ4<`F<1Od) zfQblTdC&h2lCz`>y?>|9o2CdvC8qZeIZt%jN;B7Hdn2l*k4M4MFEtq`q_#5?}c$b$pf_3y{Y!cRDafZBEj-*OD|gz#PBDeu3QoueOesLzB+O zxjf2wvf6Wwz>@AiOo2mO4=TkAV+g~%_n&R;)l#!cBxjuoD$aS-`IIJv7cdX%2{WT7 zOm%5rs(wqyPE^k5SIpUZ!&Lq4<~%{*>_Hu$2|~Xa;iX*tz8~G6O3uFOS?+)tWtdi| zV2b#;zRN!m@H&jd=!$7YY6_}|=!IU@=SjvGDFtL;aCtw06U;-v^0%k0FOyESt z1Wv$={b_H&8FiRV?MrzoHWd>%v6KTRU;-v^Miiz+@q`(BoT!+<37CKhoKb)|8!+RG z6BQFU^@fRW;s8!mOf2QViKQGk0TVER6EG1`#;Nm39Do^PoT!+<37AD!%oJe86(=et zZ~|sLzU>V-qYiU6V8$0GmU7_K8|Fd0B?+9Un1BhKAz#V~Fk^`mJtlCX#{^8^M8!me z8Yg;8-~>!e<-iG;h*0B1kBKm}hItVGY6WnjVpgnTTAC$rqQ^v)4KvOtpY|sIj@WYg zyw##ZZ5AC2IKNC;^hwg9BPk0wLStlmBr;E|$5GoAo$&Ui_;S9WY62n3)i49|T%C#i017z3J=$RF|KyZWnci*@lW4 z=AKhNN6+m`Q!V3Ye68|8y@%=am>YD0nG99M)NWc20%)gwO!96j7muR}Fr&54SxKP2 zP30S~lt=a*qDlbu3+Av57=9v&vr<6g0&`!8E2fq>I|EJGKs}t|{h7+KT@)LfIV-3K zK)r_fr2?}FFyn*MYoLC>oV-J~eavL2ho4a4^r{E-8m2hi>~hA?_vIG4a*KT;2eyl1 zh_hUvUJpNCFwBvRq5BI*srSle>c6%n`#VNsyC|MGa{(P&08p=C9+WUw9Hl<1o9T4M zdD=_C0F7#o8A_bRR?sFNmU0R6tW`ElnF8p53IdHo#S9(JoZCz}fHwJ6F<&?qrpVqE zte|m%89JQD+XwaPU#%#lVs-@-OL);|MdfINd6!XwP2h(eyafTUsoRkA%&@fe?9m@jw-v(yTTiV2(*fthQH9}SqmsRPVnwwbV$1E(_lkmo&S zF-truCU914_$jpqjr(>Ha4HkM4YMT>m~NosUu&UZ>zirfHo%N6PPs9^_o$WqPA0#5 z%tG>qFCL+b*0s?sZ;Sht0nE7Kl>OVXy=gjWxxK;OJ3yGd7-pZf7JYNcZo2*1SF`u6 zHJyRRxGw9mDlOiXqVMsNe#WX`fC`vrtjSQ%KmLcl(lC>ZOQzG^%iql2w-f_K@r?OE zwCICifM#L-HJyc7Gm>Ern?+Sk3&|Khmu4(~3qa$(m6Ub^U0E5RHq49za|XklN#?kP zl;EstdW?(_4D>kwjWy2f!LM)y?F94kyU3`W!6+AyId-89v}sXJpuic^NLL7GJItl~ zsiuB98AI-(#Mnm|=A-R6&2fwJ0JVSY#Q>&3$zFh|@;#%0qeF=j5Ajq@4i0tIIW z&}sk$&fGwoJpe&u-JeGLi^r?dO`m=y(QO{@h zQqAC7$rvz&5+mo3IqE?h=a~6m>%r5Quapvzq;{y~p zJpyXOBgD9VrW7@#p6l7O?o3feml(DtSL>D^R) zZUY%T2b0-vBAFN7VB;M88!~HuOXi4KcI6aRQ&h|XQ0A?m%j2=l1f0cGP}h(oVfJ`N zz#PpmFC*ieab)zJK<4?^k=g%OjPnkANzbAbmGZHoVRk*mTfm75s_cWVa`l*f$B@xu z5E*?&@seIo#*Y~1rBm!7sF9~~u6Wrj5oICUOuz}CS)jdNIznfzCA(stJ(7$c^e5wN z?lt>eYgbA!kvAR7zYSD&*r1$b|(@;9dcZ^67R0 zXAXJKa|5Sdmj!g578Nwt6d$sXuc&MWezA0Whd`94$h{{?1IwXP4)Tx4obDK%xoFZ_Z zjjHJ_P@R_e5blG@yEjnaJb`l;s%Lb2&=8$&Ct-fV`E^4CUs)=jTk!I}2d&n!f@)bm z@ z_4Dc86+3l2*p|~;o-Sb~oXb_RuLmoifDU^&Te$*FevycC0*nE3Xws8gsWp|Rj2>SM zns)qcYj?^2sd8?N!_w~4v+f-HCF|a$TNZDoNl$I1Uq87euoNgKb6&r26TNrfkUa@o zfdiFA@p{K&mH3b8i!lcoz)V{n8Q@g(vR4ns4r6w;K z>1~ecQR0-<^J|Ndg5fvVUM9g;lbu-){#ghGw(fg>L zh)T5Ljb%lWE;V9L!;Cqk>AV1(rULYF07ZBJbGb9qbSoLAd;in9{)95YqX$J43-dY7YU*k~vrM25 zxh5_IqO0LYZW%oxQ5HOzmk4x{atE*vipUk}sh88$b2tn?!ujEHn`tQLe&vo}nMb&{ zio`xzZ&GG6&ZyN3jnaQy#iVqXE9VT(3tWY$n-)uWDQ|tc{`?fq2F`oQ{;d3aWPg4Hp-(iE{ry>MIPWL> iW8Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/provider_shopper/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/provider_shopper/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/provider_shopper/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/provider_shopper/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/provider_shopper/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/provider_shopper/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 000000000..89c2725b7 --- /dev/null +++ b/provider_shopper/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/provider_shopper/ios/Runner/Base.lproj/LaunchScreen.storyboard b/provider_shopper/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 000000000..f2e259c7c --- /dev/null +++ b/provider_shopper/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/provider_shopper/ios/Runner/Base.lproj/Main.storyboard b/provider_shopper/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 000000000..f3c28516f --- /dev/null +++ b/provider_shopper/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/provider_shopper/ios/Runner/Info.plist b/provider_shopper/ios/Runner/Info.plist new file mode 100644 index 000000000..b685d162d --- /dev/null +++ b/provider_shopper/ios/Runner/Info.plist @@ -0,0 +1,45 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + provider_shopper + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + + diff --git a/provider_shopper/ios/Runner/Runner-Bridging-Header.h b/provider_shopper/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 000000000..7335fdf90 --- /dev/null +++ b/provider_shopper/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" \ No newline at end of file diff --git a/provider_shopper/lib/common/theme.dart b/provider_shopper/lib/common/theme.dart new file mode 100644 index 000000000..2986c51b5 --- /dev/null +++ b/provider_shopper/lib/common/theme.dart @@ -0,0 +1,17 @@ +// Copyright 2019 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter/material.dart'; + +final appTheme = ThemeData( + primarySwatch: Colors.yellow, + textTheme: TextTheme( + display4: TextStyle( + fontFamily: 'Corben', + fontWeight: FontWeight.w700, + fontSize: 24, + color: Colors.black, + ), + ), +); diff --git a/provider_shopper/lib/main.dart b/provider_shopper/lib/main.dart new file mode 100644 index 000000000..6d025f4d2 --- /dev/null +++ b/provider_shopper/lib/main.dart @@ -0,0 +1,44 @@ +// Copyright 2019 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import 'package:provider_shopper/common/theme.dart'; +import 'package:provider_shopper/models/cart.dart'; +import 'package:provider_shopper/models/catalog.dart'; +import 'package:provider_shopper/screens/cart.dart'; +import 'package:provider_shopper/screens/catalog.dart'; + +void main() { + runApp(MyApp()); +} + +class MyApp extends StatelessWidget { + @override + Widget build(BuildContext context) { + // Using MultiProvider is convenient when providing multiple objects. + return MultiProvider( + providers: [ + // In this sample app, CatalogModel never changes, so a simple Provider + // is sufficient. + Provider(builder: (context) => CatalogModel()), + // CartModel is implemented as a ChangeNotifier, which calls for the use + // of ChangeNotifierProvider. Moreover, CartModel depends + // on CatalogModel, so a ProxyProvider is needed. + ChangeNotifierProxyProvider( + builder: (context, catalog, previousCart) => + CartModel(catalog, previousCart)), + ], + child: MaterialApp( + title: 'Provider Demo', + theme: appTheme, + initialRoute: '/', + routes: { + '/': (context) => MyCatalog(), + '/cart': (context) => MyCart(), + }, + ), + ); + } +} diff --git a/provider_shopper/lib/models/cart.dart b/provider_shopper/lib/models/cart.dart new file mode 100644 index 000000000..8a9274cb0 --- /dev/null +++ b/provider_shopper/lib/models/cart.dart @@ -0,0 +1,38 @@ +// Copyright 2019 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter/foundation.dart'; +import 'package:provider_shopper/models/catalog.dart'; + +class CartModel extends ChangeNotifier { + /// The current catalog. Used to construct items from numeric ids. + final CatalogModel _catalog; + + /// Internal, private state of the cart. Stores the ids of each item. + final List _itemIds; + + /// Construct a CartModel instance that is backed by a [CatalogModel] and + /// an optional previous state of the cart. + /// + /// If [previous] is not `null`, it's items are copied to the newly + /// constructed instance. + CartModel(this._catalog, CartModel previous) + : assert(_catalog != null), + _itemIds = previous?._itemIds ?? []; + + /// List of items in the cart. + List get items => _itemIds.map((id) => _catalog.getById(id)).toList(); + + /// The current total price of all items. + int get totalPrice => + items.fold(0, (total, current) => total + current.price); + + /// Adds [item] to cart. This is the only way to modify the cart from outside. + void add(Item item) { + _itemIds.add(item.id); + // This line tells [Model] that it should rebuild the widgets that + // depend on it. + notifyListeners(); + } +} diff --git a/provider_shopper/lib/models/catalog.dart b/provider_shopper/lib/models/catalog.dart new file mode 100644 index 000000000..5b1e495ef --- /dev/null +++ b/provider_shopper/lib/models/catalog.dart @@ -0,0 +1,63 @@ +// Copyright 2019 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter/material.dart'; + +/// A proxy of the catalog of items the user can buy. +/// +/// In a real app, this might be backed by a backend and cached on device. +/// In this sample app, the catalog is procedurally generated and infinite. +/// +/// For simplicity, the catalog is expected to be immutable (no products are +/// expected to be added, removed or changed during the execution of the app). +class CatalogModel { + static const _itemNames = [ + 'Code Smell', + 'Control Flow', + 'Interpreter', + 'Recursion', + 'Sprint', + 'Heisenbug', + 'Spaghetti', + 'Hydra Code', + 'Off-By-One', + 'Scope', + 'Callback', + 'Closure', + 'Automata', + 'Bit Shift', + 'Currying', + ]; + + /// Get item by [id]. + /// + /// In this sample, the catalog is infinite, looping over [_itemNames]. + Item getById(int id) => Item(id, _itemNames[id % _itemNames.length]); + + /// Get item by its position in the catalog. + Item getByPosition(int position) { + // In this simplified case, an item's position in the catalog + // is also its id. + return getById(position); + } +} + +@immutable +class Item { + final int id; + final String name; + final Color color; + final int price = 42; + + Item(this.id, this.name) + // To make the sample app look nicer, each item is given one of the + // Material Design primary colors. + : color = Colors.primaries[id % Colors.primaries.length]; + + @override + int get hashCode => id; + + @override + bool operator ==(Object other) => other is Item && other.id == id; +} diff --git a/provider_shopper/lib/screens/cart.dart b/provider_shopper/lib/screens/cart.dart new file mode 100644 index 000000000..1626c5793 --- /dev/null +++ b/provider_shopper/lib/screens/cart.dart @@ -0,0 +1,83 @@ +// Copyright 2019 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import 'package:provider_shopper/models/cart.dart'; + +class MyCart extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('Cart', style: Theme.of(context).textTheme.display4), + backgroundColor: Colors.white, + ), + body: Container( + color: Colors.yellow, + child: Column( + children: [ + Expanded( + child: Padding( + padding: const EdgeInsets.all(32), + child: _CartList(), + ), + ), + Divider(height: 4, color: Colors.black), + _CartTotal() + ], + ), + ), + ); + } +} + +class _CartList extends StatelessWidget { + @override + Widget build(BuildContext context) { + var itemNameStyle = Theme.of(context).textTheme.title; + var cart = Provider.of(context); + + return ListView.builder( + itemCount: cart.items.length, + itemBuilder: (context, index) => ListTile( + leading: Icon(Icons.done), + title: Text( + cart.items[index].name, + style: itemNameStyle, + ), + ), + ); + } +} + +class _CartTotal extends StatelessWidget { + @override + Widget build(BuildContext context) { + var hugeStyle = Theme.of(context).textTheme.display4.copyWith(fontSize: 48); + + return SizedBox( + height: 200, + child: Center( + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Consumer( + builder: (context, cart, child) => + Text('\$${cart.totalPrice}', style: hugeStyle)), + SizedBox(width: 24), + FlatButton( + onPressed: () { + Scaffold.of(context).showSnackBar( + SnackBar(content: Text('Buying not supported yet.'))); + }, + color: Colors.white, + child: Text('BUY'), + ), + ], + ), + ), + ); + } +} diff --git a/provider_shopper/lib/screens/catalog.dart b/provider_shopper/lib/screens/catalog.dart new file mode 100644 index 000000000..10d91160d --- /dev/null +++ b/provider_shopper/lib/screens/catalog.dart @@ -0,0 +1,97 @@ +// Copyright 2019 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import 'package:provider_shopper/models/cart.dart'; +import 'package:provider_shopper/models/catalog.dart'; + +class MyCatalog extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Scaffold( + body: CustomScrollView( + slivers: [ + _MyAppBar(), + SliverToBoxAdapter(child: SizedBox(height: 12)), + SliverList( + delegate: SliverChildBuilderDelegate( + (context, index) => _MyListItem(index)), + ), + ], + ), + ); + } +} + +class _AddButton extends StatelessWidget { + final Item item; + + const _AddButton({Key key, @required this.item}) : super(key: key); + + @override + Widget build(BuildContext context) { + var cart = Provider.of(context); + + return FlatButton( + onPressed: cart.items.contains(item) ? null : () => cart.add(item), + splashColor: Theme.of(context).primaryColor, + child: cart.items.contains(item) + ? Icon(Icons.check, semanticLabel: 'ADDED') + : Text('ADD'), + ); + } +} + +class _MyAppBar extends StatelessWidget { + @override + Widget build(BuildContext context) { + return SliverAppBar( + title: Text('Catalog', style: Theme.of(context).textTheme.display4), + floating: true, + actions: [ + IconButton( + icon: Icon(Icons.shopping_cart), + onPressed: () => Navigator.pushNamed(context, '/cart'), + ), + ], + ); + } +} + +class _MyListItem extends StatelessWidget { + final int index; + + _MyListItem(this.index, {Key key}) : super(key: key); + + @override + Widget build(BuildContext context) { + var catalog = Provider.of(context); + var item = catalog.getByPosition(index); + var textTheme = Theme.of(context).textTheme.title; + + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), + child: LimitedBox( + maxHeight: 48, + child: Row( + children: [ + AspectRatio( + aspectRatio: 1, + child: Container( + color: item.color, + ), + ), + SizedBox(width: 24), + Expanded( + child: Text(item.name, style: textTheme), + ), + SizedBox(width: 24), + _AddButton(item: item), + ], + ), + ), + ); + } +} diff --git a/provider_shopper/pubspec.lock b/provider_shopper/pubspec.lock new file mode 100644 index 000000000..6206b45e3 --- /dev/null +++ b/provider_shopper/pubspec.lock @@ -0,0 +1,384 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + analyzer: + dependency: transitive + description: + name: analyzer + url: "https://pub.dartlang.org" + source: hosted + version: "0.36.4" + 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.2.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.4" + charcode: + dependency: transitive + description: + name: charcode + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.2" + 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.0.6" + csslib: + dependency: transitive + description: + name: csslib + url: "https://pub.dartlang.org" + source: hosted + version: "0.16.1" + 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" + front_end: + dependency: transitive + description: + name: front_end + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.19" + glob: + dependency: transitive + description: + name: glob + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.7" + html: + dependency: transitive + description: + name: html + url: "https://pub.dartlang.org" + source: hosted + version: "0.14.0+2" + http: + dependency: transitive + description: + name: http + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.0+2" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + http_parser: + dependency: transitive + description: + name: http_parser + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.3" + 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_rpc_2: + dependency: transitive + description: + name: json_rpc_2 + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + kernel: + dependency: transitive + description: + name: kernel + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.19" + matcher: + dependency: transitive + description: + name: matcher + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.5" + meta: + dependency: transitive + description: + name: meta + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.6" + mime: + dependency: transitive + description: + name: mime + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.6+3" + multi_server_socket: + dependency: transitive + description: + name: multi_server_socket + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.2" + node_preamble: + dependency: transitive + description: + name: node_preamble + url: "https://pub.dartlang.org" + source: hosted + version: "1.4.4" + package_config: + dependency: transitive + description: + name: package_config + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.5" + 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.2" + pedantic: + dependency: transitive + description: + name: pedantic + url: "https://pub.dartlang.org" + source: hosted + version: "1.7.0" + 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: "3.0.0+1" + pub_semver: + dependency: transitive + description: + name: pub_semver + url: "https://pub.dartlang.org" + source: hosted + version: "1.4.2" + quiver: + dependency: transitive + description: + name: quiver + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.3" + shelf: + dependency: transitive + description: + name: shelf + url: "https://pub.dartlang.org" + source: hosted + version: "0.7.5" + shelf_packages_handler: + dependency: transitive + description: + name: shelf_packages_handler + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.4" + shelf_static: + dependency: transitive + description: + name: shelf_static + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.8" + 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_map_stack_trace: + dependency: transitive + description: + name: source_map_stack_trace + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.5" + source_maps: + dependency: transitive + description: + name: source_maps + url: "https://pub.dartlang.org" + source: hosted + version: "0.10.8" + 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" + string_scanner: + dependency: transitive + description: + name: string_scanner + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.4" + term_glyph: + dependency: transitive + description: + name: term_glyph + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + test: + dependency: "direct dev" + description: + name: test + url: "https://pub.dartlang.org" + source: hosted + version: "1.6.3" + test_api: + dependency: transitive + description: + name: test_api + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.5" + test_core: + dependency: transitive + description: + name: test_core + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.5" + 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" + vm_service_client: + dependency: transitive + description: + name: vm_service_client + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.6+2" + watcher: + dependency: transitive + description: + name: watcher + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.7+10" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.14" + yaml: + dependency: transitive + description: + name: yaml + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.16" +sdks: + dart: ">=2.3.0 <3.0.0" diff --git a/provider_shopper/pubspec.yaml b/provider_shopper/pubspec.yaml new file mode 100644 index 000000000..7f22d0eb8 --- /dev/null +++ b/provider_shopper/pubspec.yaml @@ -0,0 +1,29 @@ +name: provider_shopper +description: A shopping app sample that uses Provider for state management. + +version: 1.0.0+1 + +environment: + sdk: ">=2.3.0 <3.0.0" + +dependencies: + flutter: + sdk: flutter + + # Import the provider package. + provider: ^3.0.0 + +dev_dependencies: + flutter_test: + sdk: flutter + + test: ^1.5.1 + +flutter: + uses-material-design: true + + fonts: + - family: Corben + fonts: + - asset: fonts/Corben/Corben-Bold.ttf + weight: 700 diff --git a/provider_shopper/test/widget_test.dart b/provider_shopper/test/widget_test.dart new file mode 100644 index 000000000..c22c15c18 --- /dev/null +++ b/provider_shopper/test/widget_test.dart @@ -0,0 +1,29 @@ +// Copyright 2019 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:provider_shopper/main.dart'; + +void main() { + testWidgets('smoke test', (tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(MyApp()); + + // Check that shopping cart is empty at start. + await tester.tap(find.byIcon(Icons.shopping_cart)); + await tester.pumpAndSettle(); + expect(find.text('\$0'), findsOneWidget); + + // Buy an item. + await tester.pageBack(); + await tester.pumpAndSettle(); + await tester.tap(find.text('ADD').first); + + // Check that the shopping cart is not empty anymore. + await tester.tap(find.byIcon(Icons.shopping_cart)); + await tester.pumpAndSettle(); + expect(find.text('\$0'), findsNothing); + }); +} diff --git a/travis_script.sh b/travis_script.sh index 11607f7c9..dad04e8d8 100755 --- a/travis_script.sh +++ b/travis_script.sh @@ -8,6 +8,7 @@ declare -a PROJECT_NAMES=( "platform_design" "platform_view_swift" \ "provider_counter" \ + "provider_shopper" \ "shrine" \ "veggieseasons" \ )