From 05a59e74171da1872a7f5b3a10e3275a8aa59764 Mon Sep 17 00:00:00 2001 From: Decoder07 Date: Mon, 20 Nov 2023 11:28:40 +0530 Subject: [PATCH] Added flutterflow sample app --- .../flutterflow-prebuilt-quickstart/README.md | 76 ++ .../analysis_options.yaml | 28 + .../android/.gitignore | 11 + .../android/app/build.gradle | 82 ++ .../android/app/src/debug/AndroidManifest.xml | 7 + .../android/app/src/main/AndroidManifest.xml | 67 ++ .../com/example/my_project/MainActivity.kt | 6 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../src/main/res/values-night-v31/styles.xml | 18 + .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values-v31/styles.xml | 18 + .../app/src/main/res/values/strings.xml | 5 + .../app/src/main/res/values/styles.xml | 18 + .../app/src/profile/AndroidManifest.xml | 7 + .../android/build.gradle | 33 + .../android/gradle.properties | 4 + .../gradle/wrapper/gradle-wrapper.properties | 6 + .../android/settings.gradle | 25 + .../assets/audios/favicon.png | Bin 0 -> 917 bytes .../assets/fonts/favicon.png | Bin 0 -> 917 bytes .../assets/images/favicon.png | Bin 0 -> 917 bytes .../assets/lottie_animations/favicon.png | Bin 0 -> 917 bytes .../assets/pdfs/favicon.png | Bin 0 -> 917 bytes .../assets/rive_animations/favicon.png | Bin 0 -> 917 bytes .../assets/videos/favicon.png | Bin 0 -> 917 bytes .../ios/.gitignore | 33 + .../ios/Flutter/AppFrameworkInfo.plist | 26 + .../ios/Flutter/Debug.xcconfig | 2 + .../ios/Flutter/Release.xcconfig | 2 + .../ios/ImageNotification/Info.plist | 31 + .../NotificationService.swift | 27 + .../ios/Podfile | 45 + .../ios/Runner.xcodeproj/project.pbxproj | 506 +++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 91 ++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../ios/Runner/AppDelegate.swift | 14 + .../AppIcon.appiconset/Contents.json | 122 +++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 564 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 1588 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 1025 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 1716 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 1920 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 1895 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 3831 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 1888 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 3294 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 3612 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/README.md | 5 + .../Runner/Base.lproj/LaunchScreen.storyboard | 37 + .../ios/Runner/Base.lproj/Main.storyboard | 26 + .../ios/Runner/Info.plist | 77 ++ .../ios/Runner/Runner-Bridging-Header.h | 1 + .../ios/Runner/Runner.entitlements | 6 + .../lib/custom_code/widgets/index.dart | 2 + .../custom_code/widgets/test_prebuilt.dart | 30 + .../lib/custom_code/widgets/test_widget.dart | 28 + .../lib/flutter_flow/flutter_flow_model.dart | 169 +++ .../lib/flutter_flow/flutter_flow_theme.dart | 350 +++++++ .../lib/flutter_flow/flutter_flow_util.dart | 300 ++++++ .../flutter_flow/flutter_flow_widgets.dart | 242 +++++ .../flutter_flow/internationalization.dart | 107 ++ .../lib/flutter_flow/lat_lng.dart | 19 + .../lib/flutter_flow/nav/nav.dart | 231 +++++ .../flutter_flow/nav/serialization_util.dart | 204 ++++ .../lib/flutter_flow/place.dart | 46 + .../lib/flutter_flow/uploaded_file.dart | 68 ++ .../lib/index.dart | 3 + .../lib/main.dart | 78 ++ .../lib/pages/home_page/home_page_model.dart | 26 + .../lib/pages/home_page/home_page_widget.dart | 110 ++ .../prebuilt_page/prebuilt_page_model.dart | 28 + .../prebuilt_page/prebuilt_page_widget.dart | 65 ++ .../pubspec.lock | 959 ++++++++++++++++++ .../pubspec.yaml | 115 +++ .../test/widget_test.dart | 17 + .../web/favicon.png | Bin 0 -> 54361 bytes .../web/icons/Icon-192.png | Bin 0 -> 5292 bytes .../web/icons/Icon-512.png | Bin 0 -> 8252 bytes .../web/index.html | 81 ++ 98 files changed, 4839 insertions(+) create mode 100644 sample apps/flutterflow-prebuilt-quickstart/README.md create mode 100644 sample apps/flutterflow-prebuilt-quickstart/analysis_options.yaml create mode 100644 sample apps/flutterflow-prebuilt-quickstart/android/.gitignore create mode 100644 sample apps/flutterflow-prebuilt-quickstart/android/app/build.gradle create mode 100644 sample apps/flutterflow-prebuilt-quickstart/android/app/src/debug/AndroidManifest.xml create mode 100644 sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/AndroidManifest.xml create mode 100644 sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/kotlin/com/example/my_project/MainActivity.kt create mode 100644 sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/res/drawable/launch_background.xml create mode 100644 sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/res/values-night-v31/styles.xml create mode 100644 sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/res/values-night/styles.xml create mode 100644 sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/res/values-v31/styles.xml create mode 100644 sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/res/values/strings.xml create mode 100644 sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/res/values/styles.xml create mode 100644 sample apps/flutterflow-prebuilt-quickstart/android/app/src/profile/AndroidManifest.xml create mode 100644 sample apps/flutterflow-prebuilt-quickstart/android/build.gradle create mode 100644 sample apps/flutterflow-prebuilt-quickstart/android/gradle.properties create mode 100644 sample apps/flutterflow-prebuilt-quickstart/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 sample apps/flutterflow-prebuilt-quickstart/android/settings.gradle create mode 100644 sample apps/flutterflow-prebuilt-quickstart/assets/audios/favicon.png create mode 100644 sample apps/flutterflow-prebuilt-quickstart/assets/fonts/favicon.png create mode 100644 sample apps/flutterflow-prebuilt-quickstart/assets/images/favicon.png create mode 100644 sample apps/flutterflow-prebuilt-quickstart/assets/lottie_animations/favicon.png create mode 100644 sample apps/flutterflow-prebuilt-quickstart/assets/pdfs/favicon.png create mode 100644 sample apps/flutterflow-prebuilt-quickstart/assets/rive_animations/favicon.png create mode 100644 sample apps/flutterflow-prebuilt-quickstart/assets/videos/favicon.png create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/.gitignore create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Flutter/AppFrameworkInfo.plist create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Flutter/Debug.xcconfig create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Flutter/Release.xcconfig create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/ImageNotification/Info.plist create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/ImageNotification/NotificationService.swift create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Podfile create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner.xcodeproj/project.pbxproj create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner/AppDelegate.swift create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Base.lproj/Main.storyboard create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Info.plist create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Runner-Bridging-Header.h create mode 100644 sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Runner.entitlements create mode 100644 sample apps/flutterflow-prebuilt-quickstart/lib/custom_code/widgets/index.dart create mode 100644 sample apps/flutterflow-prebuilt-quickstart/lib/custom_code/widgets/test_prebuilt.dart create mode 100644 sample apps/flutterflow-prebuilt-quickstart/lib/custom_code/widgets/test_widget.dart create mode 100644 sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/flutter_flow_model.dart create mode 100644 sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/flutter_flow_theme.dart create mode 100644 sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/flutter_flow_util.dart create mode 100644 sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/flutter_flow_widgets.dart create mode 100644 sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/internationalization.dart create mode 100644 sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/lat_lng.dart create mode 100644 sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/nav/nav.dart create mode 100644 sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/nav/serialization_util.dart create mode 100644 sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/place.dart create mode 100644 sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/uploaded_file.dart create mode 100644 sample apps/flutterflow-prebuilt-quickstart/lib/index.dart create mode 100644 sample apps/flutterflow-prebuilt-quickstart/lib/main.dart create mode 100644 sample apps/flutterflow-prebuilt-quickstart/lib/pages/home_page/home_page_model.dart create mode 100644 sample apps/flutterflow-prebuilt-quickstart/lib/pages/home_page/home_page_widget.dart create mode 100644 sample apps/flutterflow-prebuilt-quickstart/lib/pages/prebuilt_page/prebuilt_page_model.dart create mode 100644 sample apps/flutterflow-prebuilt-quickstart/lib/pages/prebuilt_page/prebuilt_page_widget.dart create mode 100644 sample apps/flutterflow-prebuilt-quickstart/pubspec.lock create mode 100644 sample apps/flutterflow-prebuilt-quickstart/pubspec.yaml create mode 100644 sample apps/flutterflow-prebuilt-quickstart/test/widget_test.dart create mode 100644 sample apps/flutterflow-prebuilt-quickstart/web/favicon.png create mode 100644 sample apps/flutterflow-prebuilt-quickstart/web/icons/Icon-192.png create mode 100644 sample apps/flutterflow-prebuilt-quickstart/web/icons/Icon-512.png create mode 100644 sample apps/flutterflow-prebuilt-quickstart/web/index.html diff --git a/sample apps/flutterflow-prebuilt-quickstart/README.md b/sample apps/flutterflow-prebuilt-quickstart/README.md new file mode 100644 index 000000000..467dfe9f0 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/README.md @@ -0,0 +1,76 @@ +# FlutterFlow & HMS Room Kit App Starter + +Welcome to the FlutterFlow and HMS Room Kit App Starter project! This Flutter template provides a solid foundation for building feature-rich mobile applications by combining the power of FlutterFlow for UI design and HMS Room Kit for real-time communication capabilities. + +## Features + +- **FlutterFlow Integration:** Leverage FlutterFlow's intuitive visual development platform to design stunning user interfaces for your Flutter app effortlessly. + +- **HMS Room Kit:** Integrate 100ms HMS Room Kit for seamless real-time communication features such as instant messaging, audio, and video calls into your Flutter application. + +## Getting Started + +Follow these steps to set up and run the project locally: + +1. Clone this repository: + + ```bash + git clone https://github.com/100mslive/100ms-flutter.git + ``` + +2. Navigate to the project directory: + + ```bash + cd sample\ apps/flutterflow-prebuilt-quickstart + ``` + +3. Install the required dependencies: + + ```bash + flutter pub get + ``` + +4. Run the app: + + ```bash + flutter run + ``` + +## Documentation + +For detailed information on how to use FlutterFlow and integrate HMS Room Kit features, check out the documentation: + +- [FlutterFlow Documentation](https://docs.flutterflow.io/) +- [HMS Room Kit Documentation](https://www.100ms.live/docs/flutter/v2/quickstart/prebuilt) + +## Steps to run hms_room_kit with flutterflow + +`hms_room_kit` manages state and UI out of the box, but there are some conflicts with flutterflow. So, we need to make some changes in the app layer. Please follow the steps below to run the app: + +1. Solving dependency conflicts: + +There are several packages which are common in both `flutterflow` and `hms_room_kit`, but with different versions. So, we need to make sure that the versions of these packages are same in both `pubspec.yaml` files. For conflict in packages you will get error like this: + +```bash +Error: Failed running flutter pub get... +Because custom_widget depends on flutter_cache_manager 3.3.0 which depends on http ^0.13.0, http ^0.13.0 is required. +So, because custom_widget depends on http ^1.0.0, version solving failed. + + +You can try the following suggestion to make the pubspec resolve: +* Try upgrading your constraint on flutter_cache_manager: flutter pub add flutter_cache_manager:^3.3.1 +``` + +This can be solved by updating to the higher version of the package. For example, in the above error, we need to update `flutter_cache_manager` to `^3.3.1` in `pubspec.yaml` file. + +> 🔑 Note: Flutterflow UI doesn't directly allow changing the package version, either you need to do it in `Custom Widgets` section or you can download the code from flutterflow and change the version in `pubspec.yaml` file locally. We recommend doing the later since it's much easier. + +2. Issues with Navigator: + +Flutterflow uses `go_router` whereas `hms_room_kit` uses `MaterialPageRoute` for navigation. So, you might face issues while navigating from app screen to `hms_room_kit` screen. To solve this, you will need to use `MaterialPageRoute` while pushing the `hms_room_kit` path while you can continue using `go_router` for other paths. + +That's it. You can now use the amazing Prebuilt UI with speed of flutterflow in your application. + +If you face any issues or have any questions, please reach out to us on [Discord](https://discord.gg/jD94Fp74Ea) + + diff --git a/sample apps/flutterflow-prebuilt-quickstart/analysis_options.yaml b/sample apps/flutterflow-prebuilt-quickstart/analysis_options.yaml new file mode 100644 index 000000000..5a368c347 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/analysis_options.yaml @@ -0,0 +1,28 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at https://dart.dev/lints. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options \ No newline at end of file diff --git a/sample apps/flutterflow-prebuilt-quickstart/android/.gitignore b/sample apps/flutterflow-prebuilt-quickstart/android/.gitignore new file mode 100644 index 000000000..0a741cb43 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/android/.gitignore @@ -0,0 +1,11 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +key.properties diff --git a/sample apps/flutterflow-prebuilt-quickstart/android/app/build.gradle b/sample apps/flutterflow-prebuilt-quickstart/android/app/build.gradle new file mode 100644 index 000000000..814f65b73 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/android/app/build.gradle @@ -0,0 +1,82 @@ +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" + + +def keystoreProperties = new Properties() +def keystorePropertiesFile = rootProject.file('key.properties') +if (keystorePropertiesFile.exists()) { + keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) +} + +android { + compileSdkVersion 33 + + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + lintOptions { + disable 'InvalidPackage' + checkReleaseBuilds false + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.mycompany.hmsroomkitsample" + minSdkVersion 21 + targetSdkVersion 33 + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + } + + signingConfigs { + release { + keyAlias keystoreProperties['keyAlias'] + keyPassword keystoreProperties['keyPassword'] + storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null + storePassword keystoreProperties['storePassword'] + } + } + + 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" + implementation (platform("org.jetbrains.kotlin:kotlin-bom:1.8.0")) +} diff --git a/sample apps/flutterflow-prebuilt-quickstart/android/app/src/debug/AndroidManifest.xml b/sample apps/flutterflow-prebuilt-quickstart/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 000000000..876a51466 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/AndroidManifest.xml b/sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/AndroidManifest.xml new file mode 100644 index 000000000..a0e4b0c6e --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/kotlin/com/example/my_project/MainActivity.kt b/sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/kotlin/com/example/my_project/MainActivity.kt new file mode 100644 index 000000000..fe90c14b6 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/kotlin/com/example/my_project/MainActivity.kt @@ -0,0 +1,6 @@ +package com.mycompany.hmsroomkitsample + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() { +} diff --git a/sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/res/drawable/launch_background.xml b/sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 000000000..f74085f3f --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/sample apps/flutterflow-prebuilt-quickstart/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/sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/sample apps/flutterflow-prebuilt-quickstart/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/sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/sample apps/flutterflow-prebuilt-quickstart/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/sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/sample apps/flutterflow-prebuilt-quickstart/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/sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/res/values-night-v31/styles.xml b/sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/res/values-night-v31/styles.xml new file mode 100644 index 000000000..f93aa34d1 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/res/values-night-v31/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/res/values-night/styles.xml b/sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 000000000..f93aa34d1 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/res/values-v31/styles.xml b/sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/res/values-v31/styles.xml new file mode 100644 index 000000000..d74aa35c2 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/res/values-v31/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/res/values/strings.xml b/sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/res/values/strings.xml new file mode 100644 index 000000000..0e85b3d2a --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/res/values/strings.xml @@ -0,0 +1,5 @@ + + + hms-room-kit-sample + + \ No newline at end of file diff --git a/sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/res/values/styles.xml b/sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/res/values/styles.xml new file mode 100644 index 000000000..d74aa35c2 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/sample apps/flutterflow-prebuilt-quickstart/android/app/src/profile/AndroidManifest.xml b/sample apps/flutterflow-prebuilt-quickstart/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 000000000..876a51466 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/sample apps/flutterflow-prebuilt-quickstart/android/build.gradle b/sample apps/flutterflow-prebuilt-quickstart/android/build.gradle new file mode 100644 index 000000000..ffda441f4 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/android/build.gradle @@ -0,0 +1,33 @@ +buildscript { + ext.kotlin_version = '1.7.10' + repositories { + google() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:7.3.0' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + + + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +tasks.register("clean", Delete) { + delete rootProject.buildDir +} diff --git a/sample apps/flutterflow-prebuilt-quickstart/android/gradle.properties b/sample apps/flutterflow-prebuilt-quickstart/android/gradle.properties new file mode 100644 index 000000000..498c33b7d --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/android/gradle.properties @@ -0,0 +1,4 @@ +org.gradle.jvmargs=-Xmx4608m +android.useAndroidX=true +android.enableJetifier=true +android.enableR8=true diff --git a/sample apps/flutterflow-prebuilt-quickstart/android/gradle/wrapper/gradle-wrapper.properties b/sample apps/flutterflow-prebuilt-quickstart/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..6b665338b --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/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-7.5-all.zip diff --git a/sample apps/flutterflow-prebuilt-quickstart/android/settings.gradle b/sample apps/flutterflow-prebuilt-quickstart/android/settings.gradle new file mode 100644 index 000000000..f6e4cd3ae --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/android/settings.gradle @@ -0,0 +1,25 @@ +include ':app' + +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() + +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" + +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 +} \ No newline at end of file diff --git a/sample apps/flutterflow-prebuilt-quickstart/assets/audios/favicon.png b/sample apps/flutterflow-prebuilt-quickstart/assets/audios/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/sample apps/flutterflow-prebuilt-quickstart/assets/fonts/favicon.png b/sample apps/flutterflow-prebuilt-quickstart/assets/fonts/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/sample apps/flutterflow-prebuilt-quickstart/assets/images/favicon.png b/sample apps/flutterflow-prebuilt-quickstart/assets/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/sample apps/flutterflow-prebuilt-quickstart/assets/lottie_animations/favicon.png b/sample apps/flutterflow-prebuilt-quickstart/assets/lottie_animations/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/sample apps/flutterflow-prebuilt-quickstart/assets/pdfs/favicon.png b/sample apps/flutterflow-prebuilt-quickstart/assets/pdfs/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/sample apps/flutterflow-prebuilt-quickstart/assets/rive_animations/favicon.png b/sample apps/flutterflow-prebuilt-quickstart/assets/rive_animations/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/sample apps/flutterflow-prebuilt-quickstart/assets/videos/favicon.png b/sample apps/flutterflow-prebuilt-quickstart/assets/videos/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/sample apps/flutterflow-prebuilt-quickstart/ios/.gitignore b/sample apps/flutterflow-prebuilt-quickstart/ios/.gitignore new file mode 100644 index 000000000..eb86478db --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/ios/.gitignore @@ -0,0 +1,33 @@ +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +build/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/sample apps/flutterflow-prebuilt-quickstart/ios/Flutter/AppFrameworkInfo.plist b/sample apps/flutterflow-prebuilt-quickstart/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 000000000..d57061dd6 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 13.0 + + diff --git a/sample apps/flutterflow-prebuilt-quickstart/ios/Flutter/Debug.xcconfig b/sample apps/flutterflow-prebuilt-quickstart/ios/Flutter/Debug.xcconfig new file mode 100644 index 000000000..e8efba114 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/ios/Flutter/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "Generated.xcconfig" diff --git a/sample apps/flutterflow-prebuilt-quickstart/ios/Flutter/Release.xcconfig b/sample apps/flutterflow-prebuilt-quickstart/ios/Flutter/Release.xcconfig new file mode 100644 index 000000000..399e9340e --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/ios/Flutter/Release.xcconfig @@ -0,0 +1,2 @@ +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "Generated.xcconfig" diff --git a/sample apps/flutterflow-prebuilt-quickstart/ios/ImageNotification/Info.plist b/sample apps/flutterflow-prebuilt-quickstart/ios/ImageNotification/Info.plist new file mode 100644 index 000000000..9f2806029 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/ios/ImageNotification/Info.plist @@ -0,0 +1,31 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + ImageNotification + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + NSExtension + + NSExtensionPointIdentifier + com.apple.usernotifications.service + NSExtensionPrincipalClass + $(PRODUCT_MODULE_NAME).NotificationService + + + diff --git a/sample apps/flutterflow-prebuilt-quickstart/ios/ImageNotification/NotificationService.swift b/sample apps/flutterflow-prebuilt-quickstart/ios/ImageNotification/NotificationService.swift new file mode 100644 index 000000000..d16342e0a --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/ios/ImageNotification/NotificationService.swift @@ -0,0 +1,27 @@ +import FirebaseMessaging +import UserNotifications + +class NotificationService: UNNotificationServiceExtension { + + var contentHandler: ((UNNotificationContent) -> Void)? + var bestAttemptContent: UNMutableNotificationContent? + + override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { + self.contentHandler = contentHandler + bestAttemptContent = request.content + .mutableCopy() as? UNMutableNotificationContent + guard let bestAttemptContent = bestAttemptContent else { return } + FIRMessagingExtensionHelper().populateNotificationContent( + bestAttemptContent, + withContentHandler: contentHandler) + } + + override func serviceExtensionTimeWillExpire() { + // Called just before the extension will be terminated by the system. + // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used. + if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent { + contentHandler(bestAttemptContent) + } + } + +} diff --git a/sample apps/flutterflow-prebuilt-quickstart/ios/Podfile b/sample apps/flutterflow-prebuilt-quickstart/ios/Podfile new file mode 100644 index 000000000..ad0c74b40 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/ios/Podfile @@ -0,0 +1,45 @@ +# Uncomment this line to define a global platform for your project +platform :ios, '13.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_ios_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_ios_build_settings(target) + target.build_configurations.each do |config| + config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET' + + end + end +end diff --git a/sample apps/flutterflow-prebuilt-quickstart/ios/Runner.xcodeproj/project.pbxproj b/sample apps/flutterflow-prebuilt-quickstart/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 000000000..1a79e5449 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,506 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 6436409A27A31CD800820AF7 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6436409C27A31CD800820AF7 /* InfoPlist.strings */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + 6436409C27A31CD800820AF7 /* InfoPlist.strings */, + ); + path = Runner; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1020; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 6436409A27A31CD800820AF7 /* InfoPlist.strings in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 6436409C27A31CD800820AF7 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.mycompany.hmsroomkitsample; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.mycompany.hmsroomkitsample; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.mycompany.hmsroomkitsample; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/sample apps/flutterflow-prebuilt-quickstart/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/sample apps/flutterflow-prebuilt-quickstart/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..1d526a16e --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/sample apps/flutterflow-prebuilt-quickstart/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/sample apps/flutterflow-prebuilt-quickstart/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/sample apps/flutterflow-prebuilt-quickstart/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/sample apps/flutterflow-prebuilt-quickstart/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 000000000..f9b0d7c5e --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/sample apps/flutterflow-prebuilt-quickstart/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/sample apps/flutterflow-prebuilt-quickstart/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 000000000..a28140cfd --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sample apps/flutterflow-prebuilt-quickstart/ios/Runner.xcworkspace/contents.xcworkspacedata b/sample apps/flutterflow-prebuilt-quickstart/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..1d526a16e --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/sample apps/flutterflow-prebuilt-quickstart/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/sample apps/flutterflow-prebuilt-quickstart/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/sample apps/flutterflow-prebuilt-quickstart/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/sample apps/flutterflow-prebuilt-quickstart/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 000000000..f9b0d7c5e --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/sample apps/flutterflow-prebuilt-quickstart/ios/Runner/AppDelegate.swift b/sample apps/flutterflow-prebuilt-quickstart/ios/Runner/AppDelegate.swift new file mode 100644 index 000000000..f52eb22e4 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/ios/Runner/AppDelegate.swift @@ -0,0 +1,14 @@ +import UIKit + +import Flutter + +@UIApplicationMain +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..d36b1fab2 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/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/sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 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 literal 0 HcmV?d00001 diff --git a/sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/sample apps/flutterflow-prebuilt-quickstart/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/sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/sample apps/flutterflow-prebuilt-quickstart/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/sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/sample apps/flutterflow-prebuilt-quickstart/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/sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/sample apps/flutterflow-prebuilt-quickstart/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/sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/sample apps/flutterflow-prebuilt-quickstart/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/sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/sample apps/flutterflow-prebuilt-quickstart/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/sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/sample apps/flutterflow-prebuilt-quickstart/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/sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/sample apps/flutterflow-prebuilt-quickstart/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/sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/sample apps/flutterflow-prebuilt-quickstart/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/sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 000000000..89c2725b7 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/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/sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Base.lproj/LaunchScreen.storyboard b/sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 000000000..f2e259c7c --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Base.lproj/Main.storyboard b/sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 000000000..f3c28516f --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Info.plist b/sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Info.plist new file mode 100644 index 000000000..41da24d92 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Info.plist @@ -0,0 +1,77 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + hms-room-kit-sample + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + hms-room-kit-sample + CFBundlePackageType + APPL + + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleURLTypes + + CFBundleTypeRole + Editor + CFBundleURLName + hmsroomkitsample.com + CFBundleURLSchemes + + hmsroomkitsample + + + + FlutterDeepLinkingEnabled + + + + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + + + NSLocationWhenInUseUsageDescription + Room kit would like to access location + NSMicrophoneUsageDescription + Room kit would like to access microphone + NSCameraUsageDescription + Room kit would like to access camera + NSBluetoothAlwaysUsageDescription + Room kit would like to access bluetooth + + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + + + diff --git a/sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Runner-Bridging-Header.h b/sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 000000000..308a2a560 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Runner.entitlements b/sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Runner.entitlements new file mode 100644 index 000000000..6631ffa6f --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/ios/Runner/Runner.entitlements @@ -0,0 +1,6 @@ + + + + + + diff --git a/sample apps/flutterflow-prebuilt-quickstart/lib/custom_code/widgets/index.dart b/sample apps/flutterflow-prebuilt-quickstart/lib/custom_code/widgets/index.dart new file mode 100644 index 000000000..ca796cfd9 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/lib/custom_code/widgets/index.dart @@ -0,0 +1,2 @@ +export 'test_prebuilt.dart' show TestPrebuilt; +export 'test_widget.dart' show TestWidget; diff --git a/sample apps/flutterflow-prebuilt-quickstart/lib/custom_code/widgets/test_prebuilt.dart b/sample apps/flutterflow-prebuilt-quickstart/lib/custom_code/widgets/test_prebuilt.dart new file mode 100644 index 000000000..ba20efff6 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/lib/custom_code/widgets/test_prebuilt.dart @@ -0,0 +1,30 @@ +// Automatic FlutterFlow imports +import '/flutter_flow/flutter_flow_theme.dart'; +import '/flutter_flow/flutter_flow_util.dart'; +import 'index.dart'; // Imports other custom widgets +import 'package:flutter/material.dart'; +// Begin custom widget code +// DO NOT REMOVE OR MODIFY THE CODE ABOVE! + +import 'package:hms_room_kit/hms_room_kit.dart'; + +class TestPrebuilt extends StatefulWidget { + const TestPrebuilt({ + Key? key, + this.width, + this.height, + }) : super(key: key); + + final double? width; + final double? height; + + @override + _TestPrebuiltState createState() => _TestPrebuiltState(); +} + +class _TestPrebuiltState extends State { + @override + Widget build(BuildContext context) { + return HMSPrebuilt(roomCode: "xno-jwn-phi"); + } +} diff --git a/sample apps/flutterflow-prebuilt-quickstart/lib/custom_code/widgets/test_widget.dart b/sample apps/flutterflow-prebuilt-quickstart/lib/custom_code/widgets/test_widget.dart new file mode 100644 index 000000000..deb15610f --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/lib/custom_code/widgets/test_widget.dart @@ -0,0 +1,28 @@ +// Automatic FlutterFlow imports +import '/flutter_flow/flutter_flow_theme.dart'; +import '/flutter_flow/flutter_flow_util.dart'; +import 'index.dart'; // Imports other custom widgets +import 'package:flutter/material.dart'; +// Begin custom widget code +// DO NOT REMOVE OR MODIFY THE CODE ABOVE! + +class TestWidget extends StatefulWidget { + const TestWidget({ + Key? key, + this.width, + this.height, + }) : super(key: key); + + final double? width; + final double? height; + + @override + _TestWidgetState createState() => _TestWidgetState(); +} + +class _TestWidgetState extends State { + @override + Widget build(BuildContext context) { + return Container(); + } +} diff --git a/sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/flutter_flow_model.dart b/sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/flutter_flow_model.dart new file mode 100644 index 000000000..0e13f19c0 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/flutter_flow_model.dart @@ -0,0 +1,169 @@ +import 'package:collection/collection.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/scheduler.dart'; +import 'package:provider/provider.dart'; + +Widget wrapWithModel({ + required T model, + required Widget child, + required VoidCallback updateCallback, + bool updateOnChange = false, +}) { + // Set the component to optionally update the page on updates. + model.setOnUpdate( + onUpdate: updateCallback, + updateOnChange: updateOnChange, + ); + // Models for components within a page will be disposed by the page's model, + // so we don't want the component widget to dispose them until the page is + // itself disposed. + model.disposeOnWidgetDisposal = false; + // Wrap in a Provider so that the model can be accessed by the component. + return Provider.value( + value: model, + child: child, + ); +} + +T createModel( + BuildContext context, + T Function() defaultBuilder, +) { + final model = context.read() ?? defaultBuilder(); + model._init(context); + return model; +} + +abstract class FlutterFlowModel { + // Initialization methods + bool _isInitialized = false; + void initState(BuildContext context); + void _init(BuildContext context) { + if (!_isInitialized) { + initState(context); + _isInitialized = true; + } + if (context.widget is W) _widget = context.widget as W; + } + + // The widget associated with this model. This is useful for accessing the + // parameters of the widget, for example. + W? _widget; + // This will always be non-null when used, but is nullable to allow us to + // dispose of the widget in the [dispose] method (for garbage collection). + W get widget => _widget!; + + // Dispose methods + // Whether to dispose this model when the corresponding widget is + // disposed. By default this is true for pages and false for components, + // as page/component models handle the disposal of their children. + bool disposeOnWidgetDisposal = true; + void dispose(); + void maybeDispose() { + if (disposeOnWidgetDisposal) { + dispose(); + } + // Remove reference to widget for garbage collection purposes. + _widget = null; + } + + // Whether to update the containing page / component on updates. + bool updateOnChange = false; + // Function to call when the model receives an update. + VoidCallback _updateCallback = () {}; + void onUpdate() => updateOnChange ? _updateCallback() : () {}; + FlutterFlowModel setOnUpdate({ + bool updateOnChange = false, + required VoidCallback onUpdate, + }) => + this + .._updateCallback = onUpdate + ..updateOnChange = updateOnChange; + // Update the containing page when this model received an update. + void updatePage(VoidCallback callback) { + callback(); + _updateCallback(); + } +} + +class FlutterFlowDynamicModels { + FlutterFlowDynamicModels(this.defaultBuilder); + + final T Function() defaultBuilder; + final Map _childrenModels = {}; + final Map _childrenIndexes = {}; + Set? _activeKeys; + + T getModel(String uniqueKey, int index) { + _updateActiveKeys(uniqueKey); + _childrenIndexes[uniqueKey] = index; + return _childrenModels[uniqueKey] ??= defaultBuilder(); + } + + List getValues(S? Function(T) getValue) { + return _childrenIndexes.entries + // Sort keys by index. + .sorted((a, b) => a.value.compareTo(b.value)) + .where((e) => _childrenModels[e.key] != null) + // Map each model to the desired value and return as list. In order + // to preserve index order, rather than removing null values we provide + // default values (for types with reasonable defaults). + .map((e) => getValue(_childrenModels[e.key]!) ?? _getDefaultValue()!) + .toList(); + } + + S? getValueAtIndex(int index, S? Function(T) getValue) { + final uniqueKey = + _childrenIndexes.entries.firstWhereOrNull((e) => e.value == index)?.key; + return getValueForKey(uniqueKey, getValue); + } + + S? getValueForKey(String? uniqueKey, S? Function(T) getValue) { + final model = _childrenModels[uniqueKey]; + return model != null ? getValue(model) : null; + } + + void dispose() => _childrenModels.values.forEach((model) => model.dispose()); + + void _updateActiveKeys(String uniqueKey) { + final shouldResetActiveKeys = _activeKeys == null; + _activeKeys ??= {}; + _activeKeys!.add(uniqueKey); + + if (shouldResetActiveKeys) { + // Add a post-frame callback to remove and dispose of unused models after + // we're done building, then reset `_activeKeys` to null so we know to do + // this again next build. + SchedulerBinding.instance.addPostFrameCallback((_) { + _childrenIndexes.removeWhere((k, _) => !_activeKeys!.contains(k)); + _childrenModels.keys + .toSet() + .difference(_activeKeys!) + // Remove and dispose of unused models since they are not being used + // elsewhere and would not otherwise be disposed. + .forEach((k) => _childrenModels.remove(k)?.dispose()); + _activeKeys = null; + }); + } + } +} + +T? _getDefaultValue() { + switch (T) { + case int: + return 0 as T; + case double: + return 0.0 as T; + case String: + return '' as T; + case bool: + return false as T; + default: + return null as T; + } +} + +extension TextValidationExtensions on String? Function(BuildContext, String?)? { + String? Function(String?)? asValidator(BuildContext context) => + this != null ? (val) => this!(context, val) : null; +} diff --git a/sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/flutter_flow_theme.dart b/sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/flutter_flow_theme.dart new file mode 100644 index 000000000..48e4f7021 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/flutter_flow_theme.dart @@ -0,0 +1,350 @@ +// ignore_for_file: overridden_fields, annotate_overrides + +import 'package:flutter/material.dart'; +import 'package:google_fonts/google_fonts.dart'; + +import 'package:shared_preferences/shared_preferences.dart'; + +const kThemeModeKey = '__theme_mode__'; +SharedPreferences? _prefs; + +abstract class FlutterFlowTheme { + static Future initialize() async => + _prefs = await SharedPreferences.getInstance(); + static ThemeMode get themeMode { + final darkMode = _prefs?.getBool(kThemeModeKey); + return darkMode == null + ? ThemeMode.system + : darkMode + ? ThemeMode.dark + : ThemeMode.light; + } + + static void saveThemeMode(ThemeMode mode) => mode == ThemeMode.system + ? _prefs?.remove(kThemeModeKey) + : _prefs?.setBool(kThemeModeKey, mode == ThemeMode.dark); + + static FlutterFlowTheme of(BuildContext context) { + return Theme.of(context).brightness == Brightness.dark + ? DarkModeTheme() + : LightModeTheme(); + } + + @Deprecated('Use primary instead') + Color get primaryColor => primary; + @Deprecated('Use secondary instead') + Color get secondaryColor => secondary; + @Deprecated('Use tertiary instead') + Color get tertiaryColor => tertiary; + + late Color primary; + late Color secondary; + late Color tertiary; + late Color alternate; + late Color primaryText; + late Color secondaryText; + late Color primaryBackground; + late Color secondaryBackground; + late Color accent1; + late Color accent2; + late Color accent3; + late Color accent4; + late Color success; + late Color warning; + late Color error; + late Color info; + + @Deprecated('Use displaySmallFamily instead') + String get title1Family => displaySmallFamily; + @Deprecated('Use displaySmall instead') + TextStyle get title1 => typography.displaySmall; + @Deprecated('Use headlineMediumFamily instead') + String get title2Family => typography.headlineMediumFamily; + @Deprecated('Use headlineMedium instead') + TextStyle get title2 => typography.headlineMedium; + @Deprecated('Use headlineSmallFamily instead') + String get title3Family => typography.headlineSmallFamily; + @Deprecated('Use headlineSmall instead') + TextStyle get title3 => typography.headlineSmall; + @Deprecated('Use titleMediumFamily instead') + String get subtitle1Family => typography.titleMediumFamily; + @Deprecated('Use titleMedium instead') + TextStyle get subtitle1 => typography.titleMedium; + @Deprecated('Use titleSmallFamily instead') + String get subtitle2Family => typography.titleSmallFamily; + @Deprecated('Use titleSmall instead') + TextStyle get subtitle2 => typography.titleSmall; + @Deprecated('Use bodyMediumFamily instead') + String get bodyText1Family => typography.bodyMediumFamily; + @Deprecated('Use bodyMedium instead') + TextStyle get bodyText1 => typography.bodyMedium; + @Deprecated('Use bodySmallFamily instead') + String get bodyText2Family => typography.bodySmallFamily; + @Deprecated('Use bodySmall instead') + TextStyle get bodyText2 => typography.bodySmall; + + String get displayLargeFamily => typography.displayLargeFamily; + TextStyle get displayLarge => typography.displayLarge; + String get displayMediumFamily => typography.displayMediumFamily; + TextStyle get displayMedium => typography.displayMedium; + String get displaySmallFamily => typography.displaySmallFamily; + TextStyle get displaySmall => typography.displaySmall; + String get headlineLargeFamily => typography.headlineLargeFamily; + TextStyle get headlineLarge => typography.headlineLarge; + String get headlineMediumFamily => typography.headlineMediumFamily; + TextStyle get headlineMedium => typography.headlineMedium; + String get headlineSmallFamily => typography.headlineSmallFamily; + TextStyle get headlineSmall => typography.headlineSmall; + String get titleLargeFamily => typography.titleLargeFamily; + TextStyle get titleLarge => typography.titleLarge; + String get titleMediumFamily => typography.titleMediumFamily; + TextStyle get titleMedium => typography.titleMedium; + String get titleSmallFamily => typography.titleSmallFamily; + TextStyle get titleSmall => typography.titleSmall; + String get labelLargeFamily => typography.labelLargeFamily; + TextStyle get labelLarge => typography.labelLarge; + String get labelMediumFamily => typography.labelMediumFamily; + TextStyle get labelMedium => typography.labelMedium; + String get labelSmallFamily => typography.labelSmallFamily; + TextStyle get labelSmall => typography.labelSmall; + String get bodyLargeFamily => typography.bodyLargeFamily; + TextStyle get bodyLarge => typography.bodyLarge; + String get bodyMediumFamily => typography.bodyMediumFamily; + TextStyle get bodyMedium => typography.bodyMedium; + String get bodySmallFamily => typography.bodySmallFamily; + TextStyle get bodySmall => typography.bodySmall; + + Typography get typography => ThemeTypography(this); +} + +class LightModeTheme extends FlutterFlowTheme { + @Deprecated('Use primary instead') + Color get primaryColor => primary; + @Deprecated('Use secondary instead') + Color get secondaryColor => secondary; + @Deprecated('Use tertiary instead') + Color get tertiaryColor => tertiary; + + late Color primary = const Color(0xFF4B39EF); + late Color secondary = const Color(0xFF39D2C0); + late Color tertiary = const Color(0xFFEE8B60); + late Color alternate = const Color(0xFFE0E3E7); + late Color primaryText = const Color(0xFF14181B); + late Color secondaryText = const Color(0xFF57636C); + late Color primaryBackground = const Color(0xFFF1F4F8); + late Color secondaryBackground = const Color(0xFFFFFFFF); + late Color accent1 = const Color(0x4C4B39EF); + late Color accent2 = const Color(0x4D39D2C0); + late Color accent3 = const Color(0x4DEE8B60); + late Color accent4 = const Color(0xCCFFFFFF); + late Color success = const Color(0xFF249689); + late Color warning = const Color(0xFFF9CF58); + late Color error = const Color(0xFFFF5963); + late Color info = const Color(0xFFFFFFFF); +} + +abstract class Typography { + String get displayLargeFamily; + TextStyle get displayLarge; + String get displayMediumFamily; + TextStyle get displayMedium; + String get displaySmallFamily; + TextStyle get displaySmall; + String get headlineLargeFamily; + TextStyle get headlineLarge; + String get headlineMediumFamily; + TextStyle get headlineMedium; + String get headlineSmallFamily; + TextStyle get headlineSmall; + String get titleLargeFamily; + TextStyle get titleLarge; + String get titleMediumFamily; + TextStyle get titleMedium; + String get titleSmallFamily; + TextStyle get titleSmall; + String get labelLargeFamily; + TextStyle get labelLarge; + String get labelMediumFamily; + TextStyle get labelMedium; + String get labelSmallFamily; + TextStyle get labelSmall; + String get bodyLargeFamily; + TextStyle get bodyLarge; + String get bodyMediumFamily; + TextStyle get bodyMedium; + String get bodySmallFamily; + TextStyle get bodySmall; +} + +class ThemeTypography extends Typography { + ThemeTypography(this.theme); + + final FlutterFlowTheme theme; + + String get displayLargeFamily => 'Outfit'; + TextStyle get displayLarge => GoogleFonts.getFont( + 'Outfit', + color: theme.primaryText, + fontWeight: FontWeight.normal, + fontSize: 64.0, + ); + String get displayMediumFamily => 'Outfit'; + TextStyle get displayMedium => GoogleFonts.getFont( + 'Outfit', + color: theme.primaryText, + fontWeight: FontWeight.normal, + fontSize: 44.0, + ); + String get displaySmallFamily => 'Outfit'; + TextStyle get displaySmall => GoogleFonts.getFont( + 'Outfit', + color: theme.primaryText, + fontWeight: FontWeight.w600, + fontSize: 36.0, + ); + String get headlineLargeFamily => 'Outfit'; + TextStyle get headlineLarge => GoogleFonts.getFont( + 'Outfit', + color: theme.primaryText, + fontWeight: FontWeight.w600, + fontSize: 32.0, + ); + String get headlineMediumFamily => 'Outfit'; + TextStyle get headlineMedium => GoogleFonts.getFont( + 'Outfit', + color: theme.primaryText, + fontWeight: FontWeight.normal, + fontSize: 24.0, + ); + String get headlineSmallFamily => 'Outfit'; + TextStyle get headlineSmall => GoogleFonts.getFont( + 'Outfit', + color: theme.primaryText, + fontWeight: FontWeight.w500, + fontSize: 24.0, + ); + String get titleLargeFamily => 'Outfit'; + TextStyle get titleLarge => GoogleFonts.getFont( + 'Outfit', + color: theme.primaryText, + fontWeight: FontWeight.w500, + fontSize: 22.0, + ); + String get titleMediumFamily => 'Readex Pro'; + TextStyle get titleMedium => GoogleFonts.getFont( + 'Readex Pro', + color: theme.info, + fontWeight: FontWeight.normal, + fontSize: 18.0, + ); + String get titleSmallFamily => 'Readex Pro'; + TextStyle get titleSmall => GoogleFonts.getFont( + 'Readex Pro', + color: theme.info, + fontWeight: FontWeight.w500, + fontSize: 16.0, + ); + String get labelLargeFamily => 'Readex Pro'; + TextStyle get labelLarge => GoogleFonts.getFont( + 'Readex Pro', + color: theme.secondaryText, + fontWeight: FontWeight.normal, + fontSize: 16.0, + ); + String get labelMediumFamily => 'Readex Pro'; + TextStyle get labelMedium => GoogleFonts.getFont( + 'Readex Pro', + color: theme.secondaryText, + fontWeight: FontWeight.normal, + fontSize: 14.0, + ); + String get labelSmallFamily => 'Readex Pro'; + TextStyle get labelSmall => GoogleFonts.getFont( + 'Readex Pro', + color: theme.secondaryText, + fontWeight: FontWeight.normal, + fontSize: 12.0, + ); + String get bodyLargeFamily => 'Readex Pro'; + TextStyle get bodyLarge => GoogleFonts.getFont( + 'Readex Pro', + color: theme.primaryText, + fontWeight: FontWeight.normal, + fontSize: 16.0, + ); + String get bodyMediumFamily => 'Readex Pro'; + TextStyle get bodyMedium => GoogleFonts.getFont( + 'Readex Pro', + color: theme.primaryText, + fontWeight: FontWeight.normal, + fontSize: 14.0, + ); + String get bodySmallFamily => 'Readex Pro'; + TextStyle get bodySmall => GoogleFonts.getFont( + 'Readex Pro', + color: theme.primaryText, + fontWeight: FontWeight.normal, + fontSize: 12.0, + ); +} + +class DarkModeTheme extends FlutterFlowTheme { + @Deprecated('Use primary instead') + Color get primaryColor => primary; + @Deprecated('Use secondary instead') + Color get secondaryColor => secondary; + @Deprecated('Use tertiary instead') + Color get tertiaryColor => tertiary; + + late Color primary = const Color(0xFF4B39EF); + late Color secondary = const Color(0xFF39D2C0); + late Color tertiary = const Color(0xFFEE8B60); + late Color alternate = const Color(0xFF262D34); + late Color primaryText = const Color(0xFFFFFFFF); + late Color secondaryText = const Color(0xFF95A1AC); + late Color primaryBackground = const Color(0xFF1D2428); + late Color secondaryBackground = const Color(0xFF14181B); + late Color accent1 = const Color(0x4C4B39EF); + late Color accent2 = const Color(0x4D39D2C0); + late Color accent3 = const Color(0x4DEE8B60); + late Color accent4 = const Color(0xB2262D34); + late Color success = const Color(0xFF249689); + late Color warning = const Color(0xFFF9CF58); + late Color error = const Color(0xFFFF5963); + late Color info = const Color(0xFFFFFFFF); +} + +extension TextStyleHelper on TextStyle { + TextStyle override({ + String? fontFamily, + Color? color, + double? fontSize, + FontWeight? fontWeight, + double? letterSpacing, + FontStyle? fontStyle, + bool useGoogleFonts = true, + TextDecoration? decoration, + double? lineHeight, + }) => + useGoogleFonts + ? GoogleFonts.getFont( + fontFamily!, + color: color ?? this.color, + fontSize: fontSize ?? this.fontSize, + letterSpacing: letterSpacing ?? this.letterSpacing, + fontWeight: fontWeight ?? this.fontWeight, + fontStyle: fontStyle ?? this.fontStyle, + decoration: decoration, + height: lineHeight, + ) + : copyWith( + fontFamily: fontFamily, + color: color, + fontSize: fontSize, + letterSpacing: letterSpacing, + fontWeight: fontWeight, + fontStyle: fontStyle, + decoration: decoration, + height: lineHeight, + ); +} diff --git a/sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/flutter_flow_util.dart b/sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/flutter_flow_util.dart new file mode 100644 index 000000000..f5e13f359 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/flutter_flow_util.dart @@ -0,0 +1,300 @@ +import 'dart:io'; + +import 'package:flutter/foundation.dart' show kIsWeb; +import 'package:flutter/material.dart'; +import 'package:from_css_color/from_css_color.dart'; +import 'package:intl/intl.dart'; +import 'package:json_path/json_path.dart'; +import 'package:timeago/timeago.dart' as timeago; +import 'package:url_launcher/url_launcher.dart'; + +import '../main.dart'; + +import 'lat_lng.dart'; + +export 'lat_lng.dart'; +export 'place.dart'; +export 'uploaded_file.dart'; +export 'flutter_flow_model.dart'; +export 'dart:math' show min, max; +export 'dart:typed_data' show Uint8List; +export 'dart:convert' show jsonEncode, jsonDecode; +export 'package:intl/intl.dart'; +export 'package:page_transition/page_transition.dart'; +export 'nav/nav.dart'; + +T valueOrDefault(T? value, T defaultValue) => + (value is String && value.isEmpty) || value == null ? defaultValue : value; + +String dateTimeFormat(String format, DateTime? dateTime, {String? locale}) { + if (dateTime == null) { + return ''; + } + if (format == 'relative') { + return timeago.format(dateTime, locale: locale, allowFromNow: true); + } + return DateFormat(format, locale).format(dateTime); +} + +Future launchURL(String url) async { + var uri = Uri.parse(url).toString(); + try { + await launch(uri); + } catch (e) { + throw 'Could not launch $uri: $e'; + } +} + +Color colorFromCssString(String color, {Color? defaultColor}) { + try { + return fromCssColor(color); + } catch (_) {} + return defaultColor ?? Colors.black; +} + +enum FormatType { + decimal, + percent, + scientific, + compact, + compactLong, + custom, +} + +enum DecimalType { + automatic, + periodDecimal, + commaDecimal, +} + +String formatNumber( + num? value, { + required FormatType formatType, + DecimalType? decimalType, + String? currency, + bool toLowerCase = false, + String? format, + String? locale, +}) { + if (value == null) { + return ''; + } + var formattedValue = ''; + switch (formatType) { + case FormatType.decimal: + switch (decimalType!) { + case DecimalType.automatic: + formattedValue = NumberFormat.decimalPattern().format(value); + break; + case DecimalType.periodDecimal: + formattedValue = NumberFormat.decimalPattern('en_US').format(value); + break; + case DecimalType.commaDecimal: + formattedValue = NumberFormat.decimalPattern('es_PA').format(value); + break; + } + break; + case FormatType.percent: + formattedValue = NumberFormat.percentPattern().format(value); + break; + case FormatType.scientific: + formattedValue = NumberFormat.scientificPattern().format(value); + if (toLowerCase) { + formattedValue = formattedValue.toLowerCase(); + } + break; + case FormatType.compact: + formattedValue = NumberFormat.compact().format(value); + break; + case FormatType.compactLong: + formattedValue = NumberFormat.compactLong().format(value); + break; + case FormatType.custom: + final hasLocale = locale != null && locale.isNotEmpty; + formattedValue = + NumberFormat(format, hasLocale ? locale : null).format(value); + } + + if (formattedValue.isEmpty) { + return value.toString(); + } + + if (currency != null) { + final currencySymbol = currency.isNotEmpty + ? currency + : NumberFormat.simpleCurrency().format(0.0).substring(0, 1); + formattedValue = '$currencySymbol$formattedValue'; + } + + return formattedValue; +} + +DateTime get getCurrentTimestamp => DateTime.now(); +DateTime dateTimeFromSecondsSinceEpoch(int seconds) { + return DateTime.fromMillisecondsSinceEpoch(seconds * 1000); +} + +extension DateTimeConversionExtension on DateTime { + int get secondsSinceEpoch => (millisecondsSinceEpoch / 1000).round(); +} + +extension DateTimeComparisonOperators on DateTime { + bool operator <(DateTime other) => isBefore(other); + bool operator >(DateTime other) => isAfter(other); + bool operator <=(DateTime other) => this < other || isAtSameMomentAs(other); + bool operator >=(DateTime other) => this > other || isAtSameMomentAs(other); +} + +dynamic getJsonField( + dynamic response, + String jsonPath, [ + bool isForList = false, +]) { + final field = JsonPath(jsonPath).read(response); + if (field.isEmpty) { + return null; + } + if (field.length > 1) { + return field.map((f) => f.value).toList(); + } + final value = field.first.value; + return isForList && value is! Iterable ? [value] : value; +} + +Rect? getWidgetBoundingBox(BuildContext context) { + try { + final renderBox = context.findRenderObject() as RenderBox?; + return renderBox!.localToGlobal(Offset.zero) & renderBox.size; + } catch (_) { + return null; + } +} + +bool get isAndroid => !kIsWeb && Platform.isAndroid; +bool get isiOS => !kIsWeb && Platform.isIOS; +bool get isWeb => kIsWeb; + +const kBreakpointSmall = 479.0; +const kBreakpointMedium = 767.0; +const kBreakpointLarge = 991.0; +bool isMobileWidth(BuildContext context) => + MediaQuery.sizeOf(context).width < kBreakpointSmall; +bool responsiveVisibility({ + required BuildContext context, + bool phone = true, + bool tablet = true, + bool tabletLandscape = true, + bool desktop = true, +}) { + final width = MediaQuery.sizeOf(context).width; + if (width < kBreakpointSmall) { + return phone; + } else if (width < kBreakpointMedium) { + return tablet; + } else if (width < kBreakpointLarge) { + return tabletLandscape; + } else { + return desktop; + } +} + +const kTextValidatorUsernameRegex = r'^[a-zA-Z][a-zA-Z0-9_-]{2,16}$'; +// https://stackoverflow.com/a/201378 +const kTextValidatorEmailRegex = + "^(?:[a-z0-9!#\$%&\'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#\$%&\'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])\$"; +const kTextValidatorWebsiteRegex = + r'(https?:\/\/)?(www\.)[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,10}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)|(https?:\/\/)?(www\.)?(?!ww)[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,10}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)'; + +extension FFTextEditingControllerExt on TextEditingController? { + String get text => this == null ? '' : this!.text; + set text(String newText) => this?.text = newText; +} + +extension IterableExt on Iterable { + List sortedList([S Function(T)? keyOf]) => toList() + ..sort(keyOf == null ? null : ((a, b) => keyOf(a).compareTo(keyOf(b)))); + + List mapIndexed(S Function(int, T) func) => toList() + .asMap() + .map((index, value) => MapEntry(index, func(index, value))) + .values + .toList(); +} + +void setAppLanguage(BuildContext context, String language) => + MyApp.of(context).setLocale(language); + +void setDarkModeSetting(BuildContext context, ThemeMode themeMode) => + MyApp.of(context).setThemeMode(themeMode); + +void showSnackbar( + BuildContext context, + String message, { + bool loading = false, + int duration = 4, +}) { + ScaffoldMessenger.of(context).hideCurrentSnackBar(); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Row( + children: [ + if (loading) + Padding( + padding: EdgeInsetsDirectional.only(end: 10.0), + child: Container( + height: 20, + width: 20, + child: const CircularProgressIndicator( + color: Colors.white, + ), + ), + ), + Text(message), + ], + ), + duration: Duration(seconds: duration), + ), + ); +} + +extension FFStringExt on String { + String maybeHandleOverflow({int? maxChars, String replacement = ''}) => + maxChars != null && length > maxChars + ? replaceRange(maxChars, null, replacement) + : this; +} + +extension ListFilterExt on Iterable { + List get withoutNulls => where((s) => s != null).map((e) => e!).toList(); +} + +extension ListDivideExt on Iterable { + Iterable> get enumerate => toList().asMap().entries; + + List divide(Widget t) => isEmpty + ? [] + : (enumerate.map((e) => [e.value, t]).expand((i) => i).toList() + ..removeLast()); + + List around(Widget t) => addToStart(t).addToEnd(t); + + List addToStart(Widget t) => + enumerate.map((e) => e.value).toList()..insert(0, t); + + List addToEnd(Widget t) => + enumerate.map((e) => e.value).toList()..add(t); + + List paddingTopEach(double val) => + map((w) => Padding(padding: EdgeInsets.only(top: val), child: w)) + .toList(); +} + +extension StatefulWidgetExtensions on State { + /// Check if the widget exist before safely setting state. + void safeSetState(VoidCallback fn) { + if (mounted) { + // ignore: invalid_use_of_protected_member + setState(fn); + } + } +} diff --git a/sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/flutter_flow_widgets.dart b/sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/flutter_flow_widgets.dart new file mode 100644 index 000000000..ed5427149 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/flutter_flow_widgets.dart @@ -0,0 +1,242 @@ +import 'package:font_awesome_flutter/font_awesome_flutter.dart'; +import 'package:flutter/material.dart'; +import 'package:auto_size_text/auto_size_text.dart'; + +class FFButtonOptions { + const FFButtonOptions({ + this.textStyle, + this.elevation, + this.height, + this.width, + this.padding, + this.color, + this.disabledColor, + this.disabledTextColor, + this.splashColor, + this.iconSize, + this.iconColor, + this.iconPadding, + this.borderRadius, + this.borderSide, + this.hoverColor, + this.hoverBorderSide, + this.hoverTextColor, + this.hoverElevation, + this.maxLines, + }); + + final TextStyle? textStyle; + final double? elevation; + final double? height; + final double? width; + final EdgeInsetsGeometry? padding; + final Color? color; + final Color? disabledColor; + final Color? disabledTextColor; + final int? maxLines; + final Color? splashColor; + final double? iconSize; + final Color? iconColor; + final EdgeInsetsGeometry? iconPadding; + final BorderRadius? borderRadius; + final BorderSide? borderSide; + final Color? hoverColor; + final BorderSide? hoverBorderSide; + final Color? hoverTextColor; + final double? hoverElevation; +} + +class FFButtonWidget extends StatefulWidget { + const FFButtonWidget({ + Key? key, + required this.text, + required this.onPressed, + this.icon, + this.iconData, + required this.options, + this.showLoadingIndicator = true, + }) : super(key: key); + + final String text; + final Widget? icon; + final IconData? iconData; + final Function()? onPressed; + final FFButtonOptions options; + final bool showLoadingIndicator; + + @override + State createState() => _FFButtonWidgetState(); +} + +class _FFButtonWidgetState extends State { + bool loading = false; + + int get maxLines => widget.options.maxLines ?? 1; + + @override + Widget build(BuildContext context) { + Widget textWidget = loading + ? Center( + child: Container( + width: 23, + height: 23, + child: CircularProgressIndicator( + valueColor: AlwaysStoppedAnimation( + widget.options.textStyle!.color ?? Colors.white, + ), + ), + ), + ) + : AutoSizeText( + widget.text, + style: widget.options.textStyle?.withoutColor(), + maxLines: maxLines, + overflow: TextOverflow.ellipsis, + ); + + final onPressed = widget.onPressed != null + ? (widget.showLoadingIndicator + ? () async { + if (loading) { + return; + } + setState(() => loading = true); + try { + await widget.onPressed!(); + } finally { + if (mounted) { + setState(() => loading = false); + } + } + } + : () => widget.onPressed!()) + : null; + + ButtonStyle style = ButtonStyle( + shape: MaterialStateProperty.resolveWith( + (states) { + if (states.contains(MaterialState.hovered) && + widget.options.hoverBorderSide != null) { + return RoundedRectangleBorder( + borderRadius: + widget.options.borderRadius ?? BorderRadius.circular(8), + side: widget.options.hoverBorderSide!, + ); + } + return RoundedRectangleBorder( + borderRadius: + widget.options.borderRadius ?? BorderRadius.circular(8), + side: widget.options.borderSide ?? BorderSide.none, + ); + }, + ), + foregroundColor: MaterialStateProperty.resolveWith( + (states) { + if (states.contains(MaterialState.disabled) && + widget.options.disabledTextColor != null) { + return widget.options.disabledTextColor; + } + if (states.contains(MaterialState.hovered) && + widget.options.hoverTextColor != null) { + return widget.options.hoverTextColor; + } + return widget.options.textStyle?.color; + }, + ), + backgroundColor: MaterialStateProperty.resolveWith( + (states) { + if (states.contains(MaterialState.disabled) && + widget.options.disabledColor != null) { + return widget.options.disabledColor; + } + if (states.contains(MaterialState.hovered) && + widget.options.hoverColor != null) { + return widget.options.hoverColor; + } + return widget.options.color; + }, + ), + overlayColor: MaterialStateProperty.resolveWith((states) { + if (states.contains(MaterialState.pressed)) { + return widget.options.splashColor; + } + return widget.options.hoverColor == null ? null : Colors.transparent; + }), + padding: MaterialStateProperty.all(widget.options.padding ?? + const EdgeInsets.symmetric(horizontal: 12.0, vertical: 4.0)), + elevation: MaterialStateProperty.resolveWith( + (states) { + if (states.contains(MaterialState.hovered) && + widget.options.hoverElevation != null) { + return widget.options.hoverElevation!; + } + return widget.options.elevation; + }, + ), + ); + + if ((widget.icon != null || widget.iconData != null) && !loading) { + return Container( + height: widget.options.height, + width: widget.options.width, + child: ElevatedButton.icon( + icon: Padding( + padding: widget.options.iconPadding ?? EdgeInsets.zero, + child: widget.icon ?? + FaIcon( + widget.iconData, + size: widget.options.iconSize, + color: widget.options.iconColor ?? + widget.options.textStyle!.color, + ), + ), + label: textWidget, + onPressed: onPressed, + style: style, + ), + ); + } + + return Container( + height: widget.options.height, + width: widget.options.width, + child: ElevatedButton( + onPressed: onPressed, + style: style, + child: textWidget, + ), + ); + } +} + +extension _WithoutColorExtension on TextStyle { + TextStyle withoutColor() => TextStyle( + inherit: inherit, + color: null, + backgroundColor: backgroundColor, + fontSize: fontSize, + fontWeight: fontWeight, + fontStyle: fontStyle, + letterSpacing: letterSpacing, + wordSpacing: wordSpacing, + textBaseline: textBaseline, + height: height, + leadingDistribution: leadingDistribution, + locale: locale, + foreground: foreground, + background: background, + shadows: shadows, + fontFeatures: fontFeatures, + decoration: decoration, + decorationColor: decorationColor, + decorationStyle: decorationStyle, + decorationThickness: decorationThickness, + debugLabel: debugLabel, + fontFamily: fontFamily, + fontFamilyFallback: fontFamilyFallback, + // The _package field is private so unfortunately we can't set it here, + // but it's almost always unset anyway. + // package: _package, + overflow: overflow, + ); +} diff --git a/sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/internationalization.dart b/sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/internationalization.dart new file mode 100644 index 000000000..f9ea25892 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/internationalization.dart @@ -0,0 +1,107 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/foundation.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +const _kLocaleStorageKey = '__locale_key__'; + +class FFLocalizations { + FFLocalizations(this.locale); + + final Locale locale; + + static FFLocalizations of(BuildContext context) => + Localizations.of(context, FFLocalizations)!; + + static List languages() => ['en']; + + static late SharedPreferences _prefs; + static Future initialize() async => + _prefs = await SharedPreferences.getInstance(); + static Future storeLocale(String locale) => + _prefs.setString(_kLocaleStorageKey, locale); + static Locale? getStoredLocale() { + final locale = _prefs.getString(_kLocaleStorageKey); + return locale != null && locale.isNotEmpty ? createLocale(locale) : null; + } + + String get languageCode => locale.toString(); + String? get languageShortCode => + _languagesWithShortCode.contains(locale.toString()) + ? '${locale.toString()}_short' + : null; + int get languageIndex => languages().contains(languageCode) + ? languages().indexOf(languageCode) + : 0; + + String getText(String key) => + (kTranslationsMap[key] ?? {})[locale.toString()] ?? ''; + + String getVariableText({ + String? enText = '', + }) => + [enText][languageIndex] ?? ''; + + static const Set _languagesWithShortCode = { + 'ar', + 'az', + 'ca', + 'cs', + 'da', + 'de', + 'dv', + 'en', + 'es', + 'et', + 'fi', + 'fr', + 'gr', + 'he', + 'hi', + 'hu', + 'it', + 'km', + 'ku', + 'mn', + 'ms', + 'no', + 'pt', + 'ro', + 'ru', + 'rw', + 'sv', + 'th', + 'uk', + 'vi', + }; +} + +class FFLocalizationsDelegate extends LocalizationsDelegate { + const FFLocalizationsDelegate(); + + @override + bool isSupported(Locale locale) { + final language = locale.toString(); + return FFLocalizations.languages().contains( + language.endsWith('_') + ? language.substring(0, language.length - 1) + : language, + ); + } + + @override + Future load(Locale locale) => + SynchronousFuture(FFLocalizations(locale)); + + @override + bool shouldReload(FFLocalizationsDelegate old) => false; +} + +Locale createLocale(String language) => language.contains('_') + ? Locale.fromSubtags( + languageCode: language.split('_').first, + scriptCode: language.split('_').last, + ) + : Locale(language); + +final kTranslationsMap = + >>[].reduce((a, b) => a..addAll(b)); diff --git a/sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/lat_lng.dart b/sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/lat_lng.dart new file mode 100644 index 000000000..9e7b8ea81 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/lat_lng.dart @@ -0,0 +1,19 @@ +class LatLng { + const LatLng(this.latitude, this.longitude); + final double latitude; + final double longitude; + + @override + String toString() => 'LatLng(lat: $latitude, lng: $longitude)'; + + String serialize() => '$latitude,$longitude'; + + @override + int get hashCode => latitude.hashCode + longitude.hashCode; + + @override + bool operator ==(other) => + other is LatLng && + latitude == other.latitude && + longitude == other.longitude; +} diff --git a/sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/nav/nav.dart b/sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/nav/nav.dart new file mode 100644 index 000000000..901fc85ee --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/nav/nav.dart @@ -0,0 +1,231 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:page_transition/page_transition.dart'; +import 'package:provider/provider.dart'; + +import '/index.dart'; +import '/main.dart'; +import '/flutter_flow/flutter_flow_theme.dart'; +import '/flutter_flow/lat_lng.dart'; +import '/flutter_flow/place.dart'; +import '/flutter_flow/flutter_flow_util.dart'; +import 'serialization_util.dart'; + +export 'package:go_router/go_router.dart'; +export 'serialization_util.dart'; + +const kTransitionInfoKey = '__transition_info__'; + +class AppStateNotifier extends ChangeNotifier { + AppStateNotifier._(); + + static AppStateNotifier? _instance; + static AppStateNotifier get instance => _instance ??= AppStateNotifier._(); + + bool showSplashImage = true; + + void stopShowingSplashImage() { + showSplashImage = false; + notifyListeners(); + } +} + +GoRouter createRouter(AppStateNotifier appStateNotifier) => GoRouter( + initialLocation: '/', + debugLogDiagnostics: true, + refreshListenable: appStateNotifier, + errorBuilder: (context, state) => HomePageWidget(), + routes: [ + FFRoute( + name: '_initialize', + path: '/', + builder: (context, _) => HomePageWidget(), + ), + FFRoute( + name: 'HomePage', + path: '/homePage', + builder: (context, params) => HomePageWidget(), + ), + FFRoute( + name: 'PrebuiltPage', + path: '/prebuiltPage', + builder: (context, params) => PrebuiltPageWidget(), + ) + ].map((r) => r.toRoute(appStateNotifier)).toList(), + ); + +extension NavParamExtensions on Map { + Map get withoutNulls => Map.fromEntries( + entries + .where((e) => e.value != null) + .map((e) => MapEntry(e.key, e.value!)), + ); +} + +extension NavigationExtensions on BuildContext { + void safePop() { + // If there is only one route on the stack, navigate to the initial + // page instead of popping. + if (canPop()) { + pop(); + } else { + go('/'); + } + } +} + +extension _GoRouterStateExtensions on GoRouterState { + Map get extraMap => + extra != null ? extra as Map : {}; + Map get allParams => {} + ..addAll(pathParameters) + ..addAll(queryParameters) + ..addAll(extraMap); + TransitionInfo get transitionInfo => extraMap.containsKey(kTransitionInfoKey) + ? extraMap[kTransitionInfoKey] as TransitionInfo + : TransitionInfo.appDefault(); +} + +class FFParameters { + FFParameters(this.state, [this.asyncParams = const {}]); + + final GoRouterState state; + final Map Function(String)> asyncParams; + + Map futureParamValues = {}; + + // Parameters are empty if the params map is empty or if the only parameter + // present is the special extra parameter reserved for the transition info. + bool get isEmpty => + state.allParams.isEmpty || + (state.extraMap.length == 1 && + state.extraMap.containsKey(kTransitionInfoKey)); + bool isAsyncParam(MapEntry param) => + asyncParams.containsKey(param.key) && param.value is String; + bool get hasFutures => state.allParams.entries.any(isAsyncParam); + Future completeFutures() => Future.wait( + state.allParams.entries.where(isAsyncParam).map( + (param) async { + final doc = await asyncParams[param.key]!(param.value) + .onError((_, __) => null); + if (doc != null) { + futureParamValues[param.key] = doc; + return true; + } + return false; + }, + ), + ).onError((_, __) => [false]).then((v) => v.every((e) => e)); + + dynamic getParam( + String paramName, + ParamType type, [ + bool isList = false, + ]) { + if (futureParamValues.containsKey(paramName)) { + return futureParamValues[paramName]; + } + if (!state.allParams.containsKey(paramName)) { + return null; + } + final param = state.allParams[paramName]; + // Got parameter from `extras`, so just directly return it. + if (param is! String) { + return param; + } + // Return serialized value. + return deserializeParam( + param, + type, + isList, + ); + } +} + +class FFRoute { + const FFRoute({ + required this.name, + required this.path, + required this.builder, + this.requireAuth = false, + this.asyncParams = const {}, + this.routes = const [], + }); + + final String name; + final String path; + final bool requireAuth; + final Map Function(String)> asyncParams; + final Widget Function(BuildContext, FFParameters) builder; + final List routes; + + GoRoute toRoute(AppStateNotifier appStateNotifier) => GoRoute( + name: name, + path: path, + pageBuilder: (context, state) { + final ffParams = FFParameters(state, asyncParams); + final page = ffParams.hasFutures + ? FutureBuilder( + future: ffParams.completeFutures(), + builder: (context, _) => builder(context, ffParams), + ) + : builder(context, ffParams); + final child = page; + + final transitionInfo = state.transitionInfo; + return transitionInfo.hasTransition + ? CustomTransitionPage( + key: state.pageKey, + child: child, + transitionDuration: transitionInfo.duration, + transitionsBuilder: PageTransition( + type: transitionInfo.transitionType, + duration: transitionInfo.duration, + reverseDuration: transitionInfo.duration, + alignment: transitionInfo.alignment, + child: child, + ).transitionsBuilder, + ) + : MaterialPage(key: state.pageKey, child: child); + }, + routes: routes, + ); +} + +class TransitionInfo { + const TransitionInfo({ + required this.hasTransition, + this.transitionType = PageTransitionType.fade, + this.duration = const Duration(milliseconds: 300), + this.alignment, + }); + + final bool hasTransition; + final PageTransitionType transitionType; + final Duration duration; + final Alignment? alignment; + + static TransitionInfo appDefault() => TransitionInfo(hasTransition: false); +} + +class RootPageContext { + const RootPageContext(this.isRootPage, [this.errorRoute]); + final bool isRootPage; + final String? errorRoute; + + static bool isInactiveRootPage(BuildContext context) { + final rootPageContext = context.read(); + final isRootPage = rootPageContext?.isRootPage ?? false; + final location = GoRouter.of(context).location; + return isRootPage && + location != '/' && + location != rootPageContext?.errorRoute; + } + + static Widget wrap(Widget child, {String? errorRoute}) => Provider.value( + value: RootPageContext(true, errorRoute), + child: child, + ); +} diff --git a/sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/nav/serialization_util.dart b/sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/nav/serialization_util.dart new file mode 100644 index 000000000..192f92c5d --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/nav/serialization_util.dart @@ -0,0 +1,204 @@ +import 'dart:convert'; + +import 'package:flutter/material.dart'; +import 'package:from_css_color/from_css_color.dart'; + +import '../../flutter_flow/lat_lng.dart'; +import '../../flutter_flow/place.dart'; +import '../../flutter_flow/uploaded_file.dart'; + +/// SERIALIZATION HELPERS + +String dateTimeRangeToString(DateTimeRange dateTimeRange) { + final startStr = dateTimeRange.start.millisecondsSinceEpoch.toString(); + final endStr = dateTimeRange.end.millisecondsSinceEpoch.toString(); + return '$startStr|$endStr'; +} + +String placeToString(FFPlace place) => jsonEncode({ + 'latLng': place.latLng.serialize(), + 'name': place.name, + 'address': place.address, + 'city': place.city, + 'state': place.state, + 'country': place.country, + 'zipCode': place.zipCode, + }); + +String uploadedFileToString(FFUploadedFile uploadedFile) => + uploadedFile.serialize(); + +String? serializeParam( + dynamic param, + ParamType paramType, [ + bool isList = false, +]) { + try { + if (param == null) { + return null; + } + if (isList) { + final serializedValues = (param as Iterable) + .map((p) => serializeParam(p, paramType, false)) + .where((p) => p != null) + .map((p) => p!) + .toList(); + return json.encode(serializedValues); + } + switch (paramType) { + case ParamType.int: + return param.toString(); + case ParamType.double: + return param.toString(); + case ParamType.String: + return param; + case ParamType.bool: + return param ? 'true' : 'false'; + case ParamType.DateTime: + return (param as DateTime).millisecondsSinceEpoch.toString(); + case ParamType.DateTimeRange: + return dateTimeRangeToString(param as DateTimeRange); + case ParamType.LatLng: + return (param as LatLng).serialize(); + case ParamType.Color: + return (param as Color).toCssString(); + case ParamType.FFPlace: + return placeToString(param as FFPlace); + case ParamType.FFUploadedFile: + return uploadedFileToString(param as FFUploadedFile); + case ParamType.JSON: + return json.encode(param); + + default: + return null; + } + } catch (e) { + print('Error serializing parameter: $e'); + return null; + } +} + +/// END SERIALIZATION HELPERS + +/// DESERIALIZATION HELPERS + +DateTimeRange? dateTimeRangeFromString(String dateTimeRangeStr) { + final pieces = dateTimeRangeStr.split('|'); + if (pieces.length != 2) { + return null; + } + return DateTimeRange( + start: DateTime.fromMillisecondsSinceEpoch(int.parse(pieces.first)), + end: DateTime.fromMillisecondsSinceEpoch(int.parse(pieces.last)), + ); +} + +LatLng? latLngFromString(String latLngStr) { + final pieces = latLngStr.split(','); + if (pieces.length != 2) { + return null; + } + return LatLng( + double.parse(pieces.first.trim()), + double.parse(pieces.last.trim()), + ); +} + +FFPlace placeFromString(String placeStr) { + final serializedData = jsonDecode(placeStr) as Map; + final data = { + 'latLng': serializedData.containsKey('latLng') + ? latLngFromString(serializedData['latLng'] as String) + : const LatLng(0.0, 0.0), + 'name': serializedData['name'] ?? '', + 'address': serializedData['address'] ?? '', + 'city': serializedData['city'] ?? '', + 'state': serializedData['state'] ?? '', + 'country': serializedData['country'] ?? '', + 'zipCode': serializedData['zipCode'] ?? '', + }; + return FFPlace( + latLng: data['latLng'] as LatLng, + name: data['name'] as String, + address: data['address'] as String, + city: data['city'] as String, + state: data['state'] as String, + country: data['country'] as String, + zipCode: data['zipCode'] as String, + ); +} + +FFUploadedFile uploadedFileFromString(String uploadedFileStr) => + FFUploadedFile.deserialize(uploadedFileStr); + +enum ParamType { + int, + double, + String, + bool, + DateTime, + DateTimeRange, + LatLng, + Color, + FFPlace, + FFUploadedFile, + JSON, +} + +dynamic deserializeParam( + String? param, + ParamType paramType, + bool isList, +) { + try { + if (param == null) { + return null; + } + if (isList) { + final paramValues = json.decode(param); + if (paramValues is! Iterable || paramValues.isEmpty) { + return null; + } + return paramValues + .where((p) => p is String) + .map((p) => p as String) + .map((p) => deserializeParam(p, paramType, false)) + .where((p) => p != null) + .map((p) => p! as T) + .toList(); + } + switch (paramType) { + case ParamType.int: + return int.tryParse(param); + case ParamType.double: + return double.tryParse(param); + case ParamType.String: + return param; + case ParamType.bool: + return param == 'true'; + case ParamType.DateTime: + final milliseconds = int.tryParse(param); + return milliseconds != null + ? DateTime.fromMillisecondsSinceEpoch(milliseconds) + : null; + case ParamType.DateTimeRange: + return dateTimeRangeFromString(param); + case ParamType.LatLng: + return latLngFromString(param); + case ParamType.Color: + return fromCssColor(param); + case ParamType.FFPlace: + return placeFromString(param); + case ParamType.FFUploadedFile: + return uploadedFileFromString(param); + case ParamType.JSON: + return json.decode(param); + + default: + return null; + } + } catch (e) { + print('Error deserializing parameter: $e'); + return null; + } +} diff --git a/sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/place.dart b/sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/place.dart new file mode 100644 index 000000000..e3589b3bc --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/place.dart @@ -0,0 +1,46 @@ +import 'lat_lng.dart'; + +class FFPlace { + const FFPlace({ + this.latLng = const LatLng(0.0, 0.0), + this.name = '', + this.address = '', + this.city = '', + this.state = '', + this.country = '', + this.zipCode = '', + }); + + final LatLng latLng; + final String name; + final String address; + final String city; + final String state; + final String country; + final String zipCode; + + @override + String toString() => '''FFPlace( + latLng: $latLng, + name: $name, + address: $address, + city: $city, + state: $state, + country: $country, + zipCode: $zipCode, + )'''; + + @override + int get hashCode => latLng.hashCode; + + @override + bool operator ==(other) => + other is FFPlace && + latLng == other.latLng && + name == other.name && + address == other.address && + city == other.city && + state == other.state && + country == other.country && + zipCode == other.zipCode; +} diff --git a/sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/uploaded_file.dart b/sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/uploaded_file.dart new file mode 100644 index 000000000..2dfd2ff17 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/lib/flutter_flow/uploaded_file.dart @@ -0,0 +1,68 @@ +import 'dart:convert'; +import 'dart:typed_data' show Uint8List; + +class FFUploadedFile { + const FFUploadedFile({ + this.name, + this.bytes, + this.height, + this.width, + this.blurHash, + }); + + final String? name; + final Uint8List? bytes; + final double? height; + final double? width; + final String? blurHash; + + @override + String toString() => + 'FFUploadedFile(name: $name, bytes: ${bytes?.length ?? 0}, height: $height, width: $width, blurHash: $blurHash,)'; + + String serialize() => jsonEncode( + { + 'name': name, + 'bytes': bytes, + 'height': height, + 'width': width, + 'blurHash': blurHash, + }, + ); + + static FFUploadedFile deserialize(String val) { + final serializedData = jsonDecode(val) as Map; + final data = { + 'name': serializedData['name'] ?? '', + 'bytes': serializedData['bytes'] ?? Uint8List.fromList([]), + 'height': serializedData['height'], + 'width': serializedData['width'], + 'blurHash': serializedData['blurHash'], + }; + return FFUploadedFile( + name: data['name'] as String, + bytes: Uint8List.fromList(data['bytes'].cast().toList()), + height: data['height'] as double?, + width: data['width'] as double?, + blurHash: data['blurHash'] as String?, + ); + } + + @override + int get hashCode => Object.hash( + name, + bytes, + height, + width, + blurHash, + ); + + @override + bool operator ==(other) => + other is FFUploadedFile && + name == other.name && + bytes == other.bytes && + height == other.height && + width == other.width && + blurHash == other.blurHash; +} diff --git a/sample apps/flutterflow-prebuilt-quickstart/lib/index.dart b/sample apps/flutterflow-prebuilt-quickstart/lib/index.dart new file mode 100644 index 000000000..a0e633a80 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/lib/index.dart @@ -0,0 +1,3 @@ +// Export pages +export '/pages/home_page/home_page_widget.dart' show HomePageWidget; +export '/pages/prebuilt_page/prebuilt_page_widget.dart' show PrebuiltPageWidget; diff --git a/sample apps/flutterflow-prebuilt-quickstart/lib/main.dart b/sample apps/flutterflow-prebuilt-quickstart/lib/main.dart new file mode 100644 index 000000000..4bdeea0e8 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/lib/main.dart @@ -0,0 +1,78 @@ +import 'package:flutter/gestures.dart'; +import 'package:flutter/material.dart'; + +import 'package:flutter_localizations/flutter_localizations.dart'; +import 'package:flutter_web_plugins/url_strategy.dart'; +import 'flutter_flow/flutter_flow_theme.dart'; +import 'flutter_flow/flutter_flow_util.dart'; +import 'flutter_flow/internationalization.dart'; +import 'flutter_flow/nav/nav.dart'; +import 'index.dart'; + +void main() async { + WidgetsFlutterBinding.ensureInitialized(); + usePathUrlStrategy(); + + await FlutterFlowTheme.initialize(); + + runApp(MyApp()); +} + +class MyApp extends StatefulWidget { + // This widget is the root of your application. + @override + State createState() => _MyAppState(); + + static _MyAppState of(BuildContext context) => + context.findAncestorStateOfType<_MyAppState>()!; +} + +class _MyAppState extends State { + Locale? _locale; + ThemeMode _themeMode = FlutterFlowTheme.themeMode; + + late AppStateNotifier _appStateNotifier; + late GoRouter _router; + + @override + void initState() { + super.initState(); + + _appStateNotifier = AppStateNotifier.instance; + _router = createRouter(_appStateNotifier); + } + + void setLocale(String language) { + setState(() => _locale = createLocale(language)); + } + + void setThemeMode(ThemeMode mode) => setState(() { + _themeMode = mode; + FlutterFlowTheme.saveThemeMode(mode); + }); + + @override + Widget build(BuildContext context) { + return MaterialApp.router( + title: 'hms-room-kit-sample', + localizationsDelegates: [ + FFLocalizationsDelegate(), + GlobalMaterialLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + GlobalCupertinoLocalizations.delegate, + ], + locale: _locale, + supportedLocales: const [Locale('en', '')], + theme: ThemeData( + brightness: Brightness.light, + scrollbarTheme: ScrollbarThemeData(), + ), + darkTheme: ThemeData( + brightness: Brightness.dark, + scrollbarTheme: ScrollbarThemeData(), + ), + themeMode: _themeMode, + routerConfig: _router, + ); + } +} diff --git a/sample apps/flutterflow-prebuilt-quickstart/lib/pages/home_page/home_page_model.dart b/sample apps/flutterflow-prebuilt-quickstart/lib/pages/home_page/home_page_model.dart new file mode 100644 index 000000000..24216fb29 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/lib/pages/home_page/home_page_model.dart @@ -0,0 +1,26 @@ +import '/flutter_flow/flutter_flow_theme.dart'; +import '/flutter_flow/flutter_flow_util.dart'; +import '/flutter_flow/flutter_flow_widgets.dart'; +import 'home_page_widget.dart' show HomePageWidget; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:provider/provider.dart'; + +class HomePageModel extends FlutterFlowModel { + /// State fields for stateful widgets in this page. + + final unfocusNode = FocusNode(); + + /// Initialization and disposal methods. + + void initState(BuildContext context) {} + + void dispose() { + unfocusNode.dispose(); + } + + /// Action blocks are added here. + + /// Additional helper methods are added here. +} diff --git a/sample apps/flutterflow-prebuilt-quickstart/lib/pages/home_page/home_page_widget.dart b/sample apps/flutterflow-prebuilt-quickstart/lib/pages/home_page/home_page_widget.dart new file mode 100644 index 000000000..49299752a --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/lib/pages/home_page/home_page_widget.dart @@ -0,0 +1,110 @@ +import 'package:hms_room_kit_sample/index.dart'; + +import '/flutter_flow/flutter_flow_theme.dart'; +import '/flutter_flow/flutter_flow_util.dart'; +import '/flutter_flow/flutter_flow_widgets.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:provider/provider.dart'; +import 'home_page_model.dart'; +export 'home_page_model.dart'; + +class HomePageWidget extends StatefulWidget { + const HomePageWidget({Key? key}) : super(key: key); + + @override + _HomePageWidgetState createState() => _HomePageWidgetState(); +} + +class _HomePageWidgetState extends State { + late HomePageModel _model; + + final scaffoldKey = GlobalKey(); + + @override + void initState() { + super.initState(); + _model = createModel(context, () => HomePageModel()); + } + + @override + void dispose() { + _model.dispose(); + + super.dispose(); + } + + @override + Widget build(BuildContext context) { + if (isiOS) { + SystemChrome.setSystemUIOverlayStyle( + SystemUiOverlayStyle( + statusBarBrightness: Theme.of(context).brightness, + systemStatusBarContrastEnforced: true, + ), + ); + } + + return GestureDetector( + onTap: () => _model.unfocusNode.canRequestFocus + ? FocusScope.of(context).requestFocus(_model.unfocusNode) + : FocusScope.of(context).unfocus(), + child: Scaffold( + key: scaffoldKey, + backgroundColor: FlutterFlowTheme.of(context).primaryBackground, + appBar: AppBar( + backgroundColor: FlutterFlowTheme.of(context).primary, + automaticallyImplyLeading: false, + title: Text( + 'Page Title', + style: FlutterFlowTheme.of(context).headlineMedium.override( + fontFamily: 'Outfit', + color: Colors.white, + fontSize: 22, + ), + ), + actions: [], + centerTitle: false, + elevation: 2, + ), + body: SafeArea( + top: true, + child: Column( + mainAxisSize: MainAxisSize.max, + children: [ + Expanded( + child: Align( + alignment: AlignmentDirectional(0.00, 0.00), + child: FFButtonWidget( + onPressed: () async { + Navigator.of(context).push(MaterialPageRoute(builder: (context)=> const PrebuiltPageWidget())); + }, + text: 'Join', + options: FFButtonOptions( + height: 40, + padding: EdgeInsetsDirectional.fromSTEB(24, 0, 24, 0), + iconPadding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 0), + color: FlutterFlowTheme.of(context).primary, + textStyle: + FlutterFlowTheme.of(context).titleSmall.override( + fontFamily: 'Readex Pro', + color: Colors.white, + ), + elevation: 3, + borderSide: BorderSide( + color: Colors.transparent, + width: 1, + ), + borderRadius: BorderRadius.circular(8), + ), + ), + ), + ), + ], + ), + ), + ), + ); + } +} diff --git a/sample apps/flutterflow-prebuilt-quickstart/lib/pages/prebuilt_page/prebuilt_page_model.dart b/sample apps/flutterflow-prebuilt-quickstart/lib/pages/prebuilt_page/prebuilt_page_model.dart new file mode 100644 index 000000000..97fe31f21 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/lib/pages/prebuilt_page/prebuilt_page_model.dart @@ -0,0 +1,28 @@ +import '/flutter_flow/flutter_flow_theme.dart'; +import '/flutter_flow/flutter_flow_util.dart'; +import '/flutter_flow/flutter_flow_widgets.dart'; +import '/custom_code/widgets/index.dart' as custom_widgets; +import 'prebuilt_page_widget.dart' show PrebuiltPageWidget; +import 'package:flutter/material.dart'; +import 'package:flutter/scheduler.dart'; +import 'package:flutter/services.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:provider/provider.dart'; + +class PrebuiltPageModel extends FlutterFlowModel { + /// State fields for stateful widgets in this page. + + final unfocusNode = FocusNode(); + + /// Initialization and disposal methods. + + void initState(BuildContext context) {} + + void dispose() { + unfocusNode.dispose(); + } + + /// Action blocks are added here. + + /// Additional helper methods are added here. +} diff --git a/sample apps/flutterflow-prebuilt-quickstart/lib/pages/prebuilt_page/prebuilt_page_widget.dart b/sample apps/flutterflow-prebuilt-quickstart/lib/pages/prebuilt_page/prebuilt_page_widget.dart new file mode 100644 index 000000000..77819e145 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/lib/pages/prebuilt_page/prebuilt_page_widget.dart @@ -0,0 +1,65 @@ +import '/flutter_flow/flutter_flow_theme.dart'; +import '/flutter_flow/flutter_flow_util.dart'; +import '/flutter_flow/flutter_flow_widgets.dart'; +import '/custom_code/widgets/index.dart' as custom_widgets; +import 'package:flutter/material.dart'; +import 'package:flutter/scheduler.dart'; +import 'package:flutter/services.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:provider/provider.dart'; + +import 'prebuilt_page_model.dart'; +export 'prebuilt_page_model.dart'; + +class PrebuiltPageWidget extends StatefulWidget { + const PrebuiltPageWidget({Key? key}) : super(key: key); + + @override + _PrebuiltPageWidgetState createState() => _PrebuiltPageWidgetState(); +} + +class _PrebuiltPageWidgetState extends State { + late PrebuiltPageModel _model; + + final scaffoldKey = GlobalKey(); + + @override + void initState() { + super.initState(); + _model = createModel(context, () => PrebuiltPageModel()); + + // On page load action. + // SchedulerBinding.instance.addPostFrameCallback((_) async { + // context.pop(); + // }); + } + + @override + void dispose() { + _model.dispose(); + + super.dispose(); + } + + @override + Widget build(BuildContext context) { + if (isiOS) { + SystemChrome.setSystemUIOverlayStyle( + SystemUiOverlayStyle( + statusBarBrightness: Theme.of(context).brightness, + systemStatusBarContrastEnforced: true, + ), + ); + } + + return GestureDetector( + onTap: () => _model.unfocusNode.canRequestFocus + ? FocusScope.of(context).requestFocus(_model.unfocusNode) + : FocusScope.of(context).unfocus(), + child: Scaffold( + key: scaffoldKey, + backgroundColor: FlutterFlowTheme.of(context).primaryBackground, + body: custom_widgets.TestPrebuilt(), + ), + ); + }} diff --git a/sample apps/flutterflow-prebuilt-quickstart/pubspec.lock b/sample apps/flutterflow-prebuilt-quickstart/pubspec.lock new file mode 100644 index 000000000..c259ef983 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/pubspec.lock @@ -0,0 +1,959 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + archive: + dependency: transitive + description: + name: archive + sha256: "7b875fd4a20b165a3084bd2d210439b22ebc653f21cea4842729c0c30c82596b" + url: "https://pub.dev" + source: hosted + version: "3.4.9" + args: + dependency: transitive + description: + name: args + sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596 + url: "https://pub.dev" + source: hosted + version: "2.4.2" + async: + dependency: transitive + description: + name: async + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + url: "https://pub.dev" + source: hosted + version: "2.11.0" + auto_size_text: + dependency: "direct main" + description: + name: auto_size_text + sha256: "3f5261cd3fb5f2a9ab4e2fc3fba84fd9fcaac8821f20a1d4e71f557521b22599" + url: "https://pub.dev" + source: hosted + version: "3.0.0" + badges: + dependency: transitive + description: + name: badges + sha256: a7b6bbd60dce418df0db3058b53f9d083c22cdb5132a052145dc267494df0b84 + url: "https://pub.dev" + source: hosted + version: "3.1.2" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + bot_toast: + dependency: transitive + description: + name: bot_toast + sha256: "6b93030a99a98335b8827ecd83021e92e885ffc61d261d3825ffdecdd17f3bdf" + url: "https://pub.dev" + source: hosted + version: "4.1.3" + cached_network_image: + dependency: "direct main" + description: + name: cached_network_image + sha256: e764e48ef036cabdf84319ba7b8b5871b6b43266e14de787cb43f77639089ae5 + url: "https://pub.dev" + source: hosted + version: "3.2.1" + cached_network_image_platform_interface: + dependency: transitive + description: + name: cached_network_image_platform_interface + sha256: "8e2b5befefec5063bee8f209fda21751f6328d405d4237c70f21104568b2fee7" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + cached_network_image_web: + dependency: transitive + description: + name: cached_network_image_web + sha256: d4351c7eb16767df129b0474a5ebc4e028870379c063e8ba265a56aa00831e70 + url: "https://pub.dev" + source: hosted + version: "1.0.1" + characters: + dependency: transitive + description: + name: characters + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + url: "https://pub.dev" + source: hosted + version: "1.3.0" + clock: + dependency: transitive + description: + name: clock + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" + source: hosted + version: "1.1.1" + collection: + dependency: transitive + description: + name: collection + sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 + url: "https://pub.dev" + source: hosted + version: "1.17.2" + convert: + dependency: transitive + description: + name: convert + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" + source: hosted + version: "3.1.1" + cross_file: + dependency: transitive + description: + name: cross_file + sha256: "445db18de832dba8d851e287aff8ccf169bed30d2e94243cb54c7d2f1ed2142c" + url: "https://pub.dev" + source: hosted + version: "0.3.3+6" + crypto: + dependency: transitive + description: + name: crypto + sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + url: "https://pub.dev" + source: hosted + version: "3.0.3" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + sha256: d57953e10f9f8327ce64a508a355f0b1ec902193f66288e8cb5070e7c47eeb2d + url: "https://pub.dev" + source: hosted + version: "1.0.6" + dots_indicator: + dependency: transitive + description: + name: dots_indicator + sha256: "58b6a365744aa62aa1b70c4ea29e5106fbe064f5edaf7e9652e9b856edbfd9bb" + url: "https://pub.dev" + source: hosted + version: "3.0.0" + draggable_widget: + dependency: transitive + description: + name: draggable_widget + sha256: d7f6b1eb9cb79b724b02dc2ac699f82d1ab20b99920b8b1f25812054d72ca803 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + dropdown_button2: + dependency: transitive + description: + name: dropdown_button2 + sha256: b0fe8d49a030315e9eef6c7ac84ca964250155a6224d491c1365061bc974a9e1 + url: "https://pub.dev" + source: hosted + version: "2.3.9" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + ffi: + dependency: transitive + description: + name: ffi + sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + file: + dependency: transitive + description: + name: file + sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" + url: "https://pub.dev" + source: hosted + version: "7.0.0" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_animate: + dependency: "direct main" + description: + name: flutter_animate + sha256: f611a67082d4c5ff9b8b7737ec7e675a22af70a94c8c3c22109f14b078d4d2bf + url: "https://pub.dev" + source: hosted + version: "4.1.1+1" + flutter_blurhash: + dependency: transitive + description: + name: flutter_blurhash + sha256: "05001537bd3fac7644fa6558b09ec8c0a3f2eba78c0765f88912882b1331a5c6" + url: "https://pub.dev" + source: hosted + version: "0.7.0" + flutter_cache_manager: + dependency: "direct main" + description: + name: flutter_cache_manager + sha256: "8207f27539deb83732fdda03e259349046a39a4c767269285f449ade355d54ba" + url: "https://pub.dev" + source: hosted + version: "3.3.1" + flutter_foreground_task: + dependency: transitive + description: + name: flutter_foreground_task + sha256: e48d2d810a2d643362e64de41146ed8e95d4dd282bae6abbb32309d9f0bf5d67 + url: "https://pub.dev" + source: hosted + version: "6.1.2" + flutter_linkify: + dependency: transitive + description: + name: flutter_linkify + sha256: "74669e06a8f358fee4512b4320c0b80e51cffc496607931de68d28f099254073" + url: "https://pub.dev" + source: hosted + version: "6.0.0" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: ad76540d21c066228ee3f9d1dad64a9f7e46530e8bb7c85011a88bc1fd874bc5 + url: "https://pub.dev" + source: hosted + version: "3.0.0" + flutter_localizations: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_svg: + dependency: transitive + description: + name: flutter_svg + sha256: d39e7f95621fc84376bc0f7d504f05c3a41488c562f4a8ad410569127507402c + url: "https://pub.dev" + source: hosted + version: "2.0.9" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + focus_detector: + dependency: transitive + description: + name: focus_detector + sha256: "05e32d9dd378cd54f1a3f9ce813c05156f28eb83f8e68f5bf1a37e9cdb21af1c" + url: "https://pub.dev" + source: hosted + version: "2.0.1" + font_awesome_flutter: + dependency: "direct main" + description: + name: font_awesome_flutter + sha256: "7811c8b4e7455d2f60ef30022a6a07376de2858b47aecbe2861965b348fe2016" + url: "https://pub.dev" + source: hosted + version: "10.1.0" + from_css_color: + dependency: "direct main" + description: + name: from_css_color + sha256: "5e4d1795c8d10af94e51dd97636b2a29170a132be1aceba103e9866028d20823" + url: "https://pub.dev" + source: hosted + version: "2.0.0" + go_router: + dependency: "direct main" + description: + name: go_router + sha256: "00d1b67d6e9fa443331da229084dd3eb04407f5a2dff22940bd7bba6af5722c3" + url: "https://pub.dev" + source: hosted + version: "7.1.1" + google_fonts: + dependency: "direct main" + description: + name: google_fonts + sha256: f0b8d115a13ecf827013ec9fc883390ccc0e87a96ed5347a3114cac177ef18e8 + url: "https://pub.dev" + source: hosted + version: "6.1.0" + hms_room_kit: + dependency: "direct main" + description: + name: hms_room_kit + sha256: "8f116867f9d9fdc87eae56c47bdad5ba5a5d8e03f3c218cdbbf9dfb134a33c39" + url: "https://pub.dev" + source: hosted + version: "1.0.6" + hmssdk_flutter: + dependency: transitive + description: + name: hmssdk_flutter + sha256: "70d00820ab5cb02c03c2d4f41be70dd9dc3406521a469b8989d1e650232efd9a" + url: "https://pub.dev" + source: hosted + version: "1.9.3" + http: + dependency: "direct main" + description: + name: http + sha256: "759d1a329847dd0f39226c688d3e06a6b8679668e350e2891a6474f8b4bb8525" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" + intl: + dependency: "direct main" + description: + name: intl + sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + url: "https://pub.dev" + source: hosted + version: "0.18.1" + iregexp: + dependency: transitive + description: + name: iregexp + sha256: "0bab197b31adad22c32eef580cda11338dad24ee0e46187d994baef9acee7564" + url: "https://pub.dev" + source: hosted + version: "0.1.1" + js: + dependency: transitive + description: + name: js + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 + url: "https://pub.dev" + source: hosted + version: "0.6.7" + json_path: + dependency: "direct main" + description: + name: json_path + sha256: "0a38c33d6ab3a71795c4ce1867c6278bf1e87dabbc1f707307a00efc55750d9c" + url: "https://pub.dev" + source: hosted + version: "0.6.2" + linkify: + dependency: transitive + description: + name: linkify + sha256: "4139ea77f4651ab9c315b577da2dd108d9aa0bd84b5d03d33323f1970c645832" + url: "https://pub.dev" + source: hosted + version: "5.0.0" + lints: + dependency: "direct dev" + description: + name: lints + sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 + url: "https://pub.dev" + source: hosted + version: "3.0.0" + logging: + dependency: transitive + description: + name: logging + sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + lottie: + dependency: transitive + description: + name: lottie + sha256: a93542cc2d60a7057255405f62252533f8e8956e7e06754955669fd32fb4b216 + url: "https://pub.dev" + source: hosted + version: "2.7.0" + matcher: + dependency: transitive + description: + name: matcher + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + url: "https://pub.dev" + source: hosted + version: "0.12.16" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + url: "https://pub.dev" + source: hosted + version: "0.5.0" + maybe_just_nothing: + dependency: transitive + description: + name: maybe_just_nothing + sha256: "0c06326e26d08f6ed43247404376366dc4d756cef23a4f1db765f546224c35e0" + url: "https://pub.dev" + source: hosted + version: "0.5.3" + meta: + dependency: transitive + description: + name: meta + sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" + url: "https://pub.dev" + source: hosted + version: "1.9.1" + mime: + dependency: transitive + description: + name: mime + sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e + url: "https://pub.dev" + source: hosted + version: "1.0.4" + nested: + dependency: transitive + description: + name: nested + sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + octo_image: + dependency: transitive + description: + name: octo_image + sha256: "107f3ed1330006a3bea63615e81cf637433f5135a52466c7caa0e7152bca9143" + url: "https://pub.dev" + source: hosted + version: "1.0.2" + page_transition: + dependency: "direct main" + description: + name: page_transition + sha256: "12776be3ffb2d080095e912fc4e820a85be8846913a93261148b75256b9c7691" + url: "https://pub.dev" + source: hosted + version: "2.0.4" + path: + dependency: transitive + description: + name: path + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + url: "https://pub.dev" + source: hosted + version: "1.8.3" + path_parsing: + dependency: transitive + description: + name: path_parsing + sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf + url: "https://pub.dev" + source: hosted + version: "1.0.1" + path_provider: + dependency: "direct main" + description: + name: path_provider + sha256: "3087813781ab814e4157b172f1a11c46be20179fcc9bea043e0fba36bc0acaa2" + url: "https://pub.dev" + source: hosted + version: "2.0.15" + path_provider_android: + dependency: "direct main" + description: + name: path_provider_android + sha256: da97262be945a72270513700a92b39dd2f4a54dad55d061687e2e37a6390366a + url: "https://pub.dev" + source: hosted + version: "2.0.25" + path_provider_foundation: + dependency: "direct main" + description: + name: path_provider_foundation + sha256: ad4c4d011830462633f03eb34445a45345673dfd4faf1ab0b4735fbd93b19183 + url: "https://pub.dev" + source: hosted + version: "2.2.2" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: ffbb8cc9ed2c9ec0e4b7a541e56fd79b138e8f47d2fb86815f15358a349b3b57 + url: "https://pub.dev" + source: hosted + version: "2.1.11" + path_provider_platform_interface: + dependency: "direct main" + description: + name: path_provider_platform_interface + sha256: "57585299a729335f1298b43245842678cb9f43a6310351b18fb577d6e33165ec" + url: "https://pub.dev" + source: hosted + version: "2.0.6" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: "1cb68ba4cd3a795033de62ba1b7b4564dace301f952de6bfb3cd91b202b6ee96" + url: "https://pub.dev" + source: hosted + version: "2.1.7" + permission_handler: + dependency: transitive + description: + name: permission_handler + sha256: "284a66179cabdf942f838543e10413246f06424d960c92ba95c84439154fcac8" + url: "https://pub.dev" + source: hosted + version: "11.0.1" + permission_handler_android: + dependency: transitive + description: + name: permission_handler_android + sha256: f9fddd3b46109bd69ff3f9efa5006d2d309b7aec0f3c1c5637a60a2d5659e76e + url: "https://pub.dev" + source: hosted + version: "11.1.0" + permission_handler_apple: + dependency: transitive + description: + name: permission_handler_apple + sha256: "99e220bce3f8877c78e4ace901082fb29fa1b4ebde529ad0932d8d664b34f3f5" + url: "https://pub.dev" + source: hosted + version: "9.1.4" + permission_handler_platform_interface: + dependency: transitive + description: + name: permission_handler_platform_interface + sha256: "6760eb5ef34589224771010805bea6054ad28453906936f843a8cc4d3a55c4a4" + url: "https://pub.dev" + source: hosted + version: "3.12.0" + permission_handler_windows: + dependency: transitive + description: + name: permission_handler_windows + sha256: cc074aace208760f1eee6aa4fae766b45d947df85bc831cde77009cdb4720098 + url: "https://pub.dev" + source: hosted + version: "0.1.3" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: cb3798bef7fc021ac45b308f4b51208a152792445cce0448c9a4ba5879dd8750 + url: "https://pub.dev" + source: hosted + version: "5.4.0" + platform: + dependency: transitive + description: + name: platform + sha256: "0a279f0707af40c890e80b1e9df8bb761694c074ba7e1d4ab1bc4b728e200b59" + url: "https://pub.dev" + source: hosted + version: "3.1.3" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: da3fdfeccc4d4ff2da8f8c556704c08f912542c5fb3cf2233ed75372384a034d + url: "https://pub.dev" + source: hosted + version: "2.1.6" + pointycastle: + dependency: transitive + description: + name: pointycastle + sha256: "7c1e5f0d23c9016c5bbd8b1473d0d3fb3fc851b876046039509e18e0c7485f2c" + url: "https://pub.dev" + source: hosted + version: "3.7.3" + provider: + dependency: "direct main" + description: + name: provider + sha256: "9a96a0a19b594dbc5bf0f1f27d2bc67d5f95957359b461cd9feb44ed6ae75096" + url: "https://pub.dev" + source: hosted + version: "6.1.1" + rfc_6901: + dependency: transitive + description: + name: rfc_6901 + sha256: "8d97680dada633146cf75ab9382f2ce2b7e4bd63ceecd867416cf43b5832b988" + url: "https://pub.dev" + source: hosted + version: "0.1.1" + rxdart: + dependency: transitive + description: + name: rxdart + sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" + url: "https://pub.dev" + source: hosted + version: "0.27.7" + share_plus: + dependency: transitive + description: + name: share_plus + sha256: f74fc3f1cbd99f39760182e176802f693fa0ec9625c045561cfad54681ea93dd + url: "https://pub.dev" + source: hosted + version: "7.2.1" + share_plus_platform_interface: + dependency: transitive + description: + name: share_plus_platform_interface + sha256: df08bc3a07d01f5ea47b45d03ffcba1fa9cd5370fb44b3f38c70e42cced0f956 + url: "https://pub.dev" + source: hosted + version: "3.3.1" + shared_preferences: + dependency: "direct main" + description: + name: shared_preferences + sha256: "81429e4481e1ccfb51ede496e916348668fd0921627779233bd24cc3ff6abd02" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + shared_preferences_android: + dependency: "direct main" + description: + name: shared_preferences_android + sha256: "8304d8a1f7d21a429f91dee552792249362b68a331ac5c3c1caf370f658873f6" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + shared_preferences_foundation: + dependency: transitive + description: + name: shared_preferences_foundation + sha256: "7bf53a9f2d007329ee6f3df7268fd498f8373602f943c975598bbb34649b62a7" + url: "https://pub.dev" + source: hosted + version: "2.3.4" + shared_preferences_ios: + dependency: "direct main" + description: + name: shared_preferences_ios + sha256: "585a14cefec7da8c9c2fb8cd283a3bb726b4155c0952afe6a0caaa7b2272de34" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + shared_preferences_linux: + dependency: transitive + description: + name: shared_preferences_linux + sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + shared_preferences_platform_interface: + dependency: "direct main" + description: + name: shared_preferences_platform_interface + sha256: d4ec5fc9ebb2f2e056c617112aa75dcf92fc2e4faaf2ae999caa297473f75d8a + url: "https://pub.dev" + source: hosted + version: "2.3.1" + shared_preferences_web: + dependency: "direct main" + description: + name: shared_preferences_web + sha256: "74083203a8eae241e0de4a0d597dbedab3b8fef5563f33cf3c12d7e93c655ca5" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + shared_preferences_windows: + dependency: transitive + description: + name: shared_preferences_windows + sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + url: "https://pub.dev" + source: hosted + version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" + sqflite: + dependency: "direct main" + description: + name: sqflite + sha256: "500d6fec583d2c021f2d25a056d96654f910662c64f836cd2063167b8f1fa758" + url: "https://pub.dev" + source: hosted + version: "2.2.6" + sqflite_common: + dependency: transitive + description: + name: sqflite_common + sha256: bb4738f15b23352822f4c42a531677e5c6f522e079461fd240ead29d8d8a54a6 + url: "https://pub.dev" + source: hosted + version: "2.5.0+2" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + url: "https://pub.dev" + source: hosted + version: "1.11.0" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + synchronized: + dependency: transitive + description: + name: synchronized + sha256: "5fcbd27688af6082f5abd611af56ee575342c30e87541d0245f7ff99faa02c60" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + test_api: + dependency: transitive + description: + name: test_api + sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" + url: "https://pub.dev" + source: hosted + version: "0.6.0" + timeago: + dependency: "direct main" + description: + name: timeago + sha256: "3a38963615f1178531afa7177199e37522cf8dcbd93a144b597e32ec6d84bd9f" + url: "https://pub.dev" + source: hosted + version: "3.2.2" + tuple: + dependency: transitive + description: + name: tuple + sha256: a97ce2013f240b2f3807bcbaf218765b6f301c3eff91092bcfa23a039e7dd151 + url: "https://pub.dev" + source: hosted + version: "2.0.2" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c + url: "https://pub.dev" + source: hosted + version: "1.3.2" + url_launcher: + dependency: "direct main" + description: + name: url_launcher + sha256: eb1e00ab44303d50dd487aab67ebc575456c146c6af44422f9c13889984c00f3 + url: "https://pub.dev" + source: hosted + version: "6.1.11" + url_launcher_android: + dependency: "direct main" + description: + name: url_launcher_android + sha256: a52628068d282d01a07cd86e6ba99e497aa45ce8c91159015b2416907d78e411 + url: "https://pub.dev" + source: hosted + version: "6.0.27" + url_launcher_ios: + dependency: "direct main" + description: + name: url_launcher_ios + sha256: "9af7ea73259886b92199f9e42c116072f05ff9bea2dcb339ab935dfc957392c2" + url: "https://pub.dev" + source: hosted + version: "6.1.4" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: b651aad005e0cb06a01dbd84b428a301916dc75f0e7ea6165f80057fee2d8e8e + url: "https://pub.dev" + source: hosted + version: "3.0.6" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: b55486791f666e62e0e8ff825e58a023fd6b1f71c49926483f1128d3bbd8fe88 + url: "https://pub.dev" + source: hosted + version: "3.0.7" + url_launcher_platform_interface: + dependency: "direct main" + description: + name: url_launcher_platform_interface + sha256: "6c9ca697a5ae218ce56cece69d46128169a58aa8653c1b01d26fcd4aad8c4370" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: "043a0d5b83bb7a6f4f0040763dd7b23e75c8e1979cc1109a545054b6dcf56d17" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "95fef3129dc7cfaba2bc3d5ba2e16063bb561fc6d78e63eee16162bc70029069" + url: "https://pub.dev" + source: hosted + version: "3.0.8" + uuid: + dependency: transitive + description: + name: uuid + sha256: df5a4d8f22ee4ccd77f8839ac7cb274ebc11ef9adcce8b92be14b797fe889921 + url: "https://pub.dev" + source: hosted + version: "4.2.1" + vector_graphics: + dependency: transitive + description: + name: vector_graphics + sha256: "0f0c746dd2d6254a0057218ff980fc7f5670fd0fcf5e4db38a490d31eed4ad43" + url: "https://pub.dev" + source: hosted + version: "1.1.9+1" + vector_graphics_codec: + dependency: transitive + description: + name: vector_graphics_codec + sha256: "0edf6d630d1bfd5589114138ed8fada3234deacc37966bec033d3047c29248b7" + url: "https://pub.dev" + source: hosted + version: "1.1.9+1" + vector_graphics_compiler: + dependency: transitive + description: + name: vector_graphics_compiler + sha256: d24333727332d9bd20990f1483af4e09abdb9b1fc7c3db940b56ab5c42790c26 + url: "https://pub.dev" + source: hosted + version: "1.1.9+1" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + visibility_detector: + dependency: transitive + description: + name: visibility_detector + sha256: ec932527913f32f65aa01d3a393504240b9e9021ecc77123f017755605e48832 + url: "https://pub.dev" + source: hosted + version: "0.2.2" + web: + dependency: transitive + description: + name: web + sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 + url: "https://pub.dev" + source: hosted + version: "0.1.4-beta" + win32: + dependency: transitive + description: + name: win32 + sha256: "7c99c0e1e2fa190b48d25c81ca5e42036d5cac81430ef249027d97b0935c553f" + url: "https://pub.dev" + source: hosted + version: "5.1.0" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: "589ada45ba9e39405c198fe34eb0f607cddb2108527e658136120892beac46d2" + url: "https://pub.dev" + source: hosted + version: "1.0.3" + xml: + dependency: transitive + description: + name: xml + sha256: "5bc72e1e45e941d825fd7468b9b4cc3b9327942649aeb6fc5cdbf135f0a86e84" + url: "https://pub.dev" + source: hosted + version: "6.3.0" +sdks: + dart: ">=3.1.0 <4.0.0" + flutter: ">=3.13.0" diff --git a/sample apps/flutterflow-prebuilt-quickstart/pubspec.yaml b/sample apps/flutterflow-prebuilt-quickstart/pubspec.yaml new file mode 100644 index 000000000..e6c488ac8 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/pubspec.yaml @@ -0,0 +1,115 @@ +name: hms_room_kit_sample +description: A new Flutter project. + +# The following line prevents the package from being accidentally published to +# pub.dev using `pub publish`. This is preferred for private packages. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev + +# The following defines the version and build number for your application. +# A version number is three numbers separated by dots, like 1.2.43 +# followed by an optional build number separated by a +. +# Both the version and the builder number may be overridden in flutter +# build by specifying --build-name and --build-number, respectively. +# In Android, build-name is used as versionName while build-number used as versionCode. +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning +# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +version: 1.0.0+1 + +environment: + sdk: ">=3.0.0 <4.0.0" + +dependencies: + flutter: + sdk: flutter + flutter_localizations: + sdk: flutter + auto_size_text: 3.0.0 + cached_network_image: 3.2.1 + flutter_animate: 4.1.1+1 + flutter_cache_manager: ^3.3.1 + font_awesome_flutter: 10.1.0 + from_css_color: 2.0.0 + go_router: 7.1.1 + google_fonts: ^6.1.0 + hms_room_kit: ^1.0.5 + http: ^1.0.0 + intl: 0.18.1 + json_path: 0.6.2 + page_transition: 2.0.4 + path_provider: ^2.0.15 + path_provider_android: 2.0.25 + path_provider_foundation: 2.2.2 + path_provider_platform_interface: 2.0.6 + provider: ^6.0.5 + shared_preferences: ^2.2.0 + shared_preferences_android: 2.1.0 + shared_preferences_ios: 2.1.1 + shared_preferences_platform_interface: ^2.3.0 + shared_preferences_web: 2.1.0 + sqflite: 2.2.6 + timeago: 3.2.2 + url_launcher: 6.1.11 + url_launcher_android: 6.0.27 + url_launcher_ios: 6.1.4 + url_launcher_platform_interface: 2.1.2 + + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^1.0.0 + +dev_dependencies: + flutter_lints: 3.0.0 + lints: 3.0.0 + + flutter_test: + sdk: flutter + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter. +flutter: + + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + + # To add assets to your application, add an assets section, like this: + assets: + - assets/fonts/ + - assets/images/ + - assets/videos/ + - assets/audios/ + - assets/lottie_animations/ + - assets/rive_animations/ + - assets/pdfs/ + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/assets-and-images/#resolution-aware. + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/assets-and-images/#from-packages + + # To add custom fonts to your application, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts from package dependencies, + # see https://flutter.dev/custom-fonts/#from-packages diff --git a/sample apps/flutterflow-prebuilt-quickstart/test/widget_test.dart b/sample apps/flutterflow-prebuilt-quickstart/test/widget_test.dart new file mode 100644 index 000000000..2933e648e --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/test/widget_test.dart @@ -0,0 +1,17 @@ +// This is a basic Flutter widget test. +// +// To perform an interaction with a widget in your test, use the WidgetTester +// utility that Flutter provides. For example, you can send tap and scroll +// gestures. You can also use WidgetTester to find child widgets in the widget +// tree, read text, and verify that the values of widget properties are correct. + +import 'package:flutter_test/flutter_test.dart'; + +import 'package:hms_room_kit_sample/main.dart'; + +void main() { + testWidgets('Counter increments smoke test', (WidgetTester tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(MyApp()); + }); +} diff --git a/sample apps/flutterflow-prebuilt-quickstart/web/favicon.png b/sample apps/flutterflow-prebuilt-quickstart/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..300efaefa7d2bd34a221ffad6d778922d14bceb1 GIT binary patch literal 54361 zcmV)vK$X9VP)UT+(06j1Cepc|y1ITfA(rB+SC2o=lU7$D}J6 zlcfWBIdHqY#N$0x2_F`xe|7Vq1pWcr1nR z`uh9L4{j*Eh@QzUlCD@1L^Ex<85XB+cqrvKy46Si4vut5Dlw&`fI=Z7H$S|l8y08fKA{t8J~p8DP)R~Jjc}O>=zm2TaX3wbCODe%QY%lyZTQ7MawWkZf)#h{_cU^&RXV zGy~Z<;$$6^5{ZfM3HykP;QgtaXlBk{KKF$sj({X^oQzMXnmIe*_r9jwzVPd!XADLXMju1kBLi!pvrv#W6oWUak<6 zows}nu$YLByJkRib!afZ2Bb%`J?l$%A}_ma`A^`r3rRxpNLic&Eb5Wv zmS5dOvp2svPlY`tLL%M==`l4J@hrP?8-S60w_YT_yK916f8Tp$_gV8mAp3)IogywC zBZoNx)`o@UUN_NBj7dt~T9T2;eQ~+z!FRble0&;a4a1C};W~nH!~J$6LTaTzNyU~FJBwRmqSET_1t;O=UnLJzh4_ebQ;YbM+GPe%74GPNmYQKp0o^U z;%*>`#fQgb7Fsvay(t~-Oh@QSvAHqh0Kqw@5QQDo)h77EIQgvV9sm2lTW-XoOs2{@ zTvHd(=ifTuq{5L0zwXN6=taf2ME4{>h-&9V_iLbmjm{Fg zE`^DBPQ@}VA)A{&8gtirX1u+&dkq~mB|T7x95jZ|;+UqEsf*K`9UFmpXl0NY;V-C! zh5L3q)hl~{?hRKy;l!bTxU$)=L|r0}dO;rl(4*uFpMA;?A{PUc1hE8Y7QN zk7(0Vs-%*bFu2KYUB&tIRdm+{4{|S?TPzpe0%)K!?K%53x$O4oj{CcB{Q@%1yJjb5 zSs63zY}5p)*i()-gUigjuBx+e&iUMkh7NV{KhC(DM=)uL&Dk`KJ&S@) z=IB$!kWelK3}#-JO!h6u=_HmAlwb@No?>4mi>7(U0l|ao$<09ovyQIhbVn$O?M|%` zh_DdH_2f0uIIi6qS%fSUApR&xU?>@y)wvp}NL?M#&yYlt*zq*3bnerQClQU5UEJOB zHx?VoV7%g%$f8EDJst#?ZGQShv>Ne7tkGD)Y4bE2GW;Kq;TzlYSlJM-4`X{|vufp) z5#4HBCgD{%z5QkdXzJ<3)oM51{yyQMz-?iI$uJ)Q4UdSe!14I@Gcw1HHzAFdU)Lm{ z(M(4>eu(MOE~$z6wa{Jd#pg4Bug}lR;k$FWtoHP5 zSVVIjWJ2#mNoTUMtUug;F=Du(UuiSnh@@@C()4!4W%cPXH-Y9pqT3p=ND+HjM6W)L zvu=^CKmIRph>JL-D7*WwACyUbT{3f%zhRQVBFY9{CND8p-@l>sAnIUdp7d~@>2_@^ zr)!vK!h+_YU7rHMS+}Og?dFiMf-J-~^ppu*ZrQ+XX4cpjcbVZ22`1OMCYZ|)x(Rcb zr^QmcltrasWlzksuP22}^YYA-T-Tc*U8&XFypbFG_SPPV>kF&FoG7>1N-$_s12`(z@G`hu-c4D!5#dP-}R^qLMlB zm%2zfn8k9NwHy|As&Scll$KU0*TByf)#tsnELZ`ZgvA+RyF3fxc*o5bIqub324>dl ztfT9MyKVKfTU$wD2~GDJE904I%1fkg1+(fZeGYTFsICW7s%^ZJ^IQreoF?|f!EK&G zC|`8{^)1TfXP(s={!oVmjI6qdX5scjchSx_#0n_6_18aVT)KS^>vju0%)?9!`!%Up z)`cIr|Ff==T&S#lNI+B9rF*cjYyO}D--!1KFh3*6_7eGQVHV$>Eo|qlUO=3@ba$XEDO+gSFQJ+I2ruAe>Ok(X>9JdEX?%uZn~Fi{+AxDcNT z2(E(xLDqF)nsLcx?rC3jpKZ>opM_P!EW-`sIV^|ow@ts>;qv8hqf5bcS5G0*B}@AC z%u$p`KKnl-)Q=a3p5k`FApV%2{aCR^Ox^I%Oye>^Pq;e*Kfl?3P;hN zIJCH>82;-MZPhB$5Yd<4t#Y>?iXA0_>qyvrrA!{mkYI8>4{qx@z1qjvYUNiqJZ9~n zuowWryKM0vhtq4JPU?ZF)gWirsQSC)u2o(9tkl*iY7y#()y?UBzf3NR?7G!6uE&#W z+)d2o`$70*NQdfK6*7w*m-pKGDJMBN#QPo5C#W8GU7R*$>DAY$-0&>uDzeAy;8^Be zYdEQ59WGjEac_LPd7MPKw6%^IN7Gk&u8ZiNq-tV^?DBLVYq^;@*>Nv{%_BXQS*{R$ zVvC%EMJx&3!#|tq?KM^+YAC-Ui6#g6d+Mni_{7~;o-f5_CI*F9U)Q5SC!agHOd(>y z`yZyeV0+AZ9`UQ6O&yBJXn1uX7Gq+A88emj*N@>e&AP4v+ypf^(0=DSS-IdQ4mL`p zA69@)Q7F8M%1*0!Hnmt>9gZP6%{(#%|YgYKm62s@uo zR$U4cH8s9maN*6WBoP9v%XzhBG$s{ z;Y7_JSi=q7T*u%5Gu8x?mb!`7o}U7Dan`wDM~Rz%mczJN%f>04u6Nan;D?cL z>d!p+r3X>Q4iZKOce&y>+#j239_?ZmS>Wt4A)Bp~GidD?{9;vz6RYBpYpIjBfP<6h?Tf+fjy>FuH@_ zW;b7~aML5$(uFB9y2IpVGdawU=yr_mFgaw(Xt*^`d}U?NxFju;S7~s|cMQ37@aIeSk8~Ac_yp9wur&N4N>g5ZSH5_`N@<8L z51JoW+@i+!^W7HD_w(Hhw`ba9nmzkr=C*LgIqB%E{OfPQD?7p3>2R1nW{f7$7=4Qs zBpYXM@?@~tfmbjqFqRcJbNAmq=$y>w&BX(<+g4BDS(PSkJ2lf>aqk9hYnNq_tev-< zkA=SpSeoj=;vWw}HNKuUCWGP3IXU4;E!!l2YjMBK{K%v3v>>;-$S|(2u_B2?Z`qIj zJ8g+Z;dTQIZ|=GB-i_eGj+I-R;~BcjX)EPd%kPZet}8f4SOf&Oq`4r^A2&+*+A2ax zMnh)Q5zWog)ux8;hVz8k?w@@c70Ce|cs~(H;k)BJ_u-Cbs>WGb2_j3fvg5u5+2 z(57AguYXxA$A4p?JKW;lab(x7l)f~#s!!+N8pAb8Art#E*pk7G8ho#kh<0zR64_Xf z=jK8qrm@(K^x zH2qHbby|LU5wD%mfiInlW59h5VkqMn%HBq?#*>&jel$j_%h>x<_qL&zrmB<7U4WYo zrcY7gQ;E3T`Iq-QR9hm(@eR>rCK^V6`uYBJ>tLui*I9T1V)ME`tm(4S`1(GDgWis<_I-_;K8o+>+ zlvO6`^_wJg*KHn^g$wc^n$n7+cH<*A2`)A49XQ_Jg%jw%e~$|yLkDvS*>y|Y?O3xc z>se$ZufgD;$H5dR9)?&erK|j@sf=d!tSC>K=b_wRbVs*L>!QN^gmCk%(0O1Ctr9svBveG_7B2(Y%KK+jK^= zNXKl=3DW;ywtebjeUQ*S!we# z+u~ceJx6Uzd)(n~$+M5ESg_gSXfcyCR5MN0I{ZRZEF@){FYqRwQq5r*ZkGA-uDli& zT@?SCWhk_gSol5rvUdru+hVyt{3*^yZ$00Y#c_eETA|Q<(J)jUMvc)d_}8~&+$xwY z1{pD2Px$3k>jeW=aC4Ajcr%!eo`7`}Yh2p79A|lKR9)^gmCfiG3wzW=2iG~c3TEb+ zXEXBmN0!LWdroysp#MV5$Pb+J3Q)#%j!H7rQrB<)_GV==Q;^BKZ~Y=%L^99n@)|Rp zrgH){mS$8CeF3ii<29Bvtn49syehB0q<1E7v(r>GfXd`4P!e`MV6t3$Ay@J^@^b}m zcr&n%eJUphf0OT&2JFM>?LB6_;2xZ2;TDASsAF?f%b=V(t)?QHOuh6@z3G~6R%l18 z9dP}D>l_ZXs4#C`wVMG+=l(mqA%p!yTH}jCOn>eTgOJJko(iAiT@xcqvCW_9v7AQC z$aSlrwAnl59Fxgl{qUJn{cUi5iW0z zY~_u4kJL1Y(RsP(w$iU$aAsDIiDP})7M2QFxED7w8#-lfP;d8TOg8ks|NW*XqWJcV zZ6*v~?hj2x{V|%v=$!QQrRA4b>xgeCBm-!owviY0w`U8twB~QNh4VSpJ0<8nd@+}6 z7J7xP6BQT_Mq@f{6?IoV-%@0Dsydv(u^I&A51aK+v4#EU%P z#|&c09_ZEoLP-=Cs_&}qTUoc}v;LNnV9Ui{p*rW ztBfXdb*Yk*7k$~4NUdeSO7L16M5p}5{K~zcR$ikW)-*7RNV$Ou?INR$HHOos z{66mRCGyM@)O#UUgRLoU=i5&BXf0KaHZyDG-&97IGMisjSSrW7F8dW~rq=b`3COUZXhvGp8EtSJ7GLzXjO;Yd5 z+gTaMk)Kzilozw2GuGz_>iUb~@H`r*_6u8?-F%0os6Rzt*IJnw)2zB<$T`jUT12#; zc?aD-H-_gn23zWijJCk-H|3ctT;$R*b#Z_QzVYGi?^KH15EJoY(E{iZ(<)`OGWv0l z!zJ`zt*7n{G1@Ym^QrVFp%|Y4uzw7UpKksuvJFPf#k}^<@$S?ic*%ZYqjjyD(H*&6 z&RU3yCm|{}Di1058IsW*2A4Cfl23H-i^i$SXbgl8Vj$csnxOMsodf(h&vp05UaAzM zBBMJfuEeVP{4f{({f&=w&5Fh@V|0hfQ5H4+3~l6Z&_+Jyr!3A4>8X0NAKY;dhXYtV z+hqG0+0XfDi;TvdNt<^jCq8RN=q}`L@pC9L8at(b@B=#Tk#oQo!;aB&W(?jr@@zXf z)Z&0+G`8|)*NW5$8$JgN)$v_+8Tw_kCg=Q+r>4|2<7h19erB7$+2(IH z{plvdqJ9=;Y0X|Xn3Dsx<>@JQdak{V>~!jwijMD}l@@-5(yy#ljDGg>{d~8D*GkWK z8ZDlsHQW5nHh;6tpLQSaZax22J&LSH*_1wu+o(OJqT|CK=_}I5$}CzMzV}iLsNmq| zKh0G8eyN4~Hp_^j*bn#J7Plv*sAsx9d~K_DV!te3idXYQ?^8mSE>AygJ?=3R9VRkZ zA^vz<*q$?AfSdCrdpWQ&$-IYd`V@ZuNkzb{k3AYh)a7({PCD=zsWoLd zcxoNED8;=g%Xe0)-`_#R^Y+GRll4Wu!u&(pX=LuIpxjNhJxi(YF;yKHAJh+Us`(H)cUo?{r77YuT6jmLQOm}sso;=+{W zu2E<72R9C7D~sP_=5rvL2ec`ok`ht-Q9OfUr#Zd=Cf`THeS*CK$nv^>Sz<69yW@s+tgNvfvJAu4$QSUI~ zYZhdD#h(l7mVZCWYu40sCF8Qk!K=6jHW1$$sF=1|o)Ldumq}x?Is9NQb?KpB$8(8m z{24VyPnni4xsx=V$;lr0ejEor60R@c^VMN8*WO*x2?7~c@(Ymrqi>#ncWy0DBk$BXEVGo;N~mmd$dxd@lH}h zw8d=9ZaSk``47Bb?@=NtWKuW)Dnj_hMrASwHj0VbjMge4j_djZutPHDrbFzwdGsQZZf08QJ=)Gy$*>CXMj%2sB-|UM6k+7 zijaidbh+T#WG#;a?z->7Hw2ul4mFTUdC<=WKtnSxak=H{1qiXhngbwJ&k)Vk@~YRr zsjGJ!jIO+o_u+?wn^neaGRxd%8?p9mw)vZF{$|tPcUwF%zLK%HW-|`mJ8$)(Ya|ZL zoMjfT2pYkyWzq7RjA#+A7h6Tl_6s#Xv#qlBOk0r~GLe49Jd0=PEN}W-yn51G{DCZc zg6Yh9>u$3KK%;>+$D7Lbn)MW7 z*#M}QtN0?r8qM+>uHEECCCbmZThip+(KM{s!lgQJ4VTFBbhaj}BC3}|0SwCu*C^Dl z(%GY3Gw>?SiBS^?Cr{kK~tH$1@0R*fOJu@M(%t2)O{ z6v}X)n8w`{7kRnrzV~6`p`xQZk&`)_KZdMyy`*|sMjO68fC1VTw|q1=PEYj|O%@$s zAZKrqlDC$G_a;r5z{>=w=2_)bAJzpMT^Spmo9o#rIp$Dqi7BI5)vNCN0R9rGEU#Kw zy4t7rhVb?q-seB^86XO*Xqt~`hoq$Z>c@j})bV;-Bjw!H_kR%UyHB{Ow_6G00u2@5 zks2`g`KR-e$>Y-_Zh;TtAL68_q z$e-?uN&k0q(%X$`Ez~W3poWzvYKS5-ThTuxSGmnBg8Ff;w13%&t+x94V7pz;Ig~kE&FZz z8uV14$nAY;o`@}){#O>TmR7OvpWMV__ZgM*~5k`Zf0rN?t(m5JTW^I}} zVPS?eDlaqGfbEy7@0-B-1b!$`>r+IY#disVwAwR5nd^r&;=b&H<#OwlxFsEz4(gXE zDi6e?#ayG6c9RFgFl&{ODOozejZH;a$Z&l&f2PvL3H|wO45$=lC0UqnTYkG8fV=kG z@+s7~U{#NKMt_#qXxgK~Xk`$F6)b5UzL$O`$toYMj4>$cZ}Ay!?r5B9X)O)!`JXZk zpDJ-{Ak>-5dr36U(Rv;g(LrJz6R>1?!L2zQtqKPz`hRJUXJv4}mygY;o*NeBE8kvS zKJ=0B%s?KyIs43>=hiR6-SR+wHKW)%^B6Tov-}^Nlg3~eQesG3j)~&XU;YWxHRj68 zm3Oa)-lXU);ESJo&3YM(o{SHS>9+(p@R?X@EbrmR9u=*F%&0M%+e9X-$z-C~|IFys_igO% zeRgLtxJFHeH-Xt7{4m9oZZ?pCyjGcIxJwS{&lYG-n>N%wqrzw&YP1jJlF8gA;+c-C z?psf~z)$*hC7@LR(Ylqd6BwO9G(>+%oQhku@q> z$4@Q^w~1Jf%g@JWJ20tu_Nj2K8p1?Q_}N+rRqaH-!@^}sFnt)m-aZ^X^O=m9Aiq)Q zJsSgo&`cC<9H2N; z&vfiP`}HE)N#%D=T^-M4G{lXYy)`aF-}8R`*bN(x3s_(L+zYPZ zh-NNcg`2`0lEz-OV?CS3XdY^GY8xs`gYWuA4mIk@QLg)P*O^S=k4u_5bK?P+#%FKb z(e^*ekm#Ny1O2+AV@Dh~;JO9<=2h3#v5`MbWAqsph1*qR;LX=A1>;oB3MXG0NqbWmz3V|4=?=D% z$YdU^y6_yH>Ngn)ZGz|R+(LYpyg5H9S?@xH1a3<=RO>!oD1Jy}HFFj|(qKJaKhme>${IS6(T3Sw8-d0_e44M7!H7y4(v2%GUS)vsC&eWHs+e0 z$BQ)i9Azy~1tbww+*x+&mFqw{?LPk}m?j4uifK~`9x{iV&g)c}y`h#_Z-XT+m}&V7 z2SAWQ92q;d_CVjZS1VtlKGbamaC93(3l*cdzLs^W%En zaB}d=r9;&7Gfo5j6jgrXj{gAY2nzm;c=b*Zm63~YSH|$!jE05JzCYa-*X%~a89x?J z$lllU0fdywOZLn}%qrZ1yq8DC1a=?^nrP$uS#y;&y|PW>txSl z+3&yS$zLAgRnES411-aySRMZX(9s(FX%3>Xe(<0F7lX=%bqdVzROaSzO7j`G*_Ipt zgSAP-z2csCyHz$a(7N@4w^DNGu8-kaxBoRwbsTVAnGB}kK&wZ&T5AAw#07t<*Tj!C zgj;pgq&)Q>tvDwkWFn7h=_G`Q!*%iK(mU68lMF*C?R37^F_{wz8Vy6w05hxolqA(K zRI}lWpyEggnO{40A1Z@*q0X(lEjojwI530o#n?TU)9vP^>^)I41K{r)_Id1k^GBa^w0 z#}_YYbS*@$ktk{mEjpNuls!$8(Ii9}3xy1;aQs;0q^Zl~?BD5SCcpd5>vH{N+&iRb zRV{>@usndMhrnA`V{k-|@J~}2Om`-e8MVMDaK?rTgMsSWTw5XYZKMw(GH zJyA_o>tPt~cIbO6PE>H`11g=JwbQuK99FDneEeqfIR4BSjcSpBKEoY?9f~O`h;j=b zjnZ2$&ruT{R@IdOu~yg0HV$gTxS3%r9^brjq>k@MIdIb>xV9I@{kid>)B_{Uu#>)= z1L)05&DURFUN0DNdA2g zpLgn*x;YRP7k;B@^44G7J{SoshiQ!ghM^^^L^=;)8EIg;n7$l9rYRLQ1o=dTZ01_{~y5u%(2%$ zoVs^3C~6v@`88GS3eFx4B0G7m_#EIWP%{=Nh7D-7mq*eFDn>-2t=Do{qcKIRF*p0iJ0z zI!iXcJ76}pbnJHF0JpKR2Xej9Ta?fpFdIucb~|z)8INsx-9ue}auON{KdBun(V@A+ z0poz3e{mAJBb|*c9lM=5fVb4oh|T#_`jdrR;ZN;ckq+%04j2b`dDjo^p<{PA(C!?- zEp)L>+PxAT`a2vj4#aU6%yfI`*c}eEI|o*pgZDqVEG-i!7i9V>6L4h+1|}Td#-hAy zKe{WKYW|Gtr?=;59+tjRIevPJS1WxqPQB?Xm2Krj^R#*}jfMH{!AxG#*@8TBZ%i)u ziC(Lsc@^c$4MlK6Vc;x{a&P2mmFdQk<_7#OV4{CuKeeuG-PXdLsW z9Sv(%ddt_!@XPew7LT?W-(86wi$~j!YyOq;9LN;pwU-NW^nt;ZH@pM{|M;XoO+D7& zF4-xx3akkBq*d}lFt0vsqNI3>6O1)hv{B7JYBP=9hDf)W(MZp-Yn2}@(`cb>Y5nx( zXYmYJ7RUVUnYLfoXnKoh>AEqtud_}}&c9XMhlKOE-Itdax~r6NjWVcmQKR`-`q8pi zNR?yeoSf`=NFM6Nq+(+m1IggUO9y1>vaFnQ%3Jv00zWjYS9tO>B5FeEX6c5q-}j+j z`NF=_WXc479=p^G;+=?j^9SXBPI$dEpbehZ+o)T1J75|=tT-Z?S`uFNYw1VJUg1;@_etCLq+~*GR|(J90F+X1yt!1qd&nE|{4>0h zmUoErf^`D8aS)djfQPRiyQa+CcDnR-^PbvJ4`saN0~xvVmId_P04_hGA@i`EM=L&w}RpsSL83zLXk} zreM3Xog2fXlPU`AXnxh7Sq}1q#OF7sR+-2TftAK4Een^X6b%xdJd8~oUDW(<{haV9(9-`uvBuYgtf_( zYsD&mv@A9>AdNEkZJCSim?BdrmFm+*6G6S_>}Mdt2moG0t~6-bq25_f*;PmyvG+D# zNXTvn#-+C_?3G48Gv}99=g!T@H@}E_IKxZU@pHE&>j#GP>we_x*j?<~)_|V1Lr!)- zIOmq-0FrEZ%vwRd9Y`%F z`JGPAPcUZW!aF87P#X|vlQ!CmmSvp!qX5t=v)QrSgsP}_qL6yZ_i1T@`^0ne^3HYh z_>`pb!02bzbPr}@a>;pb%FS2m*T%^!*BL8HXaYLqskKcL$gG$}+XDIrKTpdB8z!qx z{^mi&_}-zf$}>;$t1tHInW`A>TSdXW>-xd!sB~sShLWiw=PG(q>EP#mxN?FrV`;hI z);_F!F#pm?B9jx;d(C;MU9dtRkt2|CD`vren;eo#=pAT z3$kDyzUu3i=ST=YOJveHtcy(y323WJ2hbH7j+4LX*er=o{w(VJh09f6cEF;VK?5a& zlEMw|l!#<}I3xF^h>PvFs7pWeAC+W2sG$n2nU&Md?{%Q|b6{NjmnHpKfch1DJtCxu zG?uC#pne$i_~i}dCOryfohVo8fCRJq=C@O;Y#tJRl+4v35EMH4jr}Ue*o%OnI9nr} zOedJBFSC6W6amXG-W!$>@%B{pc%yE@A(&&xDUta=fh3X zKq^zWD^6DUVGLtBCxhXHh53v`5{7AY2~eeMN*=sBCJ)?|#)^QcJ_;DdPhg30wbhey z#PL%dnE8b(M}M%i==5^Hd$i29yJY3`3o}qNlwT~z_)DA1a?d`Om)-F}KAluEUa&e; z##j9cxZ~*<>diiH+F~7g_D(s>xN|afavvHyUk18G*!jEThQ;!mpH`pz*^sV!9d%mM zQ&nFM!RWK6aX0f(K(NsvFB}#zoS&JI4L*>=b}_zA4(~9YNOvkOpZs*6Y`x=v+<5~( z5X<4m$$2FJk9^`l)GRug@k!^UgN zunD!QZ=BGM7GFtIJ*MR+g*)z>l{tHgOb)h`eWtU53l{auafiJoPd&B_Og9N=OgG6) zU71XePX2U&Y9>gG=^>puNz~1pj9hSAk4)?VJmcYsKa0C;FfYe^`8DifA{_MEvKN;W zo4Mo0@~AI&CAbk{9ndIOdoY)fuk8MUyg835kbzm(>q(E!KU8hguO@S(;~d479h=+v zN~x><)Y5=9#;>|cUy1av>JZF(&6*4SGt`$UK}LJ>XXOuND^MxbsORTY|Ac=0+uI3h z?M%$W0L_lIbRaMLZTFJovy^_O=d(jn`WaZ*VL7riZj7hh0J9mte7e(E9}g#g7Ef0) zoPO*k(<+s#Eq4x=KBH;4cF5J?<}ga>$k+ti55^cy+kV_I`Nv=T@kLdh@KUC8Sk_4j zrJH@1-9SO<9Il5l-_d5e=5H#Et$inD|84snaIG$+g@(^OFLBXrYXkh$rSWqo*fK$9 zFi9EmL{rxHch%K(9?})BG(lya5`fvC{Gsy{Cx1R)buOYCQe(^4TD5Ii3C+d@i!n52 zWZGm-Hp+*_JmM@|LY=dHO&`usS>3FIvF^+DyRc2ISTaTxgM1B*@)<`!akk|7xp_J2 zz!w4m;Z6P^2y~5{QrQFqcR5Q(4d!Zf2um1SSBnEWFTH&^IqRx|1GUc@YY5+uZu2*g zM8oab;`z^h8sF{5F?ZBve$h0Q{48Cx{HQJ1pU&Kk zhE`{^HFU??cg8H%!nLe25XZ}oQ?n?fCShRsHt)=sA3p3lo_)O#Ht3K*y@eIHg&)yEP zaPzlk%QO01$>03^a?Q{3<#QfOfth?lGKG}<>EVp*yw&rv+g4AielE5`6wE`gBz4ls zBq95%4%?j8l$l|!5|riBh)2*FnFL+X{iTb)GcH(9)>|JS3P|;VoC6S_eJUeI9rP^X zGJ^if>Q${yHOfV1L4LaArYl5TRpBa&+PZdMx{d8pRV&ZsIX-_{T;(8BxQ@#oPOxFd zf9`c%vf6Y?j}W9Lg|fN4y!v`t4%`8t_8Z(lbq0zfjDxH;(>fIB>%Q@wuVm3C$V zTKQ4z{K&IJ0N}|wzNRyZTGMWMK$C3-YX7V;Hy$p$y{`yrYjBIdbRZ|keB~v1?umSv zE~t%X4OPA2$F9k&!z!S8+Kz9$5Y$?CrNrD>>2f=HPPYy8T0imuPalorhgEW$A8jkc+|e-q+1x%o=4ZBrncHkj$LC6J`k67e z*+Zpayf|J6xa7{Yu=>LjarR;WIy&@l>fH;{%vs_ z>S5p11~fogqtUlNjlUXf-Ysdfem?yeJfK3Lv*JXdN!pMHr~)Q&&plg^?|peepnmB3 zad8vG)2A(cOIEx|M1{))P0Dbzvk4m;k{T1B-`q+tQ~wLm$_6iKbcA+6t(-e|P`1%%=dLud{xylhXPLcGM@2bqcpm z?|K6|#L$z(Fvs?GS*x~HEePr<(|8guTXH>>RU!&z`tvQ3cf7Mp4n6v9y44%J;)HW% z2<7SmfBMhz884fiOFI}l8=DCCWAtH;fSZY|v(mQhbJEEd2=utA9XSooh!<6l@=nfl zE1GFL3C#xJeH^m-<%jcPL0-r8*rWY&{~fkQt?RD-a#t%2 z&E0sr<${~nl2{HG$ic8a;V6Y?%p>l(bs_u#c60+?F@}@m0C)o1=;#FO5ZF4`rAn8@ z3jL?;0L}Y2)_qq2m!N37SmRnl^BnP4cYjfSe#JYaH)TV2*oIw+ynN;8wdC=CrtwBL z-%sT6NN)G)+1}DM>M&hBE|seF#2h*f$BIvUIw@cM9?pUT%vL|9q}x3wyXF7=Wk7y) z=Bw}}km-++2IrpLsNqse2UZ{En#|mrOW>Uxo z{j6Mh?|Vz$X7*c=ujTJG`#H3;uHWi=aRfK}IHflAPp=?9@ff(jb#hGJ_aR8#T=)V5 z>uM&J>XS3R|Em1u!Nu^RKX?3eN3`@x0qd};y0p^hV|8h!-4=j0F!Sw>sIf-w&*0L) zBABUb;wmeE|FXN@R|K`iwLJJD=$$b4VuHv$LM|ehqfTrp(_VqD-kA=-zwzRSPI0$AosQox0qC1QB zeDS56cOM6bTME~>WU~o5=Fk^#Ns8*y1_-mcwS4*S-vNCS@9g0&y5cpv9IA`bkN_YM z?99XH*(`^zoFxjlz6=vUU!Agg6U^+m1McD)RU;gjgL56KJ_VhUC*>%)@sD}045p<4 zJ!{9DoQa!7sS6tj*(h|gu{rs>_R=NtwLN*~Gl6UktZ!Rz=$-piOfLV`Vw_ads#-o~ zr(#*T?C$a3oapLNm8y{8bqrz0wfb^$myZF=pM5q^sVJEVQvkMj;Y)O+f$9XH8<xIn5jqdTtmDUszfh77Stzq zT${t>DT5b5Ln&pTVY&qL?X$12>$vo7>#@9!>*Jf}2=u{kf$Nv?u<#aA`RFPfIqq1k}`4VXTN%}w3c>C0}X zP*n^zT=8v-k`rjU973J?7uVt-(?ksA0I}uem;h+{KX<2HIO!u@q%qMwQO^9qJWT$U;8|BMbOOjxh?78eUeZfD(3v@@ zbt@YxubNFWX=_!}Qh;Uy+6|a&1Rr#Cv$@j-X19{z4ZBWSQ8I-M?7$cdLVENx>n?ez zbb^if=aKfpvlq(UxDZlLuqjZAOL{J^=7IW`Hv-7H=y^ljxp=$=~xb0NqN# zOkeA`kj$>*nwnvg*>D2rVz1znK-SSWEu(UAw8kU!LyelQ^ZoqflOfu^x zLUBT5huobWNh!vv@fR$+1)x^-Ati@?p_;il!~i5WNf%ML6qg4vR?{6tqTCV%nb4{iA->(lcJNXOf(G+p`7e{0_yuBYPbRG}K+hnt(A zGGLj_FjHCRwm24U&kQr;`_Ww~eWkd*pYN`eo_zN1(Gz z+N7KMuc{bakDPweaLx7VEw+{16VoV0k*vM7J!(O4enKS$(anociltiRTAgT@1`7T?>g`Y(V@65|>gg_(8&-`P(&R&9!mp z-KiI$BrZwM;XTZKhsj&+Phpib=mA-R+5zC2veny&_8qG&>UORjqGn6e>+Fl-S z`?H%kR%M!Kgy`Hrz`Vw(60>lw?sZx;AL-4(5Je++5mC`oCty z54{qxMEFu950$!bpUni-QEAbsg$h7bP6WBdK+}QHl-KF00P20~ zK)!RKhiZqk)@eukul-!~QRfIId7V7BK_W$jJ;>lfC(OZO9oGQcEE_5Q@Vy*Vf>!$q zETysoHR})3Lo(?ygHwovRH1gxErp@8AAIdlj($e=yyrkMSKM)}(k!a=rT*QzcAPTC zho$W`*Xf^_w*E%o?6|5?Eyi04=d8E`FkkzyQ&Q0(uYy}LA6o|I6CsVz7=kRS;2ezn$qvaLV=zA_$P!+)>=C`$loQ=VZjbO0nd7N^wl&iVxp7Z>|CIO2W*{ssoF~ z#I2k8JEwi-x$Gtv$NMIJ}hy>G|^HgHjaBNCAuKn^hhe*6AF6_b}l0P~cfp zds|H>pN4nn!Y4~<5#1FSjoiPF@PhhorH-HYqa29xo4$?So8w7z{%|GHM9SnHdwp&% zs&~tR%fOkVQ6rDCTvMrrd2hfS`;uP+M8z}g&~?3L8+M73xZ8YwD%Q2AnABg`{uelu z05h*(*Vtvx+ji{a!|l0%2aj?#u$7F8Dfc3Et$culudpnjT5W|%7l*o-{Sdt2xzah& zqgjJfvfZ-f0!X-rBSw6}Y$=gyXf6O*e#$9%L|KH~@!;I^W&w4G_W9Rirg0nwP-H_K zbhXQ4R_%%N)=)DHdluI;jo#25R90NKgZ1C|HEut0ik$O&YQR;b%0(#qbEu_W{8cg1 zg$!@|eo*mPr{XxQDP>JkHL@63-CLHJp}k!U@E$Wy zSHi!73UejaDjLvZAms(Eh4eb5d&&#;A%YxkZD5E z4^Ax#-$KGypQKbhY3#y)xV#@C{SnItYbBpU;Z}JY)#{M>auoJOPVzHJ4$azD-yNDx_CGi{ibysfYj}zeurqm!JL& znPp!!UWjQo`d4m(XSXyFZq||5)z=rxQ&j##SnIX{DL3Y(Ts3M21bM5vv^;%;>+#g8&*^{E2-%lp9vn0(_ftdkDOQ67q_vLp+L zR*zPa`sA9!Pi$!h5|Ld$oYq9(Fm$|y5%57sOM$?+sRm!Z$bhpyRi_O_+x9ddqrPpe zf_XUalF_L*Gg6ZF-oWN<5pw@ulP7@ek&&vsN!SXvlmea9N3M}>0HP}piknQR_&7Xx zjEJSXvR;K&oeU66a{jx|eHS34&@%6yc5kT}~nm>RPea!uem>bmEci=?t8-=>|5?5(^ z3tjn`+V%}66}UVmNcB1P)xnJ5r;=i$#23v7w}V)JK4v6;{!bl(pVI~MO9nmvOpw{W zUsBl)(ST*17Gb-hKaAOnLJBwA*Y%=4iEx#V zkJU1VhG)P9k8SZ!+waeCNhiX5Xg+1yrlfKfE7dpCHB?p<)=rT17DmX_68m=A^519Iy_o(w3)B)pHSejR+@k3ISRvgtyxj50 z8^0{sLqB+Gz-A)s;n%aPv&1(<-^IXP6h@beQ ze6u8RIe9;Y;7F-?rBA`MZGQ`&7V$`Ltch19__Q>)2&REsVn6MyPJ2E<3H&z(|5v#d zRar_0FhkFf=kIQ&qme#yycB@G_4XWE*Z-|Rr}uHw^~s9Sk7LYnTG!9d`}*3h?Q}oY z&gqvQWE_LtLr6(b>$;u;&wSkc=@Mec^+fCser1+DsDxjZIlfGuq2Hk!Km-rUVAQT8 z%W5qrEy|^qP>qy*$3`RKC5;{Vx27gzUwygRTQ50M8)Z%;JYH?8hZVRG>7KBrCJ*9o zmIFPkI9pD_)$q0kQ2Lm%lgaVpO~-_2Zvsa9d5)yYtsl_0*{`FyQ-@FInNp?RrZ602 zD^$z2bp9zRhds5IRB0nxQb!h$voHS1x?7!h3{$%9(L}Q9jY&9)7{Tx2($~-x{Or40 zgq53)Rd6s+s!4czlebfAgWYe8FI@S96t`D)-8mfes-fZCrrNhThs3#xipP|C?e|Ce z)pH(;TMY{mz;P6~{=RS(J++If{VX+3#`n=!k3Q8MoPzrH{rjz$Z=dVY>d4CbUr-u0`;P}a=jD=SO;vF$ir27@>y z+xXNWnBkNxx8v>wmm`yAobbx;k9>yxhrafzz2WG$!t)G#zpZ9o+SmV(AEMn3slFur za4p%o>cqIEV4y{6cBI(#<23}h`~Kp(*F%NO0qIN$c%j2-5@b^hcNHp>X~-3=@Zl((y9=?2|~~P2oOpOLZ_l0 zpR187L-PRL)pajv(W%_Tgkgz$K=7%HccYA@>ZylbHja5x%|T&Xl7)|3-AhDF`S%dG z8^rT*nHFwLj?hd~t-0Kkl2>-xkrWVJZ=?vdKXP#^5vfTXLg+Mt>)(Dqd6#EQ=8^hW z`MRD;+a+x8g!*ft3ULFg0Tsu%7g~=rGcMU}$1VTug%*AmDX4ZOC9zjaTmFa#OyHK( z{P=h&HQgb0FkyP9Qetj)Yqg1b(itOle-#+@ym4I9mLJ#KgdT!I8$^)T4-uGwZuDv^ zk%aD=h?tKIZvZsRXm+SD8PHiEusS)B1Dne0Ew`d1kgUNJu*8SEJ*UgG9aEf-!fjF! zJ{3HR25eL!+HZ|qL!o5j6-h>^APM=X27)LMD-EVTE-WOKSAGZ(dMIVMQS))_2F8wO z!#D$p*NTQ8q_KePzblP??O<{Ikd+0`_%U&=RQJ$EUR`z6KoVg{g?_Oj-RyR{_tg(3 z=qtf_!fLa(-iULaBI52ZAAwk_-JU*zXV-dc5j zpjZ9UdDlfzI`Dqh4#Scg^I6`YSpJBfjg;6;H73dfTl8nb)43i(XKGNoNR09CA-}d8 zi6N`*a?QqC%qCGo|1!NWYC-FdO0{NL39n{_DkCuis*Vj`p=Rx++jslEU`1&qutut2 z(M*86kp=5-QsTi8q8jJuY#$WQ0L9ZSUZYq+sGUF0;YkIe+3l?NN?~LaS1}R&z9=8~ zPj6(sY539D5mi{fPm+W|zm%qz;`LUx6hR=BZ1m3>1 zUwGhM_O!`vGJs?CIa<~cbCHU}?m4R-p52hRI2=GUJH%q5kH5604ZICQbTneq4fCHD zN#b)mnjqGIGE0hx55HcoUP18^x_A1s3%X_>44l_>2}jQ6V0~?KIWS1CsOWjJBUw~3UGuCKoqu*?hl7= zI2nHL3seY`2&HQ<`G&Pf87U(p6lR>iQ+>K$Voc+;vlf;4lQ1rtNyx*4YUg;M+TP$x zMg;bkaxuk{8h!JQMoui|bm_qXVRZ7qPWAATn_lP6EVnHisvCOGAzgPxFvJA)sQF!E z=6f+VA|nVFlZ(`arUipY>safkA&no3PEc*BJzxVx_Gq?;IWDC--uidsWpCsD3r{fT zp`)4+RMG^4ONVRqTTp=le+Kg*06-*aoy;q1Y@wf=TKxm%{dW4K;v-VM6Yn8yH6Fnz ziUAFEgbT)B*>_=ktnPXCaw7ONLD;va*uV%@q0CXy2%MeH<(F_WZQF9hK&eA~Su^g> zpW;4*B}`E&zPQJ6Q`uZ(zDcer*4T?M`B zynas;lO@mukzFOWsABbkr%GOH_{R1ub&x3^WkZQ@1&8_`(MbCFMHDCb^nfXu=lPf= zhf(IJmQ79Y6I<}z8Jbsf>!d(qDTji9NK6!pSPEqe|NHvA%?T35|}r zG^P;|s*YdW#BzT0KqM=2v*U{@m{B}X7?$bs%uJjTD3!3X%e&Jwdw#SU-g{LLv3Na* z`ct^oxq~hxFs0zOeUfN^VX5YazmKQri~8f;(Fs=>&%^g1a-I9VIWkC96~OnRrS8*5 zhRM440{N}Y0>fNwJBp7%+BCs%rNQ}=h0+}3aq742YKn!ijnPIJx*gOYrr-N_UYl!T5rmDm#Tj$08;iJ%Xa@IgK-oiU`h zMZ7KOdD{YnZM-p|iU&+=D;5IlLYtEl-yMjoDWu6Wsm!?)-cAkdu4>COCnX5;Fi9{#JqIIiiGqsb=a$fnSHGNEy2BzJ0Rhher&rm z^jNg>Rrz4gHc=2d-@hTaX2 z7b@QSxrj+?uPa_;w8|&@6WXOZxdz@#=foOiXPq|lMTWNv@V6Pc&}>Fo6Ke2)#Dy0I zghBA2@(Wo-oH8fK4Mf=}W0A`|`l~}n$PVt{-iJki@Q8h7MW7yfgB@IN>QqG1BjO#k zBvFfHBl!80Qd=zN!2-k#_|bj&wJ3pgaercnw3I+8^~#l3N%XYDD)fndy;ov_-^KWu zBh$!lXYB}ERCa$WG=b>Sb>^$O_-A4{mWF>RNF3=;qlpdmFsrFPuEJc_?3|b21cwkS=uJ`H-0Es^SIhEZ&uP8G(%OJ_c|DEK`> zG+da?Sl6peQ@GLR>F7&7e(ui^)K}))pN!3|bcR2_ZYPlKNRkJd3D^^*%IVHUWB-dC z{aH$?C|gm;rJS0=`dre$f_Wl)@DuYLdoIk(g78(5jL zSf8?tS46z_E*lvPX6Ud*3z)3KurjbtxGlCi`r+PTA8!(M9=R^ntcAMSbavY?Uw*UW zOC!@+vE;k184x;Ym3N}}I2ty-=p#njX_3yquV*Dyi%S#a*P)9yL3x#ZzE>Dxlerrz zB_1n?=HQqr&6NDpL=cmqq*~3NLqEe+@a9PXK;*6rRujPCutLfFkthYfxNLcuazU4@ z8Ec5O&mnXp!+`ruYGSy^&VH|l8*W^vsDnDlZ&jCY!q;=3lh5#)D9=?h+Q}_^jM~3( zRFDgnou<9wjC|o1E_6chv#;b7E@+^^e!(KXKryE}0Hh(9(ez`0q(@CajWbHDVH#SP zwGaw>@LYE};A7Em9}mW?@TY_yVTqmod&?^CK+DY;0DeHzau0l-l!MdsGH76d)Rld6@f_(3oYIH~>>E5S7!OG%n!-_QRvsq?B&z>-6!6hfzo$(v zmn-38vr@&W*IUd9Ig8&>6*odNsys9EsIgni86B%4S-Gwp8G22MFpI?Qvi!x6f{U?o z$s4drogXC%*JCC{0+p98odCq!N9#+0@%j0(BvA>1_frrWXP<7)|G`|w%vR{-_AH_m zm%C0AMfRbVhIDK(ZU8x@<*SPqh@F*n9}!*0u9>^wrEeSb5nG|jbJNYs?&xH)@tvKjQDdDp^;p;Pe5=@6eWbMvO*A?tmP3ksJ?UPA@S{95&o@%)Gnm*WV}8nZVu+OLX%?2$%mzZ_a;$d`6O7 zf-vFh28&3W=G;{9fQK%O0R`c=rrX6I9Z~xFxijSHkSzpl1z{5o7Zw zOSkZ)Ds)T0{%xuo77o=)&P)I03*>ZpQj(Moa#fua^|BXB!$oA&HaSoL5-uQVXXQyxv-~a8Cjm1Y-VX=6tr6(Wntethiy$ucxO-A zzs;YVo_!9^-^zFQ_wAhOr>O2%>m>Z#+0>)&a^64Q+8oN{V?J)I^73x{yh6w8%4cMH zL3_Vv;ailKE=rR zMw{l9GB@|5^u+%q;zfS8^oeuUWX&ep6S1c3*{dqWc=0QPkrjQkJM}!sRIp?l%tV;R zRkD?{7tiSHqCaQ9PcV3jpPFM&o}9#TRmG#dCUe<+W}m()OPBGn|D~szsAo+h1-_~j zxZfemjSx2c#gfAwNM{mjVs3K70yKkDe1`+)GwXX!55KfE(QJ04-|~!cByD7~3S(wf zD2o2pp>}Dik0!-{oPGJZ(V4I%hZ%ULw?hwA;L{mLYdDUz{~~7oE_$HPS2~8J!29xXN=`qHd5yolfAeocm{=Ci+{$3PuHTJiPy{95X zK@Ps{hoK@C?RJ;{N5%5nYa-Ho2!&3oKiK-{#jp#Mpkdi ze@1j%v`JayI$ap(hE+aDovDa&ROB|v0xVt>pN)Vn$BL-mQsB`9c)66W;#qU`vQl_| z0?LuuRaxs0PY`RJ8tNfBIia!=cHjj>j~F_5i21p$A(GZaUse{&5ZY1B;_CK{%4n*t zWq^aGj(Q`~_+vcY_D(|a0TENl`9eG@!X6g7Rp_$fvH@1oP`DjBghjE zFG0qn;xBJm7a12CK7O*U{>A#78HmKe4mO`h96cQ8n|S8)Oqfw1m+T(f?H^`S7c<7(P=PP(oV|V(PnXumn!y4 zOR52wAL|*9H0D$kIb7TmO(`6#=n@k^SE?!6Nfu6-1UOPcoxb3S2c0+1Vq3B#|7%+| zi!P3~Jk;sklNN9K%=|>mCEA=l9T}dNgVyMcDgTUR$CsKQXf8zfEZYzSLm3OH2N(4buA&t#6Vt<<4gO&K}(_6jz z`eWKpxepj`JsF_JC1t(#Vw{41p)rRk#qx$~tMQN9p3f^kDtSJC%`nJ_v>C1aF#sYu zZJa4mg6{H_Mqd7St~KMD&AnYaw!SqcP7yz>#u7Tg*@=f=L2_xAwt)X#M8$#3f&7J= z^a2TO0Pid|R%Rrmg=UpMOeK`)eQ|Y0+!s_m*_KND5*(D9zI>|mVxq_{x*}wQ&P~!p zFzF<7SDPP&NXhYx2Dpfd#-`(I7mcE_&1!E<^+e$^?m1ebrfYIZ#Ya1N0c1+9uyx9t>7kl<5yxwZ zeo-m;)ay5kaIao-y?1vL*_;Sf<{y0Rl~@{>7zID8nI9V_t0tMPuxu(CNou6$#OLZw z(Ik40wDc0Jr=HzGRydf24eh#1yO^ObEDG8gu=CJPPHOpzUAX^tb+U2xZ#s3DQpqXj zF_rY?1-7-l%fB-4P8j?j)tuz#sAgH?)17&0zQ#JWB91pzrY_E|q-R>5XA58pG~Et; z$ik(8L%0)cei-%3nrj>C^z!`7;g{a&&(RSQ;)Q2AU3FrnvpQA6(c+Jn3!T4icsR9B zrTE2Y4P@chPkVIK8+(}yU?3`-(YQ6XBr8>`M5wjY0m3hSgU-uZ95PndO+OcmcXs_A zHRo07Wnm8&(*ZqI>w6fbP9f;N7zhYQ7wN~JHp4Zpchi-~c#FM0OVN@Gm=Lhe#hJ4& zc<8zc8(ufGMmbphYVNz7e(+1)lG=V8SK(vm=)27Iy|;GgwSJHB*()rOwyZaIx7K;V z4tP+@E6=^7Twa0aU17m%RJA!uZ3#PtU6;oL%r=dG??QF;B6~SH4F$bes*>%XX?CxE zLVLv|BN)R3UHa33i`fharCz_rM%jr=Icelfpw)xT!bSE_@5cZH=YSt+wvBaf@opr= z1?UU8)J8VyH9npmBf(TMbbX)0CmNA*Uq6DV`s&0ZhWR#h$qA9}y*KJ_e!2D&Hs!GF zd|y!(j<6nCn6$r%PF>Xq0HqhoB8ht3SW#fNi4PI=tKbvmtP|)oQZlbE-1Bm9AW}6l zyC|EubL@Hw+KdBz!i~M=5%sT56X)Sep^}OV^pV*_s?hCBw~=*H&t@=vqfUsfGkD;>K8HIhW(Aj~_?d=5yn2j$F?W1{hjvBh8ie#+Oboan(jZ&|V7vGX+6lH-kX@;$!4I$oqlC_5!cy(e< ztR>|z4TB5$UYZtwvXdcE;BoMxKi3=17T9C2ZRwx~LAC~wJ-flp7D+-=A$c%8YHsmJ zH6k=fJ_kM=!ne3nTPoF{2>FzBQe>t1r=&S?Vh%yLo#N9UC0^^wNpYF#fPpeqXt&gZ zot^aQw_g)QSnY0wP4Fs*%iDSCD##sskfQ-Q9&X9JdBc8^MFduwkQF8=J&PI%k!ET; zIpmJbey_vBzF+!39>19s#E;r>!Hr?twx6|lD|-Zm29z1U3$_sM-z;%R zxL{Eib6;@Dn9kS6ufU++RD1v9ZIkJR5{c$Veqk{`;9eHt1U5?Bi2}bQH*8U^a)QT9 zwKMR)V=bO87$s+PXp_lMPrSO*QfRB5`=ckXSG`4YM9R76vW0%k*I+NdB9U1{q;DV0 z##c-;o^Aj~y_&yEztP5_#?2heZ7aN{rLMdGU&*$59-XRooR#b9YQr1UhQ2ZP;6tq^ zd=Vf1KsIJX7VmYViZOVcPYU18De}_Xgw5v5Ig#>JM5;#*@H5vh%A(U)*)V89#!L}m z5zeUMNQ^UbN-*vy<6Fq{GFMpQ;LFD~KcVyf#trL(h|qgRW^FoWXbt{gprPTcZ`V@y z$rMt#v_Cb|cZkmt+~U|fm!J2B)8$$s=;P+hv6w&cS6Pvb_J$EtH|Ww#!D|pNG`MoU zL*8@y(r-MqIK()}8!BY4f1B5M z_rZ0LF?Hr4O2-gh^Hz0M`LI%)tH{l!l(hXMw%Cc!32Hi_&NcaI-Vl%Yjw$fh9Pdqp zP#8J=ugI!-Jo8?RgZ=oI@I1H_cfw37f3H%*`iD8-?Vzx5D}te`>TJ)J_LugH+nH(q z4lYtmMVPMr0HHbaImE%g)U|<|zkhDc9iIcekUd&Sc=e2c!_eu~2Y*a>^S$wr>I{>l zem;pEoF&&r3kxQPdar|#4GGM5-tP+7F2l}jL3}TUIe|A|tC*wlod~ZM&UZZtunf1- zE!Ygx#Q~$z-b+T$@~32wg`MAveURVS+TTO^!I?W*>FNF|TAAEujVc0uw(~I+%$p&c zCHy%KROTGxanG6NbW5ob(f`8|CTGQ9URJm*wT$t^G>dgqVn8Y2)F<9kRRKOr_cOWB zy(VEz=OdBW>1~(NlB)1vh);kznC>>E{tDnGOH@I$ZNlAoI2MW7z+Gq*$m7L){ zlY~l<<#;j$WT9&?iHV8fS06tvYE(c#|7nZo zGTo14#)|3Fb2yqbW=$K7Rqq(c>7CZEG@fXyYd;^>xYI^7y z=J}>2ST&(luW8?Et1o9{Bx#U|%?u2RnfIg3g&NbNx$Kn*;z)oE8CBVcAA9Y@urV4yY>hVvj zEASNOcbcTkS)jDfoqshC;AR-Lwq8Xokv4eI3&?^`)13dq{9)J>#`Cd-z}SGY%=Xx~ z=r5y=6b}XGe+c7?ZH;v6q=$0B8@yq|{a3%%bdsjd;xO3U%hKv~j)uKJ^Y;Vzn+U44 zfvTS|6cJ(rG0oe*`BgK9;=d0i9Ymc;h{B5e=9s<*39yZhVwx_rR2feLPA(E9Ub<$@RloldM$G z_?y#i&^n9H&Z{GZ^pxAfF8QYpOliYorJ*nTH>oQUrbh0wU)EMVMae=Pj8aKX2!Njz zbQF2;!4kt84Zm6Z1hbJ||6#3Oar$5vsnvKieaRLl3;Tqv7L%;ZmuSd{e2{A_6=%e? z@udj0i&xc)Lb|N5w(Xu$4aAh)Rvo^PUL^(c&JO-gfj;g(Du zA^VJUZax6=IPlfi`K72wqPCPDSX0a`-hraD2e)GHX0n?!2J7M8r`Ae7;sn6mVa}u{yX8jL+@A zA_yOSHb0F^^(pRJ@Ji23-sWQq_&)1UfGrA-CwwqknOjcSBk=(chU8qgE=_CO)tLNc zj%PL)9XgumMqwFENJWJtlIw`j>2m}(T8M>#AA+v8w2&_PXI9jQLVVAzt#ub1oV0Q+ zmnf**&~R|2f2i#6S<*h&iIvYR1Qt)%M;JjkGzvi>y zMy{@?ayqQ~jPDM7yHZ^EgAmQvi@&oFrNV%_jqXY^lL9SZm{BwNLUs;t@D?X~?KQV= z{wqBJtcGNd58zYgodHpD49``6kR6xx;@G;s^Vl;R=9u~QS0c_Wnx@UvU{T_Ok(*Jm zYpAt4ylLVR<7{DcZQ*Ap-Qqjje@YJ7iE3F1D$z3d$;EN0-Lo$qN6Q3=EZm%QM~T!; zC$y!E>z_-#p1KH9@Lyma&##)PG(}||$86f{MI0l7uloc;=uA~2!R{Ga^}3w~_Y!fp z#pT8cUa)zyT~2|!k@T#R#mN6km_i6omaQ~M&hJ!g*akYL)L_AMZ7X!a9;B;Vxj4B| zkZo$!^Oqr{CzU}eoKo#ZBYw|!CE=4cpfFWCv^7KM&N6{O2#L#yPg@1;Nw5sgj|^TZ zxGNOy>>scMK6>-A(t)~M zU0}{Darkd#qvid(#Utcy*%HjjbHl9fj&?pXq)w${i@&1zpn(a}v~$y4cra(o__~U; zJh?OWSG6UN95*Sx+%A6@J9TYGh~Jn){xxZSdHUPn2_nY^a5;Q|QSbb+ z-jjCLbbT7+Yxr7!ogq7${$69-!>U3fk`wWDh>~!Okz1W9N|h}sDXM&i@onqT(xD*S@#_icFeuU6ryri-PSqmUsuDbrOtDdg6m&~fpmJf>A! z?2%jG8}%rzDMLYAcOO`R3wpz5yLf%ZD+nDp(bg1#RrXJ*dsRz8IQLdgXtH27&;g6XsmT#<@u*>Qn=Nle=C*jHfh>Ye1u^0VT+omh`YEv`wv&|qe3UdHx)_C^5Z zf+Dw{w0%&w*;j=Y4q`5SxW+6ed@q^Tl9sD|Q7?HWsqCIH%hxg*G7**}l;;=p&GcZH zE`YbHve*nzr7G3)xZE%W`{qnca9zinEJlWd*A8`17j`}WhCqfpsl(CPexU8@V=I~K zdTAg~X_R&;TIx559d=Yu>^?TRusbe?x4WC`Z^*>0$EReF7Wt_F;6s~?3()~rCu9HV zDVKDj80=AlQ_3uEJR7qqdYh(ziAX}C9|xAN0UTZ56<}3+t{lN@^w_@0`m5yz1MvcD zaeN|POWRasZ2pUr+I_Y3I;ykH!Ia#5+I}-_z;%ARQ0R!BXFTe`FH<)!Rp$gn`q+FF z24P=DZt}{|=9hy4=+VoJ8s|fxm+an#Q~*+f?zG3N#ySRPd%|rd(H(5zNyZrI&cgfM*XgFaOTHg{)*S?4p+QG@DBtQBA zHsaUREGHcIzD4@4+JuyFIy&rlOn*%P&!H#9S4Rn_?pgHv`kh}tLLhSd0{{|8Zii!; zAD+Vc4`k{TFips0!?M3}epxZaf+%Ic_bg4GBx2ylu*6h!bF}9|mpflhLXR*3oceN4 z$X{tryMZ=NrS`rSm@+)ElEm>9fX?vKxefV0mYsO;@(pKY=-U3 zQ8Zr6LBgKb5Ll8u5LiI+eeyHW%_q@_Z*7-r7?Q2@ZN^rSRo+cqWLRlhEFSi;dVWpl z=DDQVM=x>dUH+pe(6g?C{LLTV6{ZOxqP=;+^0VeXJg7g*$feCvbxc^GaN(j^O|yvH zh@5{}t$qn2K7KBNHN2Sb{-~Bg!pwZ`I&M+oN8rDDnpM3zky#lZEeH zU&zmhgcqnl=9WUk=!n-2{;M>pISm5TMqYhAQGvu}x;_CkLbaEhRli>A47C`@^<7-T zi73JZ`4<2*7|KH&X(Lbd42_?-9-bo7wTvP`6Xe`#`ztfY^y|6HO9jM;&Jr7On&W=c zzztWHieZK82~SL*@khx0x*+Y_b0?K7{$XD49##{&rMNkfE7!wTgnryOdOo{^g^WoZ zx|4Ve?a@cU&}ps=E0)-h77{w=k9_&$2iDkvXHb3p94Ik~avSm3%fG7PZ)E(vf$~Hu zJfF_u&CsFy1y{_=87C3T0)1%QX~A>~eIRLb9OQmR``REVoK3!X@0192SHHPO)?oax zG}%YQ1W@y};>-(%%85vZUfY5>+6I~vyQJFpz2Wj?Twc&Vy@`dceFgQwbx(~COTqJ8 z2vT!&8;fUTYUn?%$ua9(J(EolDIpvkV8GacCy@xcZ=KuiR|V}>w5lhAc;_3PdQpX>wA9}De*C0KlP6@xFn4%66UaXLm1v6 zSfH40ujS%Hf} z@MZ<5d?;Uv@lJauN4PQ(Rnbr6Ue4r$IAT~2S?Dq;3u_*`*Wy34(t`&_t)z5dNF2D@ zlrJ4PZ6p%xJ7Hjy%YM_(mv@^qA^DY=WTppXF>y)EN5Q&izx9O>vNHf_=GPj@ZzXKP z%SWBj@4-Ye-Ue}e@P4i)RV6(kQ#6_cZb?0$pVg7Mq;ml!5+KCdyyy%hgsyk^zzLgzGa5i@*?MpIQE+T#BKds3R<*l!2E)4$zG2n5=wbii7mh; zN_M44@~jHeqA4hlufmbo@nbEYYp-)-+eYu=+s9@F-vv}u8gF?xQd)Fl^laVs{UBLT z`+;L0uE?m(puHKTsfN3}c!7Rr<2ELt&uG5uM<2c@B~R>)5TR~uJ?NDRoR}AYdMBtX0%a22X5Mx~B)Xp$VHl9*!HV?@X zMMuW+`L(5&7vy5zvYlZ>PMGOq06yv6mN?jLj?s%CHZJ{VV1)S%b<!_*aHVUFKwT5GW*tPN2`ziqp6FoF}An$ng;n`Pdesnv4DO?d#m|!*vr>|dbbu84<&-Tt>#XCPs` zzxwgwpEO!1HWFV9FnQRa=66|rqgD+$@Ub$JF1Q>Ks>N!2MFVohLaOenYL?RW4Mnr0 zY&&aSOLSWl6Bfvp-xAq(%A5MST%=zmi^PFt=e1-^lYi+9oko5M%cRTc6^n)jztQ(wQw zP~QJ@$(vefXqjW5>xuG?BFNWq$oRUL!u2L(^VCifmue`rz0T!C_RCqU z05jf^-b@9)5KcX?z6>c6f5bpi)9CzSw!1R++i8+OskmMM>16c{UhwZh*NuEsbPlE2 z&DRCUPC!J>{L%0Y5p}s+BHIIKrQ(g9E`pd-C0X9p91qDg&@{yF)2-Y5ip~>MqQzDf zv9V@H^gG6Dwx8P(4#@_Ie_C{nhqDqfl3JFh+PGL}{oL25!C7vFv%4J`@C5ciinDCk z$+8{`i?V+@Y3M6Tvb#ZLnfv@ugM!x)P6kgL56f5H4*_3ynBI*W9)$OD-`%*bvMmDm zVB~u)7&CC~g}ID-m&Dt7Ro7MDB67%F{#WjQH#P7CNO9|zJh*Fq=@cS}bx7=~ib1fX z1<;S~m5rM3b{8UKMcFHHU?X86MFEq|i>Cf4`j4Idb7AI#&#RkRsN@)z_wL}Z!h&7r z;zX)7t*U*&Bo3?_IR?-X}_DW>9-j>K#H;yA&sW{Vfh0bYX8T_#f(gE;} z&_};$@j=Ji*aoFviH_pGkg_}hpIUFe&z=*HKdG6NZ4?4-$ip~nUNF%0%8nwrV~f~6 z+rgs2;<;`Il#5oEpDwr@%xY>r(zKmnqfGGVmyrYC^1GksvGpeLX79?g}!~lGx-|yM0W*Vr=zlAIQFCfQm_o}z`*7`=?@93&GNjO(!GX|1Y z(c6(jY;mGx?9cxH^%}JW0Qpv*&Rn-etN2DiMfjaB0y-Xr=2{xNm;>2)6HfjG{@0>_ z-I7L>wQQ&)nKlrto4_XykCebb!xDW06BAe2?EmKLJ8ytKcxw7uv)329G>YFOArE7v z;yh?iX)PTxWjmE;mGtiP^1o_22uWB zi;4g~lAjCO2#$kCN0?yZvYsa{kMetrXQ7S+LAtpTiE!Y5?UOU0CeCBlJLmhTLUK_r z6{$vFpm-GG(_<>7BWX;?XQuy4n2{|ppcq~^u&#I4mR=Oxdfz>g5#2x9Yo_S*zcArI zqJco!rnYgnmb(>I$s(M*(_q_C!xS@VZiv~w3I^Ok@SWY++yPN5cQy}q z4@ul0)&C8-aaW{B`}EZ7v58y#>|Q4HAdkrRMOc30L^}z#IsVrYN8w&fW&GbTB8qkZ zgt^;u2!{gE6sZZq{~Kij?}Y7e!zaWRS?e;Mwc7b^`lHc)>bHM#73M?nunfa;jLJKq zUUqiBy6kN)F|CW`DxR?q5i=;Hrun}SxZ)rQ;2{MFS)TWFP5XK=pO)$r5C1Qp5HS!S zGH}S!8*pIW;55vzBW~^df2%}9$~hoSZ_>^!(rv##kwkk$t?Yj@u00%R?O=CpZDzF5 zt-bU*^Zze|m|YPU$Bh8%4)U7Q1;XNp|2;cI6~u9T)n;8p!9PBAS7QGEkB0#%U{qaj z+v_Q&%D7zXf2-0KcIGskZIzy|=q~3j{kL-BcqV=mm!2rkD%H*KwFH%!|1Vn&iNNl? zv&F@m#p$DRp-+NOUg%zPE=2Xq4Vm?$cM96I+F$pW(*y;i8M6gImAdrx?h0Qtgbd=5 z&hUPppOruF#gtd-vbV9_j!+cH@yLBu2YFf?kb$bVR1$zr$(>*f*`I@h}LaxM&HIlp_IoC)C=NSI4iaZM!c z?Z~yCOTBZnN)O|@_9SxZ>lFFJeZ!vJ5+8FZgt5vHdFZotxifN*QL$!;!t|2bxef~0seqs;^||rgU@~5pQAi)ONFWuT|CCLPx>f-*BmKQ z6cj_DH>WFECyntjjlMaXmTb(|P83t;hd8T34%$K~a_wngKPBMn<`hLIBo1-Qr$b6S z(ktD8!^?-nr}G=M&$SRe(~4kk8gF~42>iLGWRZI!?o||cLPLrR-APyX@|5`!f*{P* zLG(NFHHzXmDFkAx34dU<)^*Nfu5563)CM0lXpXx7PUg3MVm}IsJchUHwE4#oYi=uo z@f#tM)i0S|KH6r+QTJTa$%}oir^99j#bLSjOMNVR1Y_m~3k9t5+$3sg8Fyzf z?VLM}N@&ul)f5bA^YqvI<~AJ#=`2|yjYEigMY&wP#`p^Hh}*uT#a0&h*Aq(1)8Dk> z@p`SE1mq)mT8({t-a8uKOf$(HTd|Rx#7{MkXhM#U4-aE^nCSfr1sI5$YjQo<(R-H` zrT3$2Fs>?(9i$7$uMD}lcU|xgJW*am%lLxoLd{gU;4<7LNp8&RWdMTc-#xm3$5(sz zXtExf>dkrr)kL(V|IZ7cYZhJ+0bv4tnMjeYpMC7<@Xjke_E4&R#F7l-aDtiymY=gB zhTPpL^YqhUi?(>%smnV@FCU`#7@te7zmbO@LtWSOQwb{*1TIMwFvopXjhm4<0MY%i5j<{T{gj_-wV1b*>gsg4RNkZk>wJEvCt*@ZKw8 zmp$gRL|?-*9&b7h@ny}NbmF!#ePG%3>DloU_^^AOiDb(%Er)Bw++aysiQDc6tKbTY z(3sds>SiP6@Z;Yqo4KiF7;VJ8d>DD(?QrW`*A(Fg^`KIH&8{U?4123141!WwfMeP&A2}d~QJI%oSO@aBeAZ`3V8(lpu!YZRj7ARckg#-}`s+@TCcCyEwb5-qDkvTnCzl_xU9+jf&x_J2V*L2G*KU$~b zQh`{o6;w~5h;D#$7?%O0K@mVrSVmuAq|Qu`PC97xcL$qi{drwZyZ|~nk*!qUjQz`F zF>BWK$+`^#a`*50<*W}prsEu-93K}IjPVx+cmQU&%3zscV=H?s^~};XWs9x43ZnDeM zY6{Q_vDtlfNK)QZ5rIBi->=uYh8%I=Bigsx=>TT6!v(MgFf&}^f;1iMsIzYMYu0C8 zKtVav)eOVN>Dr{3QEv?5SL$LQz!{5y+ibBwy3`(N;BoN7esb0N0M0+Sc8#2Q>~aMz z)$!>S^n29vsSTYUBxvaT0N(kF;0(UPJ=vGYipK}#^kW`GfwEF1f3_JmF0_qdAyNFn z^jxH>5twr?-%U2#9BI+MsKaz_YX{rPHifM5hhfPcO`p%1SCJidR?%4vZ>WAO!p$o( z*etMD&7dwAHp1A9y68Aob2{lbPJ>Pw<22}{**`{Sru`-fx&wO@1Nn#(2IWQjHgsQe zx9)GAldB~Mz6U9U(ce(_ik0hhz&GWJ3s=a^KU`%X1#ry`>Nq=c)Zw8dVs=j7$JsX| z&jbc&y{`S;SVkI>eJtX-Bj z^RvxU-d0q8nw!O2cF8Bdx~t5YR}Ip0wPO7T9&@agH4$+Q)m8NA1LB=OUn>`#3JDrA zW0am%YOYqGh0Xjy{Q>E^tt1`C>{N`?vPMmCSkggHFhe(%Tv!bJv@QnjqUUAk-ez0` zAKC;a`n_G(FEFf7$r+lAe}3P?a{r(7F+YN`*E#3wnE_P*s4%!aRB5~$@IEF_XXAZA z#S*LYi<{TWzkGg$yzR&>6ma`x!Q7qz%EPrEHNX?cd`$~;{%4;l#~-eTM6`_7KC}fu zfR?arY*j2gwwIx;?8%Yiz@Po)969Zh?Lrt>j^hR5{WS;99HU4GHw^lrKdxEd@SP`B ze1KF8K_g3pXB=qtkj3|v-Eu)kFIcg^q9>HWaiX!))+B)LpsvGW;JLaO*y|PpQ9TT_ z;sEF1<6wu4#lY2T`()Kq4LR=6hx8B|Y+J$r<`yMT!)T@f7-86}4Lu)%gKgoa3#2FoWGk~aLSUvN3C#tPw6`pQk+F!3bWP!Z($b|tw=hkeD zay+6re$4vu%JJN%Y7GGG_pezYzqu2qD{0?Af>u=qSPk_Q_z%@v$P)mZ{e%P>r(?v@ zz=pBk;G6+J37|Wq6Q8|DT~0VZTMQ%?_(6`UastriU|*{%Ew&igr~2lH!{Em7&!py% zTYor!byyDpDd@NXU}lHM$dDdskuS>&Y7=TmTI;N>45Y1%4f)z<*2>n~cgyo%1XWK{ z=JpO9wn*!F0s?aspn>~)zGR`i=Y!kJmp=8Vw!lCDliIg+le9Usa(ez8b?SUoLDj-y zAiBfzA1$)+Vr@el$0_Z|`pm|N z!8^xGYXC)BGs8+c=uO;@7_6^;LqiTZd@vktw8dugT7w&LFn(|stBW*Gt?3JUfPZ-1 zYWd2i9}k0jC^$1`fF>o1K@X7ftL6v;I3o-L9&P}3%oD=koy5ry+HCDc8^Vqg=xbDZ zI`8v~Wv5-cg8BjyG7Q@9!GK|~8NOyc_DDD6o1cG7zIWAAv5m-2-6q-%H^Q2EYJFG?{M zh(~~KNzjuB&Zuo%U_#v~{X>ev^^s%O$j86FND~c6Rd;J(&uu&Y5S+oM`KlIKwRS-M z@yM;^@kbi+^Z%!(^#mYBetxduX-Re0Jyey3fhl4cB*;q^F@w77k#0sqi%hLL|5)S7?;)Ck6oxUpw{SH-;fWz z^8tC{aozmf>R;sM_)>0%egWTO|7hQEHwUHXY|J8^j@59Z&1eLQq0iu&z9s?mCg?kW z%sE%sVj!euywXfyq3s7ZtH=q_rzg#DG4S|zJ|t^aEAZeir~+&fF%Jg5Nr?a%Kj;Ze z5u94UjAvF3dO(v&kp@skH2_vtz=XOCl$9iqG_*=*b^vQrb70|Uw`YmI_C7aMX)}F; zkft5aGMTOS)8fUAzX2($!X1LSz~#7(r- zS2liIPkGueHda9mw5*=NF^zu`Ku>Y!`NhC3Ro~q1%|JiE{e-|`;CkISde86s^kt4^ z3SJoOBZIRIcuW9FiU8&a&OwSqTmOK7}N(FO=iB`;X( zO=rLNgh#*#n@{J z5;j)L`v(2Seu2$?$;Kw@vgx?D@g*mK-gq94iUJ06aWSx%5ouuB4R$UD{`mSe@})~3 z8znf~faii39}(dX1HUyHbihMeZVmb(7)}1bXZwvWoV)~Tle#jHuFL)hcgb6hsD<-7 z=JjI24*%FqK*56HI^DAO@R9*J{;=h(MW^iMMTxC&!wS3^3IyyktM|&MvuBlg^x8$X_i!E<027dlY`S+_tjFPyxCg76WnM5e?#Cc(*TtObFM(hL=z963Q1Yc|xxF zrf%woIwMNY>L59z6&@80a497Nj18PI(CN-r#Dnx)3eE&1D}wdR6*xhjJZ+n3m~c5) z@MxIY_x!%DAHWq=dFXa5Wr06fsaPcf3BvK>1In7apd!2P(JQz7n2S}hBsaNRbwVCw z*0`7o9)twbO2>d{Y;V40LoWQJnQlSdCv2i`jSPDz71Dv4Qzr220DSdSe@`@ zAa-gf9-nsf!}?0>nlRYgF9y279#j~REDe-fw%f8q$r_WyCJH9Z&;gHnwVRN|I&X|W zUj_kC?dS}3qg(m*zrU=@uFtHhTek1Q(=c3*in&|8B&0&@$H)$bNr44etf zoFo7^Kj^KDV%>bn6Yb8I6(=1E;XKScb=w^Dq`E&^ci=&%kB{Yo#z=sIZFzX>+Q}TS<4o9 zzA}sej<2K)s?PbL2M6Vtw?C+QehtVyT;1jCgQd2Ef(1s&La`_Um3w-;3|D>`<}b{>$o zP7My^q0+LKqHVBS+9+`ckRi~}w!ywB27JCu)CaPX+5sq8XWUe*Eg$*727Sd{KS-*& zi5uCwu?=JQMbk_j%L*BJm_I@Syq2pvfEJWh6uY0uoy3MckY%*gopn|JG^Mx8z!~Ai_Ard$u+dlH%|JbD|MnZ#$_a-(D1*9Fqs6Nn zk78d&>DT&?W0NX3_%l$>k5l%&(J>yv9bMsuO5gOi(<0#n_aO%Cs}I&U1K*v!8OXs* z(4ikibAWsIDwUf1b)WN(zo(0VpBn9AAS4njYT3Z<s%|RYjz41*$p@pQ7@7@ik>Q+U9u(m4>|;sEdLBYKI zKe#(-u!A?5F^Sbcnp+I*9BW9uyF5by=Q7(Py#OHXcuP72n2e_J-#}XALx(Pt$ChKl z$DJ<9Ljttj1oI#b{V8~AhIZ!z#^zf!2c(u4k=3+;`GaTr&5k)uby6QkzuI>wi{`B`htZ%xF z^3A|FfNj82>chbH?&&?)!JoV-f;6OGfCB8g?D&Hx)+?m&MwjC!pHw1vgg)?~0k@e>1P-)!kH6MMypQOUf>yJq3#yGw zDn`wR^4!|PUn~YU=f@>d4dH&0XFvK0-V>Zs>^#1UZUWPZ?hTL z*c(?l3O2}dgB=nF06E$tfr%UVCXHnDJ8`g=*U3%#@VJbjYyfcQ?M?aC=lb=G5($7y zUT3Y$0Elt0p^L_cPjT@4`JdlblT#NR?Uo-m1B5|>r>@mYjM)tZbUVqQKCgRo-N0GV zxmEyYU*B@RVZC!qJ-9Xr-u>r3ZN1&wb%VijB?9%Ji51DSW zUALV6@of}U|j9evuM9Q2O5bj8I$)XcZPogZm%4XD1k9v1^o zeD@Nmt8kGm2I9uW8xr~`f^)F7Uz`A8PbL&75NG|C*%6#IrVN}h9`a)XHJ^DVZL=F^ zpJK4$z@7`fqTsB@6ff4#Qu)`mIe1_rEp1;MfEnj%+<3zpx%doKdIpKi>+pQ){9rfz zoV{?84ff(7*9uZv4tD#&?n~-aH+gFH%RoBJVGRUKx7^D2|N9km(iPcuN0UPUzIhtu zErlcvv-#Ftvh5CC^2=NG^gE?zCMyGe(6e&GZ%D_K>WO(QUCXlx99{at3BC;fjOXIT z6I=k(kqyQ!&4B8gu^9M`E1uNr@$mF8RBA?Qv|ITR#~ybSVVv?p7~M900n!9z+D6C9 z?;KuQeWvEuM()&pRliO zmp>+AsN<2(25@n(7yYfljz`57I7bkP6UQcybqDJ^T{KYGv%i-BF0JUFv%u*=-wYkxz(WTW;u$1m5f+~BosJV{Vu zW;-J==f^dLQRz$0}w*r|tWEv&Tkb#cJA9vu}`T91kf z>Hw)BgB`TZOxMAluQ&Omc4#ZwY;CujT9=&tLER(0Qa=f%st)Xt_6B`KdftsRIP)07 z^g(aiO!ob|x!O;v?r5nz2-MV1D_!Nk(hBLS@a_uDh&+(A78&(?*6?k2DT%i#d;@=c-xS^6k8kavua7ux zOW9-39?j=Ln&2F_`L!fzfHmZ30v+vqxxPOp+Ko26{%v(R=1l##f!4n_fU}if1YzG^ z?}n~* zep-*nA(V6|Nho~)Eu~^eAuZ{{OD77@OcSJLg*5dc^hih^(%mC8V^R^9TMpe!}NnJ!JP83ZDjkMkQ(J zKY(-qX6?%`F4(8EGrC4~;(t+Z0P_I~&{z!YsYcz776qOmo;FJNZuk*Ds8TZk`nI2} zm9!WLu522U_Cb$<@0_s6veRx2IrB36$m;_A-aI~8#et7_pB8=?P6WJ&vTB`f1H-;s zeRTZ!O{?YMrG0u@odIV6mjEzu+2djWng}|kx*!Ngo1la=;R;0-+zgwkb_Rml1KLQF zVy!O>IG_1k(Q`YnKqb1R&iD;(6#EW+#c;D#`c?_NudgZJ`RY>|1itGHAlyKCBS43l=ryFJIJ<9d|Q6^yorhCEPHq1dhMq$^#z;o2GC6`e#?je|%@9 zah5K#!r{GtjjOu;<=& zdEY5G%)FxC6YOmPFiDOyAwUlxJ)n9~oK|O`!rbj`)`RqEGe^($O$4{bhDBZ!r(!nV0dy)yJo0 zeMpD-nT9sw;b$6OhIbe9FfVPyV=)l==Jj|p@UW$_68dKRwcV)!fK{*!fSXCkes@Mo z?S>si3g#Z1;Z_1DS`F>!bA4hVv-j6Od(B=hY(&d{c#X(UzNeChZkb!FFP#((ClAAm z{<3hU@skzl7+#i#Vctf1pT|#HAMV}A&wMPOG>hqcTDqCG% zAQGDoab6Wodl+GIy~&PG-_9<|(H4 z@nv~@dhbR)rl(C>^fNte#`|^_(|Wp0@57j$aYfobobHiq(xmOvd-`;H8)?h(c^Y&N zm##>Ybj$kFq-KMFfBnjn^4)K=`z#fxIB*Ui?Y4BPgpB?7tu3BVcTf-AQiDJp0$a6Hg10BxZek&vakL3O^plQHi!k^( z`QZ0%_-Tsy5Kh{(i(x)|I6AB=(-dveq3z>G3PU{U(`Fvpo*vup4r_W zPtS11!DhXDI`8&reK_2V^Wi>>ZrCh`Z7k+z8c&OE#F3VsTc^6_o}kkBpI@$*ckF+k zTmx{%KJFnZ4Nw5AW-5yEm!n2{GcbWO`(iA1(m{`bTO8mztu&Voc-Zmf1Ptu%p1NH8 zwVEtitmhHym!|porD74BNZw`|PD1*Nw$J0!dUr7o{LJUw41--XK8}FEbfYcH(*XUE z^7%UWyd&lFX+4d0ZlB)M_U^L0$OltQSM-mEKJ&0#`dKE!Y5RDT57RcS#x+#G+*FW7 z3;H%R<(pqvAwRknJ2Wtc<5&){ek??(8B%Xcr2(LZ&N;sa-?o3+B4An!L~l%tNdP?t zK4udDgO~sf8gpf8jGJNI<8``GI_&!3J>>J3a9$s0W0ev~=SGTW|?|o~f z+;_KqHmw|#ncIL_DJyLSWV9{VelZaH@S~sV4E5*q%`rddn4ukgX)!SJrM;B^x;<}( z#N+`Q(K?;uBcTWBou1y1voD*Y0~p^TRFGCjmNz5IiNz44>DR?Ze75P~C4KVg^B#^- z9N4h+qBq25p3FsxQ*U?ToFnYyxRH|@EoPUe)#RT}+&=UhKKnEp!+ym4#zsZBS=}n}eLTZ%A2~kDrZh0utL!zuD~D z{r-Njy!ZGWw7(!pGY#`-7i(X$515Cs{dK4jM9x0pe)-KEYt;pC^L;@#ZRRZc89rWn zXuUIF22CH&vSG&?N(5Qk3P+WOg0z#Ay*o(F3f>0JX)$oTy;hbl9XDFWl{R5zlPwHy z{h^JlNVj}xQ`WAo%N{T2(gS+*6fxZ=4dW*`(&6GnCw=IyA&u?yv|g#IQ1Y8!uR%^L zqcyoW$p9FEa!3Q0O+du+3W4dT#k--bAn)({;|A%{4GGVE-u%FEC@)}qKl$9uhp?)i z5{K8LU;gUFa?4Lv>e=4<>S3-AM%!n;gpF~tydn*ZMGP8TkbD8ckdA3nm7xoN)t(?V zo8(+LUSP=1jUqU+3@hLB%0klbNE}E2JrajTjEB@=Cb*&ppn30I4VgQyDNlb609Vi8 z)#EEiJ4o^33xNGO3KaNa#eIL&b0kPR6z57cgx1h3%um3~jrersd60os(6=f`{r1=E zWcwX!va{YGVeobyO}qZ%jTdKM0Hpu+wVTTiuYE%L2Mi>Q1PS?ZkcH*zh46{H0th=W zwzgt>oPx4S0oAzhSFIWd!v-iDFyjf3e)oMwO4O8|K@09yy~#BVX^qh=EV)MJKvHpx z%%dSGDDhf^O+e_NRTS1BC_S=8Lo6O1eOiyaVDE03Q|k&>K7XD(CptpmUbDU)!2Rsw z@0I_%bFB`2PFf85;$%Rq#%p`;C3% zZ4d?sA&hV3J^tu`9R1cmgxC19ep6TIANJ#D`^@@s#0IoW5XXeoBh(f(4j0E!0PO&< zCP@eB8o&);4`U5B76Q=*2gXX<=(3KqQI7G&TKA;o=nn@e}g|=NNyi&$CSCw{iku{KRqryoiU*`l%g3nBW}J=i-?k zrLa8O8WL{`h)rgE97q5?KE8!q*@TAICiT!oLzAYfdLHj3SI(8iTU2EJ+-{Y~vVqJh zCMkZ^V97q5? zPR21?9#q?bGC82i~mA?bP>W#B^~>va1a9-EJO+kHyU zK-eBRZIWl(oU%zDCSRCrpy(%*FCn>&0}+_j!|ju}@ouw2MK1oz79mNkI`q61M4*q# z`Vj{Z;RTUv|7C@I`-@L#7Zm#q3vvj9x^^)*pjA|VL)!~ zFlI1T0?4|X#gKd`h;*_-^EZVoJh{fsfdtTF=h=`P?Liu94*la{?rQI_OH)tV1_T<(+rIGdXQ z?WJr3Kr6?W2fCv-Sv~WB8tI}{5sX1ICmEN5vZX4PKmPg^DJ4HSkN}#T*ho8@;2>0- zuo^<#_`kg<0 zIb0>_;oi)nL~SxHIyH9eMs{!pz*e&sU3!B({2)r8oMYCcc@jWRAZzmz(t&i4o&naB zr0s3PHy+k4uX|HZ_^QX88YHHXbr`0!e}H@;4sR19lZ zo{uLjhS5(O;YGTLYeyS#J`eq{%jh7ShIJ^?F8Yh<>4!aBT9%J=tfRLPPUFLwkM(03 z*ghSeXzB{mcoqAYw=UDyvQZyZZ-nnmLd_A+w+JeaOegIZ=L}r)eeBB{oqKHg*}l=y zPN^o617TWEB*EECD?gAq3DgdtiK)fMR@hzgov#eaFaF=4e)39H7lU}5Hc+SSdC4%8 z0rxxw^!dG2nbT9%7hqJ@(qjCXA4tPIpu@WPuy$^yFVZNhj}K!$*q*je1g|O2*c&eDNE<`l$GbhNDr!!YI8tpy{hW?{C4`5C~w%N{(=e& zsucZ+7pO#|{hkMBj4!*wA|nQ8&DkOXAIgkK)f_Y9LFtV6Hm`2KGoeZrB z1%JFgdqKba=?`^%>4OwW1)s z`Bq)}BFr|L&Yq@Pw#wM%HqiDuaOH%OvYR+*CVOUcAOZ9w^lu&j2-0dpVhLca(vI5p zc-tlCp3tYSbK|goJHt`5vv|0VKv<&mMcY7K>oHSwkG(Nn{4H`)AjSqvntQ;TKE)8k=`XDX+q=9rr zx33f9Xp=7eu)VuT&-gJI=W#K zlvs7f75%<^x@jY=&&P1uj4vzCmxFjuhi=-W!#tp0jPqqO9rH15(Pp|v!)|8uGad8$ z@``cHGZq^(e0|~fbXl&a$vm_fS5c7GyR#mwv_KAg+XAJd60`^DmOtC-XIuUfNRx*% z-5$CLcc!;^ireP_!a&-7n^@3Msi>-_@SOSSF4<{U(IZJKx}zhjAoCIs2n62tX|P9H zw@62mJpx+*{j`~`ot>A2S@(SE(WJ@em=s@GlNd(3tl(l?(O;IwH`%*G+PL*jffa`R zA4)|e!e1e=8Epd(9KqQ94QPZ87DLCc2y;S*R(ewl;JGtuUxuZ z{`1-=H4A7OU7OC)T~I|BZKi8i(rgS5NSQTU0T3orGnfw{?>=@r+5e!;mCd@pxrsxq z%1yCKZJigZNLc+`Ud+zq93l{v5@Eq1(JU7q@QWcfdtS~ z(0!D0ttd>iraXI(rkr?ziM!Y?7lfub`H_yG%*jTZaiE!}ix>dC$a)3o!xStYd$eDE zb!+zdrI3KY4DrhXqFuBYUksnEegI+7FwE>Ped=M^MbD6a?qAN+{=-6W>v3k-n=YQD z&>cJO+M^>w!8-PhDpR5`t&y=P8z<@y|M&T z0B2pv*SR!b_rw;#nN=!+G{Sut-98*{e5wi4^rUlkk)5Aj(`gH!uq$la0wCyR6Ph+A zcSHeoncMqA;4JDP^#-;Iy5Z>v(lq)a=(N?=PimPTH+6(-8DT9$AsW%4-%zT0l9>@4 zNB})W-B_tMbun;2cGT1Cun-7+anTGnk#Y8h{)>K;r3J`CfjOI)kj{G*q%m1P{^i}} zpWgfjsmG%uuxrF7G16mNs~y1Drg(^p;LH$9U#xNRg99(#XRhvN-bP&twRQb8nKQ*c za#8Wdti0FHORdrGSKjoWE0qKm|Ilv=#zEBq{WN+3Qgc1mR{(a?N)wc6`%;p7I&+`| zCZ=<9IUX#4STZ}rnA$@@&?N&HSu`9%fg5gi5$bmN>zEEEO=K0!zD)lz{M(mej ze(9PMf-X5@sqTLVzyfyFR(f{R)SD?JWd&&Tm#M1|rs=|#4oJ`HR)0~7<`@}LW(t@# z97u;HO=4GJg6#em4LRX_6J6)k0CJdE26hD3;i}N5S@GV=FK%8ZyFH^vw$(@Jn(CNw z3f^$W(;jT-NosoCaocLS@H9O~8bBOD*`#SKQsU4agaeX6+yLClFtE%_qwj|yoaxp(w(|MB4=<7b`6a&GZhUU_Pv|2%M2V-~g#(pZ zhbv)EX0h+sS2o6coraX30y>@pNrIlFF2clo^&1*;$l-%wF%Y{efXf;jCa*7+lbK=k zV>brUfBTD1%5~p*QhIg$>9beuCNi%oy(%@u_gR>&Mb}SCxVu%o0=ew3_gX0LI%Zq> z+GUReeziUTVgLXxNYiH9q>msS!8%kvmV~^s+4QQ=d)^o3$QD~E9~%8C;0`K#?5W1{ z#e*~Z)NBRT?m0532V|Xa_`Uj_N$9LIW4)F6brgiZjO&oJy@4NBmcqv-_w?mJlAtG{ z?=T6EI8he^U)~6ku6`%BbOM(Z9VWF-_6@p?7E|tmlOGMz6&`J|^J1IryXDevJU!s$ z+#a2{KyYV@K*4x~_t#aEsn5aRxZ(-9;XA8ZfNWA3!8rnUkj%U!jmhr;z`I=qX1H^^ zohtIt%d66bK7~r7VY;Ux-@yj(9^o{hFI3-L>FU)_mkr8s@48R=^jnkG(?~@gJ@IJb~I@wL2KUlRFu(Cmn)z3NcQyMKmzCq?kg+?o{?J&ESIeO#36{H zDtO5RyD$3tRk}KCnLM^!K_G&2*cqT8jRX46`sCBXbe^Li4dZEqfEZQ;j{Z9Im=*ct z*^kP9-Mk?JfdW8l(o>S=<1;`SVE_OFkl89hzwl)u?>!m()@yKs+4@W4`+$7U*;Q4C z==Hz9S|{h7^ib&644g>?+*N+#=_UZK0dWhQTL8@)srFMyhxC@$D50+qWVVH+-|5DI z1ke-MW1DT!kaMoE#Xv~SWqM*vVoq9LG{U$T_~^rfa-x29qhA%!;o(+6Ijri#7bNDU z?E9L%7&sFw44?r7 zfi^&UmY6plR+s(%L4g^4Q3p7iAiNJkJ3plm=LBq6e0KVL5wowhtqU;r|}7qp<_;AA%YO^0nGZ#;Bs`>IN1=%aQSIHPQk z>2GxDt^tu_|M4MN`GiVdI_V*$Wjbk0{0IU7fSi<;fq+JUYAZ* zE}E=giZSM|^x)+c-R^kiqw>q2t#&tE^dtM!gR}Jq`XaYD7=W2T%_ki6ljaTm!+xwHn^Wu%FVc%*|$1FDVhe&Z?m*RQT9 z0cSsvSz()mN1wcd?DOhH(xopkU@@@FupYin&_xe6yJYpMx*YS?hh?B&Kbr+fEl6!@ z6P(p=pba$#fto;o(ySiAHNzyf+MH&1B3itq@>O?fv|9{B+lwaf95=n5xiYASSe)k_nK#Yx_DKThVy{d;Kc0<}87BuY36D5wFn}}E8AWg&Zh{b; zu~P%!{0Wt=0M0{S#U|)t5~I6tQM&Dx%Rlz0-1VCc`VxyC0Uus$$Tx=NFqCydeY;ia zUbv`B&bfSBEw}J`ad_R>7A8%4kB{Wx(HwPRy+~O@Aezq*v)zsj`P8@j1>oEq)HnPf zJ*z45(>E7!IaB47J=sLHMz~4GaiLEw_%lP>p5R*bNsejDfu!OXN7wnq zK)f`9V?r^piw0o?NZLpPNq0cEysdb=E+@QesjMGq0%HPF#~3E0Nzx__+eDqepempK z_O{ZihcES1bziQlOtBt}VmN?Z;aYz3?`!1CpIWJPrivq~Je>3f)knELIxErY#Zsn^ z4SrzXI`*&QiNbbjSpCT>*fhRR8CHe9S^J9Ws`8tzr8boj;MEocaTE4nob`jM;t2KS)Tl?w~sH?v6gyt_k5fR)8u#lV$oHKnhZi?}8H^$cD zEz)D!CUEZD!8Cz2OA_=bnTg4`|35V3jfX)xZH9A~nUxdOPhy5K4Q#$Ba>LcD^lb;+hlpxLQB_x&z8Q;w`n^B}K=R1j z#rh)-2lRK<=7q(;6W_B;mM`^t*9pq7P1+4oFK@aIgpIdDpIS_Ej=Tnq)>9N}lii4e zPverAIUGm;J&L}>Bs}uNgQ}afHv^&8@MgFPjC7d8_JWAWXU>0Ie)bdHYBfZzM_p!BkjLLE{=Qq@`Tn_@Th%WWTij|TDL8!H0ZIc+I|KEs4=k6v zf2WdlLEXVeaMmH*NJ4#4Tii5YGLYzWkltbEhMaNPfIg9EKj~s%(66Jz(25As!4rRq z{KAVTmF`}7Ocw)BeD_28X5i@b&DOu!T7tfiAN!gBt^MEXYu*TLOl17c_{{qHx+eGZ z=RgAJ5&95|foFbZK(^mWj|o+GSDUSDB*O_zKXzyYa8@Dtlz&<#5B$ltTG>JyBxi2| zBpWz8NjU?_46JQ}0}%Zr1+bVz{-(owCP+=77g;E&?n+C4B)CAvR{ovb| z>Ea`Riu-XDJe3>m$IpQT(8KVqxERP| zLWh&AJUM*86$@}rt!&8g?_4Tt*9-tYO?n;z2H6B|FJ0-RZUJPb;>gMbz+i#Pbj3%X zT9X(4O?TKMU1^#mT~>GI2LOe5Eu}6!vTkid_2kQ>e}iAV8V01N35cMbZ+_39yz(IJ zAl0!q2J&Y(gC8D@d4us`T~XiMelZYzVIbO0UB#!7;te=FowUGN`#GpIK#QPE8&R1X z^-gAHaUcP7oBrH#Ykh6|3%1n?` zYcuI8rr1sX9`HT)?h3s5>V(+ktq5;YF5) zE=De2I-rO8EO)yL_y`{DF+7H|EMJGIcB7pq>hZ77)?;9yYi?96lmKeO5-*JN-2Gd&r{ z0RyV0oN~!v*awSqE(p#9G1zo7EB&ws^sEbj^N+7zGa@)cy0U$+u%TbJ$qMNzTw%9H zJjsmGGi?GkXdtXbD^7R~JLf}v^3)3K$>>tpu!S$ynKtY0{n*t3se8MfdgRoLx7NJ2 zAG-BIi}QP_Jr7i**co=Oz8QGQ*9Q!o6_^_XcBTf~Pn)%+A9esk<#)BVKo!ef!!s z)n(D<*nWnWIr0fOSusI4fqe>`aREsG!pEPGFJ1bWris!l76pT3#nf@~1+{>IGbSp5 znUgkCX*ek>=7B0COyX#pY6M{bY|zvj#bB45e)RePDo|S>4E1I^%G$s%05q;YfBqaf z@`S|((hitCXal5`sHTB58ST(sNRwtrm;R}=ci2_m47{p8^lQC;tu*TW0pwUG+Ncv= z;(vSo`xV?9|YY9Mt>t z%O&Av>06z-k-m8I#V!pj2>$vP>-BJ{B_%sG$WhRV;2do2*H$0m<{PEvATc8j{SGNQ z_J8PCfHVM^piCQG4%(SNt95eCR1PG7jy+32f_Izk+1-BPF)Xv02a_gzPEMnKb?Z9$ z<8Rg)D7U~l%hQ^`1ZPgtFi{;qbJ8ks=XOi9@}cWESu;CK?jU^`P*A72NPsxR+F4r{0 zCnC@@{`0BDZ1$V&fUyO^>L*_`Ap0HA2$cp~k%XckAWhhZGPaE*X>pJl$lB(k>>XO>$0nvs)82&RPkoud_96ycYGYa zOdeU5-V7}ADEX&`0|}rbpKbCQxGmhQp{xB0UWz|>T^hg!LxA=Z9c~})-Po#TKozoY z)K6JCz8)Z6Ov3_woft+NyEX9Gjx+5q#v&Ri1!BS4CtF5U2bm%=D%uV;~-0~Hyz$!gB>N}AQeMh1%I>y&!F}I??zT> zpbXYKD=)cb8wV0V#~!!Io=KT|zO*4nooapq>7he|K!F&#i=g4dIpKWRP^wwTNa+|~ zEWZpq%hEDmR$|`8Jg`SHJ}t|qJzQSW9xg4@kWN|Jvhta}Xfv%3M_9LhHXXY)+JDss ze4zB7fir-(wM9OvY!!#u@s#=~ZuPfOaxc%P4M=J#of zaXwAExOU|i)6?(k7{U|~d*&_*;QVh_u9S;TeOTLOPZnV(PD@2(zzJ0jrC>Ox3|%G(kTf@WZ^ax|%``>BEmfKYH zgg8h|x=l(!y37m*E{J11@)q3;qs@5Q2#!q!+adw-Y%mD8cahs(-rB{U$l`Q zd5UyMk2dN0bUqH@q~*&fruT70x6jY=ER8~{E&^gP5IFqV3m=!8f1vx;At|F=*sTjW z3gA3M-|PT-$WDzYHMhW-53Qh?nSA}S@Z_4^97q5?ivIt`<#pL=TRm&}g|^63jXOI$ z5P3I9dT{VXj0IqrZ@4^+E0)i^MVsjnKAao$a4}sOedH$%ACEBa4@BY*(~~aad^ld9 zL4I6JS4IzcSXMEe&yTpOej^ay39M9Y$lr5UpImXlGI{7hY&&cR%*YwRnL6VfIIH@i z1<08y!*tS_8iW#eCNU>)24|BQnFDE&F!IO%!lcvi=3kJcRJ?*NGVFAy>ldDDvg58g zCGiCkY*AAH@xTI7MZjPe;0RC6K<_57wQc%k>L4ENIx z_YcTT-(Rht^;#(#HbeyFAQW2F~DbGKmAj zaUcP7TEZagh45Vk2lD)?qudpaU$2*vJAqR*+4UC(G zBq(`lp3jmTy}*dzgKL)`@1)Q+{o~@fCM7sgsokeav zKXA?*#7<{afwPUyt2Ia8*`R*)=;bQAhPMQS9?4Q&^m3HC;%S;c ziQ1}On9&CFh7IYP#3`mddV%H(Jfw5Hk@po&ms}iHL)eXIfR)DWF%xXjT$7lA@f=M? zYxS{xKyT-B(TBM)=P}k&3abDRh4T&dqcXcoc&%^O*^cDG$4S~E4;i0Cdj%@@aULUz zq-1ba(S++vc_;#Bp2Mx4uRQJIf$M%j|D-K}EEf^nb;JqzA@&fP=A7f)s4?+mvwh7J zn-5N8*p7{9LCr9Z^;&3W!4`SPL9kCnVoiJtt1ydmqE7B0cjtm!utOK-9(ZucT5-9P zGvC7W9n@j;sW&BA?a{qEGm{K>Klj|rt1km`e$R21PAxq<7(9N&RS>lN({glZ~}J@K3yoftn9D$d4EvSh&pdjt3IhdIg_Bct7`QI zEOj}3EV-Tr8rl4t>XZEIW36xXW&;{SGp_Pl9OzS%+|7;?MJQdEGov)OoLLf*FG~=; z8bnc*`}PqAU_GUXN5?Xxz4R&VWzQK`KUkpRryY4JU!D2hi3p>eRYQm&okyK}3qJ>` zxt*@-YNWD_LS^fk$t=q*O|vBB+Yzrz=4IX(Cb1VC9-A3cO~UhtnTAG8c7}P=i0giW z%=cb=kyIxM*<(69pb-_p)p&C15~>mU68KsJ$F+DI3G9{P{Bm&6&4xML8=-=>cA+9M zjS)^Rj)kj+hTWFiO#-KILQv(@4X!|6wf2+#kL6_m%@yi;gU8UADA%{<4OvIUILrpF zZo^BnOtDJNlKj&XgNC|~K~^dO;~p04Lxq5>ZM#=`z#sV6S5CYGOMtcuvzmC4La$Jg zQu$|gZOOJm&h_J59dDFhw~?6eSMK(*3U*<>zWrXS+r}nxs%!Q#1NeZJsMC0+UVgfm z6mU3GXF0=$?%fczaYWE=Gaq#?hgFX}Vm|uB+O7O{ATyWhZx3 zOHU1T#%GAE)dQ@X>b^UI_ShP)yl|7&OL@CNdD?;x(N{RMMdIY9okOgi!JLdoAeqq- z1@YZHZ&s}(Z$6qd7m|(pX_gEXa?CcgVCzg2d~bIt({Rf){_(A|eb`JX4LWY#y43qq zzZhMyrF4PYai#qJQ*J4&ds<1?AAP5+Wq# z&!`W&K9d8tEo?pcxI_A#e7A{e*I48PQlOtGvXE10BO{YeXBN#oN4Fo|M1_t2iZOWf zjo^Ep2WIlk?O?{>qpeq~92Ik4#EvSb?zv4{V{O0YIt9iv#pmy&G9|N4@ z8DHo~gT`9okI4D+WJ{y=c8&d}+9V4t>w{PRd6ikLhuTQ8kfu$Dl98yWLY}c2i@8tP z9V^x%C7Zp7etgdH)tDf?DxfcK9d~OFz{ybdnKy072YQ@6O<3k)YeOa z&xWt64+2GJ+-jsfG;7G zqLU$>q{}Q48~yxvIef-LL7gyi?-8WhX9&7|x_A%cy^BeKR_=5aewv<$y+W;5@jfK- zyf|;{E`xUz<;?FtL~Q=jj@BiRF0e$d^$d%3XXIdsgvK-|w#B)G(HIf5^(`SZ}D5L269xtP&Oi%Pv(?`ST1d36qB9vS-!$go9mFVkcxDW|?qPu^jB8fDd zYn=`E)uJnF2j|t%n|=<<(ZHUQD${rpU+)4sY)|s2TcxLhAHv!^CO1IoxVAI z17x*7leZpq1xG+ve383e^K=o9_Dhlpii?`y$chOEL*d8H@-#X65>kgyz7Z<&fpI?C z+*!}c5)RMF-|lI~1C;dNTvvYNDbf=$TMQ9_ea9=@EPvd2XY*H8uJ}yHrJ`DS*iIy% z{rW~U_=tTJdEYHtCxt~}tEWOwNc*x&dtWL@O#FLpkuDyVmwDV&R#DO1dRFeaU$#Ov z#L285!a{%#Rep~#_(uBd8_6>`;hR^}M*HcLY4?MR>iNbN-UW3EOEuIblu23l{23mV z!~%ViS4pIIQ8q<#x43Wd+5PV{H_ry> zCC+4<57UEx!S?-mMCg8!5e+dZp1vpNtkKY-q@`^Kpp+2s&A3b6mtMg>&s|9|8KXy- z&R)C>#@iBw1Qts9&|#p9CXZHlXXMi+2;~%Qgv*mbz?H?6 z9>047qx0nJV_pUdnQmBLLIG_qZQ3FUI-x%4eax&5_(oHYTok54h>6@RLeF7Q5siuz16at4XnJ;@?2jLiE7moOX zE`AIJ;9ohIe*hi#d0dk!q5VHAvLv{-LN@H^;0yV7R zJ~{^06Zn#P2R8ZFD5@Z4Bjsv(+p>}4#Cwe)ibM8 zdhqUgiS<~SyixkleMhHzehFH9mm@PuDK9fSM=@qmpTnO zb~9=gr%surm-aFgB!QnnmHu$GZPmk7Tnh_^T207mE*2F1V7H~|5TpMJsN>yUSfh^Z zX{k-X9HhDp-MfU>_b4WjJTe*|bF?qE3mdHBTgZq!>V2kOD2a_NMghljcGS!hNGlWU zJ3$`euC8rx`vF9qCy03ugJbFw>Gw zKSAuOVd_mj4_g8pMP}swF3Op~J!=}_m_q8tX)wLs> z$G8Y|_|~ zAO;G(KU=^ng$(D&FL=)YY-!i&)=Wm~#%4xOBJNY>1F;%ZL#nqDg1jY>pq2dB_yp%^ zrmWzidFx|29~53|=a}SEf3v|4%tgy&jm!TMqlkxij)4!ysQvI4fotNEikx1OjO@%a z?@Vco&i<;O??Yl2fhunWck+XK5ICjTzKTYJ_e%;NaF_eHUHSq+i&S~@>vokW1gwDM z?fA_(nN}TJ6)tbC9Mz_CjrY9m$2`@=%x!@5w4Y2Xn{lY%1qRSME-bjD>V~;p{hwZ1 zpF)V`gn_|O>7qD2xC*+mV@#)Jr;XnrzTVEH`TQ46e1d5AkBr#{qkhraEq4?NI2o~# zZ8ilPHB_kCEO#Y=nUcS45s+ZKt;pq0p8QZ}z-osVgpjRoW9fdIH7uUi(HnsX^}nwp zLdaIGWh7_6Ydaeyeve(~(1OZPtNK>1RD|`PaTouwqS1Tw*D1ZSNSK*Po-D0sD&Hk& z)cSV<8OfB4-gfhF<(7Yv|JzM}1)qK6*P=t+>U?Z+TJ&{zDqXYo`xE1i4Y$fR=P#!& zj}zWn7u{hBmTEJ~_I1PIHcM^4oH=#9>+)=`zQ(#TXjl0pvb9IG4Xz&{QIE&f2 zeC00+d+eU;;gVmtT0S;oZ6!6~oy~|pjHM87)!y?6TwneY=&x9%*n%W90t~R6m-O_(lYw5jv12o@W|7+lK2egD9 zzJjOL|72!=@%wy)EQ07TRkx*u%gkKkVFB@UQ9x?qNC}?%2_D?T(?2r`02npu~)DpU_RIF z@;(2-vbjC&biV^8e=_)ciN%()*%E#7R(6XS<7ibn=1g^$J23eBTShMcd~`GoH7ahP GL;nxy#aciB literal 0 HcmV?d00001 diff --git a/sample apps/flutterflow-prebuilt-quickstart/web/icons/Icon-192.png b/sample apps/flutterflow-prebuilt-quickstart/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 zcmZ`-2T+sGz6~)*FVZ`aW+(v>MIm&M-g^@e2u-B-DoB?qO+b1Tq<5uCCv>ESfRum& zp%X;f!~1{tzL__3=gjVJ=j=J>+nMj%ncXj1Q(b|Ckbw{Y0FWpt%4y%$uD=Z*c-x~o zE;IoE;xa#7Ll5nj-e4CuXB&G*IM~D21rCP$*xLXAK8rIMCSHuSu%bL&S3)8YI~vyp@KBu9Ph7R_pvKQ@xv>NQ`dZp(u{Z8K3yOB zn7-AR+d2JkW)KiGx0hosml;+eCXp6+w%@STjFY*CJ?udJ64&{BCbuebcuH;}(($@@ znNlgBA@ZXB)mcl9nbX#F!f_5Z=W>0kh|UVWnf!At4V*LQP%*gPdCXd6P@J4Td;!Ur z<2ZLmwr(NG`u#gDEMP19UcSzRTL@HsK+PnIXbVBT@oHm53DZr?~V(0{rsalAfwgo zEh=GviaqkF;}F_5-yA!1u3!gxaR&Mj)hLuj5Q-N-@Lra{%<4ONja8pycD90&>yMB` zchhd>0CsH`^|&TstH-8+R`CfoWqmTTF_0?zDOY`E`b)cVi!$4xA@oO;SyOjJyP^_j zx^@Gdf+w|FW@DMdOi8=4+LJl$#@R&&=UM`)G!y%6ZzQLoSL%*KE8IO0~&5XYR9 z&N)?goEiWA(YoRfT{06&D6Yuu@Qt&XVbuW@COb;>SP9~aRc+z`m`80pB2o%`#{xD@ zI3RAlukL5L>px6b?QW1Ac_0>ew%NM!XB2(H+1Y3AJC?C?O`GGs`331Nd4ZvG~bMo{lh~GeL zSL|tT*fF-HXxXYtfu5z+T5Mx9OdP7J4g%@oeC2FaWO1D{=NvL|DNZ}GO?O3`+H*SI z=grGv=7dL{+oY0eJFGO!Qe(e2F?CHW(i!!XkGo2tUvsQ)I9ev`H&=;`N%Z{L zO?vV%rDv$y(@1Yj@xfr7Kzr<~0{^T8wM80xf7IGQF_S-2c0)0D6b0~yD7BsCy+(zL z#N~%&e4iAwi4F$&dI7x6cE|B{f@lY5epaDh=2-(4N05VO~A zQT3hanGy_&p+7Fb^I#ewGsjyCEUmSCaP6JDB*=_()FgQ(-pZ28-{qx~2foO4%pM9e z*_63RT8XjgiaWY|*xydf;8MKLd{HnfZ2kM%iq}fstImB-K6A79B~YoPVa@tYN@T_$ zea+9)<%?=Fl!kd(Y!G(-o}ko28hg2!MR-o5BEa_72uj7Mrc&{lRh3u2%Y=Xk9^-qa zBPWaD=2qcuJ&@Tf6ue&)4_V*45=zWk@Z}Q?f5)*z)-+E|-yC4fs5CE6L_PH3=zI8p z*Z3!it{1e5_^(sF*v=0{`U9C741&lub89gdhKp|Y8CeC{_{wYK-LSbp{h)b~9^j!s z7e?Y{Z3pZv0J)(VL=g>l;<}xk=T*O5YR|hg0eg4u98f2IrA-MY+StQIuK-(*J6TRR z|IM(%uI~?`wsfyO6Tgmsy1b3a)j6M&-jgUjVg+mP*oTKdHg?5E`!r`7AE_#?Fc)&a z08KCq>Gc=ne{PCbRvs6gVW|tKdcE1#7C4e`M|j$C5EYZ~Y=jUtc zj`+?p4ba3uy7><7wIokM79jPza``{Lx0)zGWg;FW1^NKY+GpEi=rHJ+fVRGfXO zPHV52k?jxei_!YYAw1HIz}y8ZMwdZqU%ESwMn7~t zdI5%B;U7RF=jzRz^NuY9nM)&<%M>x>0(e$GpU9th%rHiZsIT>_qp%V~ILlyt^V`=d z!1+DX@ah?RnB$X!0xpTA0}lN@9V-ePx>wQ?-xrJr^qDlw?#O(RsXeAvM%}rg0NT#t z!CsT;-vB=B87ShG`GwO;OEbeL;a}LIu=&@9cb~Rsx(ZPNQ!NT7H{@j0e(DiLea>QD zPmpe90gEKHEZ8oQ@6%E7k-Ptn#z)b9NbD@_GTxEhbS+}Bb74WUaRy{w;E|MgDAvHw zL)ycgM7mB?XVh^OzbC?LKFMotw3r@i&VdUV%^Efdib)3@soX%vWCbnOyt@Y4swW925@bt45y0HY3YI~BnnzZYrinFy;L?2D3BAL`UQ zEj))+f>H7~g8*VuWQ83EtGcx`hun$QvuurSMg3l4IP8Fe`#C|N6mbYJ=n;+}EQm;< z!!N=5j1aAr_uEnnzrEV%_E|JpTb#1p1*}5!Ce!R@d$EtMR~%9# zd;h8=QGT)KMW2IKu_fA_>p_und#-;Q)p%%l0XZOXQicfX8M~7?8}@U^ihu;mizj)t zgV7wk%n-UOb z#!P5q?Ex+*Kx@*p`o$q8FWL*E^$&1*!gpv?Za$YO~{BHeGY*5%4HXUKa_A~~^d z=E*gf6&+LFF^`j4$T~dR)%{I)T?>@Ma?D!gi9I^HqvjPc3-v~=qpX1Mne@*rzT&Xw zQ9DXsSV@PqpEJO-g4A&L{F&;K6W60D!_vs?Vx!?w27XbEuJJP&);)^+VF1nHqHBWu z^>kI$M9yfOY8~|hZ9WB!q-9u&mKhEcRjlf2nm_@s;0D#c|@ED7NZE% zzR;>P5B{o4fzlfsn3CkBK&`OSb-YNrqx@N#4CK!>bQ(V(D#9|l!e9(%sz~PYk@8zt zPN9oK78&-IL_F zhsk1$6p;GqFbtB^ZHHP+cjMvA0(LqlskbdYE_rda>gvQLTiqOQ1~*7lg%z*&p`Ry& zRcG^DbbPj_jOKHTr8uk^15Boj6>hA2S-QY(W-6!FIq8h$<>MI>PYYRenQDBamO#Fv zAH5&ImqKBDn0v5kb|8i0wFhUBJTpT!rB-`zK)^SNnRmLraZcPYK7b{I@+}wXVdW-{Ps17qdRA3JatEd?rPV z4@}(DAMf5EqXCr4-B+~H1P#;t@O}B)tIJ(W6$LrK&0plTmnPpb1TKn3?f?Kk``?D+ zQ!MFqOX7JbsXfQrz`-M@hq7xlfNz;_B{^wbpG8des56x(Q)H)5eLeDwCrVR}hzr~= zM{yXR6IM?kXxauLza#@#u?Y|o;904HCqF<8yT~~c-xyRc0-vxofnxG^(x%>bj5r}N zyFT+xnn-?B`ohA>{+ZZQem=*Xpqz{=j8i2TAC#x-m;;mo{{sLB_z(UoAqD=A#*juZ zCv=J~i*O8;F}A^Wf#+zx;~3B{57xtoxC&j^ie^?**T`WT2OPRtC`xj~+3Kprn=rVM zVJ|h5ux%S{dO}!mq93}P+h36mZ5aZg1-?vhL$ke1d52qIiXSE(llCr5i=QUS?LIjc zV$4q=-)aaR4wsrQv}^shL5u%6;`uiSEs<1nG^?$kl$^6DL z43CjY`M*p}ew}}3rXc7Xck@k41jx}c;NgEIhKZ*jsBRZUP-x2cm;F1<5$jefl|ppO zmZd%%?gMJ^g9=RZ^#8Mf5aWNVhjAS^|DQO+q$)oeob_&ZLFL(zur$)); zU19yRm)z<4&4-M}7!9+^Wl}Uk?`S$#V2%pQ*SIH5KI-mn%i;Z7-)m$mN9CnI$G7?# zo`zVrUwoSL&_dJ92YhX5TKqaRkfPgC4=Q&=K+;_aDs&OU0&{WFH}kKX6uNQC6%oUH z2DZa1s3%Vtk|bglbxep-w)PbFG!J17`<$g8lVhqD2w;Z0zGsh-r zxZ13G$G<48leNqR!DCVt9)@}(zMI5w6Wo=N zpP1*3DI;~h2WDWgcKn*f!+ORD)f$DZFwgKBafEZmeXQMAsq9sxP9A)7zOYnkHT9JU zRA`umgmP9d6=PHmFIgx=0$(sjb>+0CHG)K@cPG{IxaJ&Ueo8)0RWgV9+gO7+Bl1(F z7!BslJ2MP*PWJ;x)QXbR$6jEr5q3 z(3}F@YO_P1NyTdEXRLU6fp?9V2-S=E+YaeLL{Y)W%6`k7$(EW8EZSA*(+;e5@jgD^I zaJQ2|oCM1n!A&-8`;#RDcZyk*+RPkn_r8?Ak@agHiSp*qFNX)&i21HE?yuZ;-C<3C zwJGd1lx5UzViP7sZJ&|LqH*mryb}y|%AOw+v)yc`qM)03qyyrqhX?ub`Cjwx2PrR! z)_z>5*!*$x1=Qa-0uE7jy0z`>|Ni#X+uV|%_81F7)b+nf%iz=`fF4g5UfHS_?PHbr zB;0$bK@=di?f`dS(j{l3-tSCfp~zUuva+=EWxJcRfp(<$@vd(GigM&~vaYZ0c#BTs z3ijkxMl=vw5AS&DcXQ%eeKt!uKvh2l3W?&3=dBHU=Gz?O!40S&&~ei2vg**c$o;i89~6DVns zG>9a*`k5)NI9|?W!@9>rzJ;9EJ=YlJTx1r1BA?H`LWijk(rTax9(OAu;q4_wTj-yj z1%W4GW&K4T=uEGb+E!>W0SD_C0RR91 literal 0 HcmV?d00001 diff --git a/sample apps/flutterflow-prebuilt-quickstart/web/icons/Icon-512.png b/sample apps/flutterflow-prebuilt-quickstart/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 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 literal 0 HcmV?d00001 diff --git a/sample apps/flutterflow-prebuilt-quickstart/web/index.html b/sample apps/flutterflow-prebuilt-quickstart/web/index.html new file mode 100644 index 000000000..5ccbc08e5 --- /dev/null +++ b/sample apps/flutterflow-prebuilt-quickstart/web/index.html @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + hms-room-kit-sample + + + + + + + + + + + + + + + + + + + +