From 20f3bbe0b58cd9473cc6b879ed5408b65df34e2f Mon Sep 17 00:00:00 2001 From: h7x4 Date: Tue, 15 Apr 2025 13:58:16 +0200 Subject: [PATCH] WIP --- example_app/.gitignore | 47 ++ example_app/.metadata | 42 ++ example_app/README.md | 16 + example_app/analysis_options.yaml | 29 + example_app/android/.gitignore | 13 + example_app/android/app/build.gradle | 71 +++ .../android/app/src/debug/AndroidManifest.xml | 8 + .../android/app/src/main/AndroidManifest.xml | 34 ++ .../com/example/example_app/MainActivity.kt | 6 + .../res/drawable-v21/launch_background.xml | 12 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/styles.xml | 18 + .../app/src/profile/AndroidManifest.xml | 8 + example_app/android/build.gradle | 31 + example_app/android/gradle.properties | 3 + .../gradle/wrapper/gradle-wrapper.properties | 6 + example_app/android/settings.gradle | 11 + example_app/assets | 1 + example_app/ios/.gitignore | 34 ++ .../ios/Flutter/AppFrameworkInfo.plist | 26 + example_app/ios/Flutter/Debug.xcconfig | 1 + example_app/ios/Flutter/Release.xcconfig | 1 + .../ios/Runner.xcodeproj/project.pbxproj | 481 +++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 87 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + example_app/ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 ++++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 564 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 1588 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 1025 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 1716 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 1920 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 1895 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 3831 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 1888 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 3294 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 3612 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/README.md | 5 + .../Runner/Base.lproj/LaunchScreen.storyboard | 37 ++ .../ios/Runner/Base.lproj/Main.storyboard | 26 + example_app/ios/Runner/Info.plist | 49 ++ .../ios/Runner/Runner-Bridging-Header.h | 1 + example_app/kanjivg | 1 + example_app/lib/main.dart | 60 ++ example_app/linux/.gitignore | 1 + example_app/linux/CMakeLists.txt | 138 +++++ example_app/linux/flutter/CMakeLists.txt | 88 +++ .../flutter/generated_plugin_registrant.cc | 11 + .../flutter/generated_plugin_registrant.h | 15 + .../linux/flutter/generated_plugins.cmake | 23 + example_app/linux/main.cc | 6 + example_app/linux/my_application.cc | 104 ++++ example_app/linux/my_application.h | 18 + example_app/macos/.gitignore | 7 + .../macos/Flutter/Flutter-Debug.xcconfig | 1 + .../macos/Flutter/Flutter-Release.xcconfig | 1 + .../Flutter/GeneratedPluginRegistrant.swift | 10 + .../macos/Runner.xcodeproj/project.pbxproj | 572 ++++++++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 87 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + example_app/macos/Runner/AppDelegate.swift | 9 + .../AppIcon.appiconset/Contents.json | 68 +++ .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 46993 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 3276 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 1429 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 5933 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1243 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 14800 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 1874 bytes .../macos/Runner/Base.lproj/MainMenu.xib | 343 +++++++++++ .../macos/Runner/Configs/AppInfo.xcconfig | 14 + .../macos/Runner/Configs/Debug.xcconfig | 2 + .../macos/Runner/Configs/Release.xcconfig | 2 + .../macos/Runner/Configs/Warnings.xcconfig | 13 + .../macos/Runner/DebugProfile.entitlements | 12 + example_app/macos/Runner/Info.plist | 32 + .../macos/Runner/MainFlutterWindow.swift | 15 + example_app/macos/Runner/Release.entitlements | 8 + example_app/pubspec.lock | 245 ++++++++ example_app/pubspec.yaml | 21 + example_app/web/favicon.png | Bin 0 -> 917 bytes example_app/web/icons/Icon-192.png | Bin 0 -> 5292 bytes example_app/web/icons/Icon-512.png | Bin 0 -> 8252 bytes example_app/web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes example_app/web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes example_app/web/index.html | 58 ++ example_app/web/manifest.json | 35 ++ 109 files changed, 3381 insertions(+) create mode 100644 example_app/.gitignore create mode 100644 example_app/.metadata create mode 100644 example_app/README.md create mode 100644 example_app/analysis_options.yaml create mode 100644 example_app/android/.gitignore create mode 100644 example_app/android/app/build.gradle create mode 100644 example_app/android/app/src/debug/AndroidManifest.xml create mode 100644 example_app/android/app/src/main/AndroidManifest.xml create mode 100644 example_app/android/app/src/main/kotlin/com/example/example_app/MainActivity.kt create mode 100644 example_app/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 example_app/android/app/src/main/res/drawable/launch_background.xml create mode 100644 example_app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 example_app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 example_app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 example_app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 example_app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 example_app/android/app/src/main/res/values-night/styles.xml create mode 100644 example_app/android/app/src/main/res/values/styles.xml create mode 100644 example_app/android/app/src/profile/AndroidManifest.xml create mode 100644 example_app/android/build.gradle create mode 100644 example_app/android/gradle.properties create mode 100644 example_app/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 example_app/android/settings.gradle create mode 120000 example_app/assets create mode 100644 example_app/ios/.gitignore create mode 100644 example_app/ios/Flutter/AppFrameworkInfo.plist create mode 100644 example_app/ios/Flutter/Debug.xcconfig create mode 100644 example_app/ios/Flutter/Release.xcconfig create mode 100644 example_app/ios/Runner.xcodeproj/project.pbxproj create mode 100644 example_app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 example_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 example_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 example_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 example_app/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 example_app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 example_app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 example_app/ios/Runner/AppDelegate.swift create mode 100644 example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 example_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 example_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 example_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 example_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 example_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 example_app/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 example_app/ios/Runner/Base.lproj/Main.storyboard create mode 100644 example_app/ios/Runner/Info.plist create mode 100644 example_app/ios/Runner/Runner-Bridging-Header.h create mode 160000 example_app/kanjivg create mode 100644 example_app/lib/main.dart create mode 100644 example_app/linux/.gitignore create mode 100644 example_app/linux/CMakeLists.txt create mode 100644 example_app/linux/flutter/CMakeLists.txt create mode 100644 example_app/linux/flutter/generated_plugin_registrant.cc create mode 100644 example_app/linux/flutter/generated_plugin_registrant.h create mode 100644 example_app/linux/flutter/generated_plugins.cmake create mode 100644 example_app/linux/main.cc create mode 100644 example_app/linux/my_application.cc create mode 100644 example_app/linux/my_application.h create mode 100644 example_app/macos/.gitignore create mode 100644 example_app/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 example_app/macos/Flutter/Flutter-Release.xcconfig create mode 100644 example_app/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 example_app/macos/Runner.xcodeproj/project.pbxproj create mode 100644 example_app/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 example_app/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 example_app/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 example_app/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 example_app/macos/Runner/AppDelegate.swift create mode 100644 example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 example_app/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 example_app/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 example_app/macos/Runner/Configs/Debug.xcconfig create mode 100644 example_app/macos/Runner/Configs/Release.xcconfig create mode 100644 example_app/macos/Runner/Configs/Warnings.xcconfig create mode 100644 example_app/macos/Runner/DebugProfile.entitlements create mode 100644 example_app/macos/Runner/Info.plist create mode 100644 example_app/macos/Runner/MainFlutterWindow.swift create mode 100644 example_app/macos/Runner/Release.entitlements create mode 100644 example_app/pubspec.lock create mode 100644 example_app/pubspec.yaml create mode 100644 example_app/web/favicon.png create mode 100644 example_app/web/icons/Icon-192.png create mode 100644 example_app/web/icons/Icon-512.png create mode 100644 example_app/web/icons/Icon-maskable-192.png create mode 100644 example_app/web/icons/Icon-maskable-512.png create mode 100644 example_app/web/index.html create mode 100644 example_app/web/manifest.json diff --git a/example_app/.gitignore b/example_app/.gitignore new file mode 100644 index 0000000..a8e938c --- /dev/null +++ b/example_app/.gitignore @@ -0,0 +1,47 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Web related +lib/generated_plugin_registrant.dart + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/example_app/.metadata b/example_app/.metadata new file mode 100644 index 0000000..c029c71 --- /dev/null +++ b/example_app/.metadata @@ -0,0 +1,42 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled. + +version: + revision: 676cefaaff197f27424942307668886253e1ec35 + channel: stable + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: 676cefaaff197f27424942307668886253e1ec35 + base_revision: 676cefaaff197f27424942307668886253e1ec35 + - platform: android + create_revision: 676cefaaff197f27424942307668886253e1ec35 + base_revision: 676cefaaff197f27424942307668886253e1ec35 + - platform: ios + create_revision: 676cefaaff197f27424942307668886253e1ec35 + base_revision: 676cefaaff197f27424942307668886253e1ec35 + - platform: linux + create_revision: 676cefaaff197f27424942307668886253e1ec35 + base_revision: 676cefaaff197f27424942307668886253e1ec35 + - platform: macos + create_revision: 676cefaaff197f27424942307668886253e1ec35 + base_revision: 676cefaaff197f27424942307668886253e1ec35 + - platform: web + create_revision: 676cefaaff197f27424942307668886253e1ec35 + base_revision: 676cefaaff197f27424942307668886253e1ec35 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/example_app/README.md b/example_app/README.md new file mode 100644 index 0000000..6289e6a --- /dev/null +++ b/example_app/README.md @@ -0,0 +1,16 @@ +# example_app + +A new Flutter project. + +## Getting Started + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) + +For help getting started with Flutter development, view the +[online documentation](https://docs.flutter.dev/), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/example_app/analysis_options.yaml b/example_app/analysis_options.yaml new file mode 100644 index 0000000..61b6c4d --- /dev/null +++ b/example_app/analysis_options.yaml @@ -0,0 +1,29 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at + # https://dart-lang.github.io/linter/lints/index.html. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/example_app/android/.gitignore b/example_app/android/.gitignore new file mode 100644 index 0000000..6f56801 --- /dev/null +++ b/example_app/android/.gitignore @@ -0,0 +1,13 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +key.properties +**/*.keystore +**/*.jks diff --git a/example_app/android/app/build.gradle b/example_app/android/app/build.gradle new file mode 100644 index 0000000..9af0702 --- /dev/null +++ b/example_app/android/app/build.gradle @@ -0,0 +1,71 @@ +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterRoot = localProperties.getProperty('flutter.sdk') +if (flutterRoot == null) { + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +android { + compileSdkVersion flutter.compileSdkVersion + ndkVersion flutter.ndkVersion + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' + } + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.example.example_app" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. + minSdkVersion flutter.minSdkVersion + targetSdkVersion flutter.targetSdkVersion + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig signingConfigs.debug + } + } +} + +flutter { + source '../..' +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" +} diff --git a/example_app/android/app/src/debug/AndroidManifest.xml b/example_app/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..d21f419 --- /dev/null +++ b/example_app/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + diff --git a/example_app/android/app/src/main/AndroidManifest.xml b/example_app/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..b0643d5 --- /dev/null +++ b/example_app/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + diff --git a/example_app/android/app/src/main/kotlin/com/example/example_app/MainActivity.kt b/example_app/android/app/src/main/kotlin/com/example/example_app/MainActivity.kt new file mode 100644 index 0000000..e2aac0d --- /dev/null +++ b/example_app/android/app/src/main/kotlin/com/example/example_app/MainActivity.kt @@ -0,0 +1,6 @@ +package com.example.example_app + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() { +} diff --git a/example_app/android/app/src/main/res/drawable-v21/launch_background.xml b/example_app/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000..f74085f --- /dev/null +++ b/example_app/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/example_app/android/app/src/main/res/drawable/launch_background.xml b/example_app/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..304732f --- /dev/null +++ b/example_app/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/example_app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/example_app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0y~yVDJE84rT@hh9qO>QU(SF$r9IylHmNblJdl&R0hYC z{G?O`&)mfH)S%SFl*+=BsWuD@4C?}XLR=Xb7#RJ!7{h04Zu=H;^aq4w44VZJaXaum zG@>0o`I5 z6U6gpN>(hBs@ovlyiK}omrVN}&28UY_JdsVcA=Cl0|SF_NswPKgMfg5KtMnO2sE4r zf%}pIPku2lFue41aSVw#{PxUsz9t6&hrp0GdlTMw^~h@f`fs1s!olsWbZ#C0v7PJ9 zExVjNeb(Ol`RU07XFf|X@qSK7qke0_C&kUH>MnD(8u-mi5B zt(&|xZ@%@sBNk%nt_5+E&U1QAlyT>>sMB2Zd5T5*R3&Sld5=98o%0qdm+@@-JjKB8 z(xcUiGOB?O=e)LCdt!o~wXBiQlFwyn4J{(JaZG%Q-e|yQz{EjrrIztFmwg@gt#&=FffMC4mtWmbKAF&qdyqKXG0ipk&vT5 zAmZ%d{SXF=bCKq@Z-GZZ;tV#~j83JDzFmxd-Hahq8AGNqhE8V;o5>h9i!po_WB6=l zU2kT?Kvt(bR^JA;;7+;DUGlvL6sMk6nsrHO&Q;BA-wby`jSBSdXJueu5G@Jv3uX`y zP*5;1FzBB@fBpXR=g+?ff&5MV!VC-yOFdm2Lp+YZy>e2h$w0vMVh8iNMNLhM)++IJ z{QqCg*LgRGXKpKZaOLSMJFo8MNc{figWv3mbJp+w-BoBm(|-hT|4dcbJ2lEyX!??Y`jpZ81*D{;rF6b`?;0>>pbJRKPRw2)?8wK8GH9> zL)n=k&vkA#ITl(SSsBW`??>AG{pM|AK2Jc#t6>y4N#$)H8ZEGkUc!`m{6pbTImMF#2{f z`gJk-_b~?aGX_m$44TXsJQ-wH$W+GA>5O4B7{g{VhRtFOpT!tHo5?tW$tsn}K99+{ zjLE&4*|Uz>tC88eNi3sZJbQ{n(LBkDd1t=Sn-plsE283-d*czTa-zm@iQD#kujt@|Kvt4hp|H z71QJA-@DE-vCc=}m3vdfeqD}l&W>B;IduNM%M_}RPx;yPVrk2E_T?&?d+vqXsA}xF zGk52_Ny78;-$vOoENNLjTll#WOG?YLuZ?eO;uVxk)@?h*_~6>qo(~l}_f@BaD>p=c zm>yaWRpaQm|`^KGX?!;c=*_;KycpYksb1 rdBk${xlomwC<})`ozHbP0l+XkKcl<5t literal 0 HcmV?d00001 diff --git a/example_app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/example_app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f1c8d34e7a88e3f88bea192c3a370d44689c3c GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0y~yV3+{H9Lx+13>Rhybuln7NS3%plmzFem6RtIr7}3C z$Dctjh(SM?K|h4SAdJB{hQT_6!9JhSFr3jep3y9U z(L9OKDxJ|flhG!d(I$t{HiywRm(ebd(Y}z;v6#`Zgwd&#(Yb=rrHawDn$fL>(XE!z zt&Y*Xj?trm(W8;kvysuWiP5u}(X)lotC`WOh0&*-(Wisaw}a8QlhLo6(XWTmzlYJk zmocD^F|eO8Z~|lCM8?2Lj6o9_gC>F8A3T{ccnV|4RK}2LjG@yRLuW9C&0q|h$rv_^ zF?<$d_-uBwU=HgjPRC?Uw`?x2A}+rQ?!a2^kVfvX7VhwN?#NE=s4niP9-inPl?69d z7T#1{bVqf`J=LWT)RsR~Tk%+JQT9|ZQFKYxDR#LKT37?|`uT^vIyZoR#b9vmDf()v(?iz7_L)oF78 zkJJ<)r8pUt8M$!5-N#*39u$gn zR>-(G$wg0`aolam=a?PG9$oC(GH>-!X0d*^l*gJvuFJp95x7~EvFLL3EEhhxt`pq; z%_lBC*86lUSiR`uj?O)w{s`}^n&Wz}@?RH+ochG+^SU~oY!t72t=ZWjXFc({Ty9i< zoXX3Kohi2Ju9xPeP296QFr{gETuR&Xh?K77YDUL{MQ1+I?2fS6ciP3jaR24wmqlki zKfgU-wdbO}>o1>vX;$n~9ltDoY4ItEi|?MFbkSNqMRUkMU-}~Bs z)+NdNzgg`VE)XKX=tVT|2z5{L4{YJjHWS*rIm-E6Ws`IFvdRnm87H fR&jd1QhDAN-h`R^uRUjAU|{fc^>bP0l+XkKAv&s= literal 0 HcmV?d00001 diff --git a/example_app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/example_app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6372eebdb28e45604e46eeda8dd24651419bc0 GIT binary patch literal 1443 zcmeAS@N?(olHy`uVBq!ia0y~yU^oE69Lx+145>_WOc@v$BuiW)N`mv#O3D+9QW+dm z@{>{(JaZG%Q-e|yQz{EjrrIztFy0FA32|j$U7=vLLgJC#>aTJ4T9D`W`gLwjjbtZ#N4x^eAqnb0LmM5cOIHO54qe%>- zNi3sjJfm3xqeU{KMGB*38lzP@qg4i@bta=t7NczrqirsuT`r?t9;018qkTT3eF39G z5u;-~4uK+6lW`UY0|SF-NswPKgMfko7&thbzyBTz-gcI+Wnf^o^K@|x zskrs_3VX0{ph#Pyi^G})N%|2R%{L?-ZV(U%Y+lqcfu(WAio}U)uIrV(+3WUaecD+A zmQ6SJem|Gdo_Kp z-*x@+`J3Y19B#kQTkx(t_`-K<>p6dn#rh_GuokuWC9d+nXX1zFdIcZVw{qEhc&=6O z^|eUFqwV?=KCBk6c(Pr4!l%_@70=G=P581}wBp75D22D-njfy%?{qk*AOB#Z{bq-g z`q2+|)-Q6ns2@Io{eMN{rubzF`u|EA+wSjG@UL6#aQc1N1oQe;4(H#;OmN?SS>~@F ztIeOC+&g|0i+=ccTfE@YZP5>((!~ot`|Cb zb^PFdrt-VXypJEaJ95?T2$v)Ws{O#V4Ednvz`|Pb} zf4VOe!@bWom-}e`tT2YtP3!%mny=z+}-K6mV2ZEt5Icwo(g z%Zr!wX>UAuh9QhqUj7<;)5IBxDQpH>KRz6|eoM6P*rQ_`EdPlXYgN?$U-3W2|NYf9 z3~H?J-^u1!lq%j3KgpL6_~F~TxcJXA&m~w0?N0Rh)m167XXobE9?sqiHmlnth&$|i z@b&H6->;epMCgPeb()B(Tr|RH~O+1PwlVxdT!ROU2OGQ3PvhLeQAwP zO|AMWqpQ}lM;-?Ix_3Z(ZoZK*%HiZ|EUDeVf^rGH<21r@EM zSf|zZ`p5aNP1ut4@|gFs0GYW>Kcl68^QPJ_Y + + + + + + diff --git a/example_app/android/app/src/main/res/values/styles.xml b/example_app/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..cb1ef88 --- /dev/null +++ b/example_app/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/example_app/android/app/src/profile/AndroidManifest.xml b/example_app/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..d21f419 --- /dev/null +++ b/example_app/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + diff --git a/example_app/android/build.gradle b/example_app/android/build.gradle new file mode 100644 index 0000000..83ae220 --- /dev/null +++ b/example_app/android/build.gradle @@ -0,0 +1,31 @@ +buildscript { + ext.kotlin_version = '1.6.10' + repositories { + google() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:7.1.2' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/example_app/android/gradle.properties b/example_app/android/gradle.properties new file mode 100644 index 0000000..94adc3a --- /dev/null +++ b/example_app/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true +android.enableJetifier=true diff --git a/example_app/android/gradle/wrapper/gradle-wrapper.properties b/example_app/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..cc5527d --- /dev/null +++ b/example_app/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.4-all.zip diff --git a/example_app/android/settings.gradle b/example_app/android/settings.gradle new file mode 100644 index 0000000..44e62bc --- /dev/null +++ b/example_app/android/settings.gradle @@ -0,0 +1,11 @@ +include ':app' + +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() + +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/example_app/assets b/example_app/assets new file mode 120000 index 0000000..cb509fa --- /dev/null +++ b/example_app/assets @@ -0,0 +1 @@ +/home/h7x4/git/kanimaji-dart/assets \ No newline at end of file diff --git a/example_app/ios/.gitignore b/example_app/ios/.gitignore new file mode 100644 index 0000000..7a7f987 --- /dev/null +++ b/example_app/ios/.gitignore @@ -0,0 +1,34 @@ +**/dgph +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/ephemeral/ +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/example_app/ios/Flutter/AppFrameworkInfo.plist b/example_app/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 0000000..8d4492f --- /dev/null +++ b/example_app/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 9.0 + + diff --git a/example_app/ios/Flutter/Debug.xcconfig b/example_app/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000..592ceee --- /dev/null +++ b/example_app/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/example_app/ios/Flutter/Release.xcconfig b/example_app/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000..592ceee --- /dev/null +++ b/example_app/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/example_app/ios/Runner.xcodeproj/project.pbxproj b/example_app/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..37b5223 --- /dev/null +++ b/example_app/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,481 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1300; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.exampleApp; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.exampleApp; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.exampleApp; + 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/example_app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/example_app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/example_app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/example_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/example_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/example_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/example_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/example_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/example_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..c87d15a --- /dev/null +++ b/example_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_app/ios/Runner.xcworkspace/contents.xcworkspacedata b/example_app/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/example_app/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/example_app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example_app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/example_app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/example_app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/example_app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/example_app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/example_app/ios/Runner/AppDelegate.swift b/example_app/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000..70693e4 --- /dev/null +++ b/example_app/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import UIKit +import Flutter + +@UIApplicationMain +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d36b1fa --- /dev/null +++ b/example_app/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/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 zcmeAS@N?(olHy`uVBq!ia0y~yU||4Z4kiW$h7a|7u7G&yj=qiz3>*8o|0J?9Ffb@2 zdj$D1FjT2AFf_CEYZQ`Nj$7&&r-9tv@bzJN?=JpBk$!-MM9JoV9=dW8?pwu7NBJ3<|t6y+Q6`U|>jKAb}wP z@+Bh!0|T)Pl1v9FZXm^Uuwph+JwYdHhz%mJCqRlp?qVRtH*lRKG3a0ov7XqFZ91Ky zp=-yFYtOcR=f2*kwYysJ-=qE$>O2e#H@0)<=fu^epDtZ+>1(~szd!s}W7(I@b#Gt@ z_`hNGum4BdrH|jWKFYwr@U{OJJ2L~r75i86JPZs0|5wx-fT#uk4l*z}{A~tHe&q*C zUa?1)JdVo%hrf%7G5};X+;p%dP!~WAfH@DY2HgcH20$fO)E@x39qa;_0Z{*8dI6gO zP|q*^$H)u`ARb5nfkOsr2~-V%00Nud|BD^f0I2gAnF)t5*Z^4YzmkW#0NH@m^;hf@ z7#LR62mEhfWLWUe@ozIDL&Gojul#Hb46o#`*h@ep6BrPZ?thuVl3)43l28LcNr8uf z0Tk8-AP>Jf8_@U$Q662pTQK=I(DcUXoSL31d2n^4PXF8k^5g}2}n#O zpu`j&)8Q^a7{CB^9w^!x7{O_hfeoDOP+WlOyukmM27tmE%>aVV1A77H0;mBC{((&g zzu3W& zujCJa%4VnmxWgLNEyxZH{LcWAbpOi?j%Kh=U&a4j{Euk2@Pi!z%41-MuBc}K`C{=u zMgt-}12-TZlH?F>0Xy`HJp&sg;YdId4#>Ui5QoZxLljif!BQ1S(*5shNQff41zheQ zfCMZ9GXtpHXW)T^I&O!qsE69~l^@|2a1w&LB>|E}8W_Qa7aoUxT@MLSaJazS0u3}Q zZo%$Qc)+3=04fa7JcHc;s82zXh$MtP+CXafU&&(+DrCu5@?fh;3u|Npz&gQR06A~* zKSq#b|1Wm1)x@{}YQO?WlEX9r6wNE@84OTj8)OMy{~@^m$pBCuV_<{CwggJD#GMoZ z|1*Fj-TyL!)5%wUkOAO4b^ww^7?{CzECUa=WSOw-N4@S9`xXCJ?f7%<+SBs=@2vt- zxhsE61-0NHE>jEmFMjVviR_9^kGFp4wQq^0_mAIfToEc~bow_HKezS!z|C@6b_S_oG}E9zH4JiPIMbudKhQr3Hu zLDiN7!wcOHc_9!-mo|Q12x&>(;@-o2)gIIU3rMJVzYyHOY2Z7&n-A1zVrIA^aW5Yl z4kthO1%q`nq_%yZ0nz=!c+YN7wl`o1$Xv&AFC1b~hUtgCAh1%0jg8+YL6q*|eXsOh z31lh{!xia!_8?Oe7#2MIaLy4_Ofxg6wtwdVB}+Dj7nXaXA*MQ9eOS8)((=2-_g(}a;fhL}KE(J7Q!181 z{Tcbl6cS<#wVmPaAcf2fA!>2rP=&MN1jC&m!6dT$Iuj%mFU*Z&g?Q7UcGo|cMJ6k> z*Z%`In=}Hi$AC=YVfdo4ZW|~TBp6l%#iT>cT(;v7B)}E~6y`#GxqR0upA*yX-TO6n z`s{Vgpj6?ocGo=5EB}x0+xqcaRAKGn0#k6~Yu44NbN>Fy|GSU30o42qShp@w>uWyq z0#MK5%j(tB!~Wi805|YNU+-EP`rnKJY}V;rNtsvoL$z#K7a9fAQnGgS6u6es*T0s) zwLIQsgwV2UohMw&mvyTr!nIs|ZH3VCdlwTz%YnMLaL$E;bywk>fWvir;hYOc>XyPe z0mtfk;hYP{>q_CAfRnH6*Z$hh2o8d%$iK_s&NN*8f6J@;Y!0B-@r$&t^WiT0y5`^I zRrS&gpa$%Mg;(q0?w_*dm;dU2xeTB-qr)ZJwf}_IK$T6%2wnX@<@J5Gfd8OSQ`osJ z?0@I={k#i6RjAkV_0(O&a3#p zw;4cfnud^5(SKLhOFMv?B@?{rSJ!{dX9hR5f>suMUH>na0n|8f(2{mQs5%9*8)nuf z#w!RLa~OuM7IsCk*8hU-Sv$)X@2JTAJiUI+x_?*er_Qw%^EWM71xm*Z-~`#o^_fFp z!M~fz=b2VQdO48v%Wwsnc0tNOg)XS`2MwhLSez_?1}MWTc}S2q{5sACPB07pZDa(+ zHp7bg9B_JoDgiao;YxBFO3cAo3StMia|MYk+$&iQ)_;{z)J^~^v@z^&^g`(U;Q-2`VxhAZ|fVGfxe0@LUZN(kUyjrvrOH6Sx4gVF=I z$K;vH49?a8|CekU;>Lk`ClJqq8ru-hf?B3v&w|_GV9zozGtB7uKI>@hdXrf8Rc~Hh zU2XsI9QP~v1*@M4F;s60=|3%>dFS_?W7TI5U0u+0?f>hwQ`6=CzPR;kZg0i=^Z%xB zGYR}*VYsoJf9{EC_Lm}7?cVF<`g;G)ZE~A`{q(QP{JDO9xi13`!vVI0Z?Em2e4TLh zT>UTY)A6+jr!pEaFi1B`&E8Z)QL}@=l@;(bp75Zzd-#;-UDy0*Pr+#u=(@+ z-?N{t-~UL9k&U5&_dw3odb>scoTs(Un7jYO)u*S!W3&%2Fl=C)vGCXVw%7LjhTMj2 zAgQlUPp{vV)WFD)z-(~)>-^Rktpd(H&+Y3gf8M+vV-C^s@K^uZU+;4o(sLOg0^5H5 zKWFw;zWw$7dghjbe|6Ff1`G^249iykn}74!y?V2l{|jUOudTPN|9@Z4{`W3zP6-AE zGlt7C{|&SMvm_k1j$X~0j|5x5!{ceBE|HK9VqH`b?tf>2&-xK-2Fy-%U z2C<p8ndu>(iOTbF2Sv?Yy#|7c|6d#xQm5|95-;dtQU_K?O8KCUn(*@8oOs61)FF zoxH;D@A~6$zx@B*gDDPO^?#4tr$*!YPZLsw*VjY6(6{2>{e8QNR@OZ8zgPdhp8sq7 z4X6vw{;Ds2dg<_OoA31v-(kjDO!`&7WaqYv)$i=rw^pq9n$HZ0lZ997U!R;G^?T?4 zxWDP`k^jv=Bk4C7WSsu$m(TmXp8wwO{>O8E2K&6(KNad1_VE96pa1(D^?c_1!*!pI zLqmso-T$lR;q&71*5w{q6Y@WD?f!p{1OB!+T(S7&vwGCi2d&$pR+Fa$R4wZ|9hqXUj@};;Q0O)_J95M*YzK| z>vn(t_dWLiQO1AYw?hq_^Q-<<(*5nVy(|7l9IS=~Ku_dh`t&S@D0j z_x(Qe+x}DZzSr_jJ%7#rJ`Ok~?*8xfCaC=(f49&7qgnf8``_rFxA#42y!#vKvIhmP z{@cgL*1qCCJNs$%|DR^x|DFCSzibgKN+nkOXP=#Y_MotR^!IerL@*`R2%`w_c8 za@%oX`|d@L_Gdw2qe12M|J&hV^Zz(~PTTxGc>l)gd-Zm!{vBRe^XmHn^%jUn9jdn*W!#de#3`b6Bz5_& z+kD*ossArD-7bmxe?2bp?<3}=!uFrX@-{-CP|MT4Wy*_R~ zG=~~2`ggx7^J#beF3XyG^=4mU_wP;qcUaf%>+ZXY{|En=$N=?t`*Q#9 zU-l9128z%upSJj4d`#sdf3NTVvX>_R`+Ui9{?hfoW~KZM|E>}M)jM__Ejj+JAH9{~PiD-zxua zpa19O>3{z=>2EvxSJH~}3M4-#aJ~ND`#+-gjnng!^KFh?D*sz%|3liUpP_ZJ)ze~g zEkjsntcv-6e!X4Y!tYP~Wq!?DZ}25I{_d~*|GS$jESJ56hll3M|JUco*S;y9Z9aSB z?<4hLR?qg|`Fnfr&)_3(Ki8ViwcmW4FB9(v z++%qBKV3v|?qmmO_S1^_zrMEk>&5fm=Kd7k?f&n3{VVe+@BWHERj)rbi;+D+3KljF zrLXFZ-#t6_KX2ZjOxu&eb@QHID}85u2wbQ?5P0?fYJGI=7vtH|v-kS{{U-a}^2?F> zpReA%`ZNEnACoQ{`{9oLSHClZ3+n?aum4N0?yp()`A+@!?dSIX{}wqva^*ko{@+KE zLjLxjsfDJHzCHie*Cce)QJbJ$3UH;KJnP2Pff0}7u z&HbyzpJ^*3?O7c8RsVB-_;mZ7TQB}ycfT?E-`&S{&j0uRf5+NmZTHi-WJ5nZy!*EN z`=7A-`th%(#1WM`xXd zdgC!oUuZ?pz`5h&q5JFYe(a7u3sM~aL$rE7Z~gh}9r^!e9m)OIY{9vuyyBt`G(+4- z{=5J0h1%$|XTNR!cXP#KyVLD;?;d6EYin~b6#25d`*){L!_8OFrbENu>;J=+|Ni_g z{Et}TkI(xOudvr2U-Qk`iqqs=!FOm8^Je|O-P`|czNTL5{rvCr{ZF*NU9Z2-UT-b` zLD#B2C0@Oe@6W;5IV`tc|9cm?bS2ao5}W^Rp2%L?b}8|H;fr*J!a4iozpGp@l>ggl z*mAC4->IwJ0-8nMto?WT{NMDw&;La~y#Jl2{-WKr;s^YE(`pSvz6t-$$Uoy0#%<{T zY8tcwap2$U`WFZ0`+fWF_owG}{pIkVpZ6WEFZ*r3^Q?W|^B4V!r=8=tBXwQ=yQe{- zWyADe{k8IQWD76VZ+v|7=g|tm{j>M4lDPS|cf!@lwO623euC52_5*ta%nF4^8QRuh(Cb|2y}WUewF@p4#2D{OXN-|KCRH zUU}x6YnM`b7up;#xcE!o{+n^c?Tz}EyWcL_C$Z;Xe9z~~`|slCTz9UuGZAxI`%n-T z%gn3)hrK@DxJLfp_M;c(YaZgO56+kC`SW<;mA}Ui-AP(;wpHi58MK(SxbREhF0Q1d@N3Zz}sPzgt(vTJ)L!uYmPn`(zHX&4~HC{h!avpYwIN z6|?ypeojvOxUS%h86=G`xNl=ri}|lOMgAXWq}a1*k1p}IwBB~kJ(mq`Y%sX*WaL}$ z&zd>mpNq}MgBvQ+S6E(xBv`EtjC@P}y*_^E(#(oaYoKxD&}w#|<#qh`WY7??L#p|K zBd_e&w;#Ry@yX2%1-q|vNQ0`0RXZ5f0{*Xk7jGpj=3gDV0W?s)V3%~l{;&H>tmgf3 zyxY$UTJR9Of$>}1fA921mtJltQA;V+XEbAwU|?f7Ad=It_sai6vLHiC)Shg;C&2(R zH=J?7Bk6=azvkOteE08{ljiTM_TbjH&tbM3xqr`>?*1R~(w*@YBnvG|XTG!RpEP&k z#}b=Tvomuu%J=^Q`>P@I4ukd8`dUSuxqa&A+kOh~ozD#FuODDwm~n~MVAsFTZV^_p z{xt?N`;$LtDtzq+2XpW)Mz+`X`7K9xKYH|XL&>r&>{p7Zk<@xp{_ru=0#OyKFna8*F=Y*?Jjb|22zrXk6<^3O4-;Z8@ z{8r70*NUrG)`Kgr8L8*@f1Fz^U;E(Kt!YqKo0uJ#ec$$bHh+A5eehp!Yt%tX`oXLE z`M+-nU%ze!4T~ik8Shm+zq3Am*S>2Z|G_QA2`AVpzTY|i|Ie>mZ3x4*{1;nFDN4U!k}g>*p4pJ zh+$<|_2Aa-|KH!1-!GP3v7@@~53?Q%Ib-#&cfYw_zkh0Wl5UrX* zaSBPE04oLs8;TKxLXRF{^+1RL)D9+oVc{V03j5Rlj7bMlOs-!q3uItmP%UwdC`m~y zNwrEYN=+*F|@EUF|#r?)iyA&GBBue+`JS;LvDUbW?Cg~4cs!^ QlAxuUp00i_>zopr0K8b=b^rhX literal 0 HcmV?d00001 diff --git a/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..28c6bf03016f6c994b70f38d1b7346e5831b531f GIT binary patch literal 564 zcmeAS@N?(olHy`uVBq!ia0y~yU=RUe4mJh`hTcwDUIqpR#^NA%Cx&(BWL`2bFuwD2 zaSX8#TsvjAw@jeOvGY5>_q|>h+1u6fBdexi<)tM8-3iJOH-6e{csS^|t`^`h%M4z^ zvrUsp%yCUni-1dr!HteCeu1-6sf(@4&z-gOX8TrnJhnM~hPD2_`!&xEoBNpM46ZP5 z>RM6Fs4Du%wQt&V4?nF#Au;N4dCxlREhFOs+Q*8UNIXwA$#oIyO8|+tqV&R#9*$ zUnSd|Hw&5HJe-|^3yuFWnr2?uxcNuK(*U^*-n;k6AAGamV&=3x zQTjVJM+cmBEL?H-jDy2s*;QO>QThRLANE|lxz@Sy?+%4F#V^}4%*``0mhkR1xTsnd zsl4K{bVpgeu!#g~y%YEC?D&;me>Lr&{KSK$>&ee#llSpUG=!hMOnEB&rtbEo$NBpo ze0#XwfU{CPz~%7UQ+uQ}ChR*S%%W*wac<_u>)Jc^mA`9MySCxd!B^Kd#zy?>WBq3t zA?x*4_ W$LnK$#EXG}fx*+&&t;ucLK6TGg!*^@ literal 0 HcmV?d00001 diff --git a/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2ccbfd967d9697cd4b83225558af2911e9571c9b GIT binary patch literal 1283 zcmeAS@N?(olHy`uVBq!ia0y~yV9)?z4mJh`hMs>rav2y{PIR?dBvs;g z{d;TUyFpPJ%eF4Kv7n|^zp=ULn1t;EM$XP7lUeld*iOAGhrAO=?vmAmpTR*XMV$8#$?-Y`cDL-1XCS@pJejB8Rvppy6eq7etCUAujg?qj6J!e{Uv#AAYb{|~a_aH522J@Q@fi&BOpfuWHHbGp zf5x@0=W&%z;t#%xYZ_i1#tsY?XV=JR1*ru$Xe%q8GYMi`*I43cb15zIa$ef*g)OP` zxn+8uo27Eb>{9r}R#PV@sJksCu`zk^$I#qqi)ZJWE@$GC^4#7iY9ct-)8d8n31bVb zX;lK#VjdrPy!sZ;@og0)Rhw5$KOp&F-NcXuofoDxM?Z25Q1Tbd+xYNCT0eV~Php(s zr(KmiUp+T6+&?C9dbVk>SLWbgX@7~0v#&fvx}_S)%a@u$R+v$Lgb zcLiOYf4R$3h^y$~8P-z=e?C;X^D^2|@K|_BOOua4qui|r8!K13nyLg|73lxrZXr*ju;F zgx|erIDfsIxhjhHXMvIP?8enx7P6mu>*fc1c=y;ahGSjp;lGuBcQh{SzH#ApT49dK z`Ang8Y6pT&Jlr#3(Hn0W*>~S9f3}}*)^yfuapkkQmiJL7h52FRWrLWr4F+59@QKX* z&iiA|j)#}$b~)uf+UVL>vE{JpQwhGc;jIHlKqXlCF80s&R_HEmS6Euygc@5k7ASXhVP2g(|73{u6(F=?yx`%zx0!xh0k=> z@2~H(ejI6YT%e^_^d0ZiKSyPK{bY7bNiOgy*`?Sx*{Rj0zP_&O%zjCcZ5wK1&7b$b zS-4u+Re)>xxmODx+IoKSah(vkF4bmQOJ?4@n*L71#9h^eYmdsG-&9-ce|Um#?yRl} zHz)kP-&6SUG5^IIEML~BMqVrRQjA}+dhu305AQAA`6pzU9W{1E>(0+>-l`ogtQT#4 zv{I4dqgB+-Pp<{^Wvq|eKaP}%{%owt&7)o~)wHF}A<4B|UA%w)kz-Te{&=aQJFhvL zcU`h$Qee7tc-{WP?;gh+O*;8F!nyTEd4_zXS=)6n^)GSALu(@ zFj_mOP`4*Na%-LC^ZU2XzIy6y&|qkMNLIl0d(*@(Mjs@LFW7h~w7dO(eCMgX;W}ey z)$1FVT(;b{_T{serM4|X+iVsv?@3bGd0_hizGsX6s!a`EBIo^}j%A+F$3@YdzmBZj z*|cUF%e7fvr+yyrOFrYjRQJK&Nt+6#ztwGP_&n*`Q6J-9SNuJG)iEwe+w485%%@SC z)0^p~ht+}=x9!*b3^nYjoiqK*szo(3n7-R@emEuiR&Q1|0|Nttr>mdKI;Vst04OMA Ap8x;= literal 0 HcmV?d00001 diff --git a/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..f091b6b0bca859a3f474b03065bef75ba58a9e4c GIT binary patch literal 1588 zcmeAS@N?(olHy`uVBq!ia0y~yV6XvU4mJh`2CF|eix?PKe|x$(hGg8kJ3Br{#8u|_ z_r9dgjs8-qSv*|RE-Crj{anx)sHw2EzMm;qaVooM=);5T@;xrShAOR6jo*@1hGhwO z*Bn?RA+_;(9Jkc0h_1C6OiM+)8lAkW@7{ZN=luOQXSY;ezx(#?+xhn_PnvIj`}XeJ z^!>*B=l;CgqmUuO5V6FnP9n7P7vI(PUCpz+gzmb2UA)izt%L5>BmwRAzjvSyiSyI*IpJk#T4b1F!2XiIK3GC99kKERz# z#llXd+2zr$^&!bCj%$9Ht@T@0)2LZ?29M*>nVA(Yw`)dRH)Gvt71bSeUv1N8mlwNS z4~cv<&5bGxdhmFUwk2P6nbfCSt~c(e9$MyCd+~brAEhae3h!HZF0uY#ctl^M;=oEh z(YHFSOC65Z)mDD^`iD=@>%)&j5}iNhupByS+SuzUe&ptiL~GxJZZT~WzMM zs3oO+Z-U~Qw+BwLWovJkY4`eL^zEKpb~Dihf4*5{OBWa&j^dNy)Yi)|*(PgYMMC%(TgB=f_)>F?(i-{Lt}{cgTc64|8SnG>gdgv-0M z(1s<|VnxMTTb{`)Ht(^kpRVzIUFuFP+oy}nez;V8{4%BJUwpF4!=7ZH11hhWxUG8{ zA2;g0;CQ~u#_FdI|LM$&=U4x!m1<*B4F0*|#%z<{ZT|`v#dz%F+j3FFpSx_|G^hRD zW%J)k7_+H6FI!yg@DykaiKnaiTRan`fRnej^uRO`~` zZcTY`aN)}6R;!CM4$pJE5o*tx@U-)Q&jsxwiEEP794E+$s2TE$tVcc1Hf{mdn7 z8>DtsPdQ-Bv3rs0ZqMKwZ-R|d*iW(@%W-2Az}rFP|(+}bujN=5dCfllL@XNex?Z}U36Q-AR7O5^Gy z+?mm@1b6B25oJSg3m9 zMild*)AOC8jwTjNm7B#Z%@~`p_p(StiPChHi3NR!uAB2nKJDc?v*_&CT?fn@g}G`% zlc!`Tn<#uKJ+Z*R_1=vIXU+4^nK?E3H#MK0_T%Wb@BHT-?zi_ZIV!PG{PF$b7V{L( zNah{gdpB&^Bv`esXVdfAn12GtDrPagf7I{4JZP!Rt@aE20WV798$P_M6EKs|c+bGG zzGhv+_IdI_L4Jh}#oNAXeh^+!{ounTXTG=lE0|a9v8#B#+HXbHhwN9mVf%02V9md> z?clp-#R^_UYqURFgfncNvwr)U=hq*m1lgQRoB3gH>eoa*@9F&d$>k1g?bp48c~Y*t ztx!2`H}}!TOsTC+n^uW;>_6(qb?E={f@!f;s~^1%QD63HRmIn=A8nSua&8CSRP@!*%Y!T_y$w1_n=8 KKbLh*2~7ZftovC2 literal 0 HcmV?d00001 diff --git a/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..4cde12118dda48d71e01fcb589a74d069c5d7cb5 GIT binary patch literal 1025 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 Ap8x;= literal 0 HcmV?d00001 diff --git a/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c8f9ed8f5cee1c98386d13b17e89f719e83555b2 GIT binary patch literal 1895 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 jx+3^aWbGD-xb9H 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

i)x2+E zxb%Qx!oO#)noag>?LC&0@xJcT6^1m1SdYISs@Ve$*vv?jJ7_TfSBW%l?XCJ1i#duF z8pGsg)Rc+by~Vg?^3ArJ-zJp)bCeC8!OUH!uMI<9JgXt^-@M|*8@BYwyux_ zNlH3ohZ=V^T6wuUFmB;KX>&+`Sj! zm%W`7+M8&#(I7 zL7buVQ1ptcDS12kdjg9kAGq&IG-Ewc>MN36Arip+;*WbpoO)^0*%kYz_jK2t6-`z= z{HKF;Gs~?t+0T9@I`;lzT)^FQ>#g71FymM6)E+lkimZ-wcqYOYb%mGxg4UI+Am%KF zxAlJo4AzSqykG7Z{CslZyRRav_sw?{b+FfIjH}_ea5rFa9m9)9lXh(hC|CddtA+LR zliMdO(#4Lhs`GxP!nSMKMW$W5i&EI4ES9O5zG83qwl;YA!I)BGN&9_WNy5)2TTX0T zSLeXAcSHPwKzoKQ|GzF~e|A3OLW}fCi^oP?p?AEV{jkN#lIStuw7W^Y+Lg7xzMxPk{c`L zPd3aEI(lxl>oZq#uLYJ1_4l)Apc2lMZl4!jF&SIX}_dB$LVy`-di|FRo5 z?Ug^@nJM&QXG++;gAVt7)2_Zx=@)a*e`P$i`0bUzHS!F*9=vq7=XMo+#x3#e{T%OS z{L3c(Tzpz*f&QMxGZ*(OZBClUTJp7due4TW!=3o$eNjQo8R854R!cHH6F#T>`OC_b zIdR_4X4)$jKbe{mS0H=1X7$bSUuP`=hqhX{-r< z&rFVO-eni{)tNz-ebQ0wi+}g+<=j>I)6GcD#)a9%>YAyj=~fNXD}gKInO^8OBxk;I zce>WUb9J0@a?N7a(%Q}M9o%2OX=nJA{M4|qt2N5W=sSP3#H)6Ot=nG-IP7O$;LTgg z6;NHjox4`2;osyx4C(yJldc$keHt^{`QpmA(*Kt+{0gkz$S1Nm+}^2Z!O67pUWO{O zhBCodOZI(LcA2ejw!55jf%`(|-xpTCHu20Von2F$F!|QLgI}3mEWY`hp|s_-`v!iK zn`gTIPEl+Vh_B?_s(kCK@`2g<-+D#fXGP{Q+s4-!F@9MTZO>FS&r0$At)p$a{~p-% zybG}3Bx`$BCTn-7PgvtWqiX&I-^^E@UcOQK&-Vi_y)zi>53>10`tZPyi zM1J+uF5xZSxhKcv?T3xQ;bxNzKPJ9x{r4-WO!R&qXHDeBhFNhp^8VV+T2dBpyEJ)e z%8oO?`oA8W`AL4_1v#g?s){?azuwP0qw62|G=JX0ji00cexJKG4c?!0~d z;%@)9*E6n|trpF)=+-u@{JE;up4psVergEU_KgNJj`mhfw{6Jfvd(t5JyveFHpgP+ zv!;BDvepA1r$Z02T%q;2+UteW|l+hKwp_rc{wO_3{Q z54lg+THV2_w8ZMlb1~}X4G98W1t+8Ey@6L6lz&N?1 zb4)%3;9InDgIP53^_Ar=ajus zaqE}f+x~p(LANC5ETz>7?~9fc?OfRGA(t`f`u;=v8uwnmIB`Qo&$lH1wWbTjN(h45_6H)5y$e2)n^F!8~` z7W0{`2@A{0w5zRtug=>0VXL+{N7>HD#YxLQ3Vq|+6z9a;a9HzVuY7v^LA!%Lqiq5d z(!F!i-6zHV*7FfcH9y85}Sb4q9e0QKHA1^@s6 literal 0 HcmV?d00001 diff --git a/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..c4df70d39da7941ef3f6dcb7f06a192d8dcb308d GIT binary patch literal 1888 zcmeAS@N?(olHy`uVBq!ia0y~yVDJH94mJh`hU3!%wHX-L)jeGtLn>~)ol~77;wp3e zd*9(B^+)V|Sb7bYEevxsNN95Ly>R5pG><4!#}uyGs~mG-mhw@#=)jY|P(&$f z(L{!c<|0R&xLsVAeA3`bV(L)P-SU0k-1Wx0t*`Gaz6}C*cPCHEH}hRrY(4+)xqLb6 z?~|7>axw5eng)r>M#OO6het&Tdk2 zjXO>(+e6iPSaKw;noN1MNY&D7-9 z9Z#(y_{7gW;WTWkedtzxQflox4oCOxJ(tZ>=XklBr<7cJy-_c6<>4pH4?fl?x10LB zUanWU;8yb0cTa*E9!y=F=<`RhcVRJK?2;*CnExqm)o;lS z(_0muYo!}TY}Q!gDH0YN&0*T!lU-HKk;?A$3ME+W%-nlh&G( zYqi#7w)d=_SNG47E1R)ZRCQX3>^`9zM;c0Z98ElV&WL;Ul!LD}@Jx$1`kp6Zy7Z&z zq35)=UW+`bs<1OLr6kk*if+)p16o@dr#(JUbTYD!d9&7m+nlEj6L!APIo|Me)n*yS zw9JP08|0_0J)rZpjql(l-Wg8~z02~J>E3O6s+2Iz-%GY_YG}gGXKU6lo&LJAdF_Eu zlGC0ZND6zGzEfb@(gQJjem=KL*tyO1v4+9!Ij%-iv>R?dT(jrpq_Uig0uOhuYvcIG zyL@?eNUUJf=`V8Ci}{!y^X{DEn*NdfQ9tARe^P<>OwDBY65Vze?sc$_FEwb{dHfKU zgZ8fFDQsewcg8i%bU$=TI&Jk_)k9U!Dt5c6&wE?JMFt*Z-FYo0As$ecG9_ zqm#{3o~{hfG@mXTA-MG7*Qmd4_bNWWPjKg!s^@yVi_Ke2@5Q9_>W-pf(Y41GEPbuR zrXBnJTB=}}o8$cRuWr7SDC<)cH8I}s%J&F!S$;|s5X-lTtY`+C7ri2H`K`R|V* z-U6n%?^;q{KC-@>0}Nr`<` zdy7|@ZO+jI+fB+1?c3Nt7=&(Q%qX+gel6W0{>Me~V~<7m;YVJqXEh@tZ!db6|Iuc` z=1HRM+qU!H3TaPF{i@3GlKqauxmV(|o^841>^Mc9!-`FN^?@%BHZHz@M$s)n)meJ~ z@%~lcG^FbLG`KU>6K=Bg{1-~Tc2VHnttZD9mze0>%;TBClpC$zRes!{?(_W@T&sSY z7~Y&Y*Qi=%8KZTL@39%Nj3T+b2}>N?r{=sp+94)+c>f>ndtI&-nJ44kDhe#Uw}(Zo zY<~Q%l%9K;JW(gF$#Hcr$T&RzL#TdJ`7JLG;pq>LF8zJgD)slmn^ku-XR&Rui+KKU zbp*%CEY3Y&eI;xba|ZnkI=d!JZ8gy^*`Pg~05HAUF3_{)t-pO$Th`yYuVR1~wb^{#6$ zS;cm56aRyiaZ=?|=e=or_JdzKWVxWs`)MB&K5JIYpTnE~vPLwh*7)kJy2QepH*F;i zj@KU*yZTHfSN+^$J~OUsYn%I>K3rMn$N9S6&s)OQGpyn6l}L4K_P1~BB`!HE3|-%p zUo|-~!OT+kNWfPS=GuGf-tOyv(_)X+zuy~uCi>%+*^eR~>9s#z_T1;xqn+hj zUhA1VcV9|noLx0zs^_~oM;k4)S9EqoD9uY+#UM1fU$p4qO3gzd%9D%Ve`s+v-pcQu z=NK%p!6@2XU+I_7y4oY`tC(8dSR%TEQ&&Fri(YZLpL=1)!;Fm+R$ZBFB&)f1-?F17 zae;Qnx6Mf45!-yvfW@2rR>rEmR#Q(~^7;GtYKd*rsW_9P7jF15m-VV&?zY+as%vI0 zx>fQh`l0;ZMXIL9_quOo&+2*<(N|_a?c O7(8A5T-G@yGywok=Zg*i literal 0 HcmV?d00001 diff --git a/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/example_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6a84f41e14e27f4b11f16f9ee39279ac98f8d5ac GIT binary patch literal 3294 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 literal 0 HcmV?d00001 diff --git a/example_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/example_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 0000000..0bedcf2 --- /dev/null +++ b/example_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/example_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/example_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0y~yU|@r242}Q* literal 0 HcmV?d00001 diff --git a/example_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/example_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0y~yU|@r242}Q* literal 0 HcmV?d00001 diff --git a/example_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/example_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0y~yU|@r242}Q* literal 0 HcmV?d00001 diff --git a/example_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/example_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000..89c2725 --- /dev/null +++ b/example_app/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/example_app/ios/Runner/Base.lproj/LaunchScreen.storyboard b/example_app/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..f2e259c --- /dev/null +++ b/example_app/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_app/ios/Runner/Base.lproj/Main.storyboard b/example_app/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f3c2851 --- /dev/null +++ b/example_app/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_app/ios/Runner/Info.plist b/example_app/ios/Runner/Info.plist new file mode 100644 index 0000000..d1dcd3f --- /dev/null +++ b/example_app/ios/Runner/Info.plist @@ -0,0 +1,49 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Example App + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + example_app + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + CADisableMinimumFrameDurationOnPhone + + + diff --git a/example_app/ios/Runner/Runner-Bridging-Header.h b/example_app/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000..308a2a5 --- /dev/null +++ b/example_app/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/example_app/kanjivg b/example_app/kanjivg new file mode 160000 index 0000000..e1d9925 --- /dev/null +++ b/example_app/kanjivg @@ -0,0 +1 @@ +Subproject commit e1d99250c5477796c1d08bc3e032566c5be3538a diff --git a/example_app/lib/main.dart b/example_app/lib/main.dart new file mode 100644 index 0000000..b40f230 --- /dev/null +++ b/example_app/lib/main.dart @@ -0,0 +1,60 @@ +import 'dart:io'; + +import 'package:flutter/material.dart'; +import 'package:kanimaji/kanimaji/animate_kanji.dart'; + +void main() => runApp(const MyApp()); + +class MyApp extends StatelessWidget { + const MyApp({Key? key}) : super(key: key); + + Future generateGif() async { + await createAnimation( + kanji: '拝', + outputFile: '/tmp/kanji.gif', + ); + return '/tmp/kanji.gif'; + } + +// void main(List args) { +// // createAnimation('assets/kanjivg/kanji/0f9b1.svg'); + +// const kanji = '拝啓'; +// // final fileList = []; +// for (int k = 0; k < kanji.length; k++) { +// // fileList.add('${k+1}.gif'); +// } + +// // File('index.html').writeAsStringSync( +// // '' + +// // fileList.map((e) => File(e).readAsStringSync().replaceAll(']>', '')).join('\n') + +// // '' +// // ); +// // createAnimation( +// // inputFile: 'assets/kanjivg/kanji/060c5.svg', +// // outputFile: 'test.svg', +// // ); +// } + + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Kanimaji Demo', + theme: ThemeData(primarySwatch: Colors.blue), + home: FutureBuilder( + future: generateGif(), + builder: (context, snapshot) { + + if (snapshot.hasError) { + return ErrorWidget(snapshot.error.toString()); + } + + if (!snapshot.hasData) { + return const Center(child: CircularProgressIndicator()); + } + + return Image.file(File(snapshot.data!)); + }, + )); + } +} diff --git a/example_app/linux/.gitignore b/example_app/linux/.gitignore new file mode 100644 index 0000000..d3896c9 --- /dev/null +++ b/example_app/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/example_app/linux/CMakeLists.txt b/example_app/linux/CMakeLists.txt new file mode 100644 index 0000000..22312c4 --- /dev/null +++ b/example_app/linux/CMakeLists.txt @@ -0,0 +1,138 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.10) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "example_app") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.example_app") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/example_app/linux/flutter/CMakeLists.txt b/example_app/linux/flutter/CMakeLists.txt new file mode 100644 index 0000000..d5bd016 --- /dev/null +++ b/example_app/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/example_app/linux/flutter/generated_plugin_registrant.cc b/example_app/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000..e71a16d --- /dev/null +++ b/example_app/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void fl_register_plugins(FlPluginRegistry* registry) { +} diff --git a/example_app/linux/flutter/generated_plugin_registrant.h b/example_app/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000..e0f0a47 --- /dev/null +++ b/example_app/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/example_app/linux/flutter/generated_plugins.cmake b/example_app/linux/flutter/generated_plugins.cmake new file mode 100644 index 0000000..2e1de87 --- /dev/null +++ b/example_app/linux/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/example_app/linux/main.cc b/example_app/linux/main.cc new file mode 100644 index 0000000..e7c5c54 --- /dev/null +++ b/example_app/linux/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/example_app/linux/my_application.cc b/example_app/linux/my_application.cc new file mode 100644 index 0000000..de22e5c --- /dev/null +++ b/example_app/linux/my_application.cc @@ -0,0 +1,104 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "example_app"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "example_app"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/example_app/linux/my_application.h b/example_app/linux/my_application.h new file mode 100644 index 0000000..72271d5 --- /dev/null +++ b/example_app/linux/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/example_app/macos/.gitignore b/example_app/macos/.gitignore new file mode 100644 index 0000000..746adbb --- /dev/null +++ b/example_app/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/example_app/macos/Flutter/Flutter-Debug.xcconfig b/example_app/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 0000000..c2efd0b --- /dev/null +++ b/example_app/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/example_app/macos/Flutter/Flutter-Release.xcconfig b/example_app/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 0000000..c2efd0b --- /dev/null +++ b/example_app/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/example_app/macos/Flutter/GeneratedPluginRegistrant.swift b/example_app/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 0000000..cccf817 --- /dev/null +++ b/example_app/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,10 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { +} diff --git a/example_app/macos/Runner.xcodeproj/project.pbxproj b/example_app/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..793d472 --- /dev/null +++ b/example_app/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,572 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 51; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* example_app.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "example_app.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* example_app.app */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* example_app.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1300; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + 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_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.11; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + 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_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + 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_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.11; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + 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_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.11; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/example_app/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example_app/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/example_app/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/example_app/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example_app/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..2acbe72 --- /dev/null +++ b/example_app/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_app/macos/Runner.xcworkspace/contents.xcworkspacedata b/example_app/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/example_app/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/example_app/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example_app/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/example_app/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/example_app/macos/Runner/AppDelegate.swift b/example_app/macos/Runner/AppDelegate.swift new file mode 100644 index 0000000..d53ef64 --- /dev/null +++ b/example_app/macos/Runner/AppDelegate.swift @@ -0,0 +1,9 @@ +import Cocoa +import FlutterMacOS + +@NSApplicationMain +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } +} diff --git a/example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..a2ec33f --- /dev/null +++ b/example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..3c4935a7ca84f0976aca34b7f2895d65fb94d1ea GIT binary patch literal 46993 zcmeAS@N?(olHy`uVBq!ia0y~yU||4Z4mJh`hI(1;W)Lsk(btiIVPik{pF~y$1_p&> zk04(LhAK4%hK3dfhF=T}3=Ji(0|NtRfk$L90|U1(2s1Lwnj^u$z`$PO>Fdh=n3I*mh+C+-w~v9Lfx*+oF{I+w zo4=7W=3Jfo{P(|WT^%85UQR+mSq>fv(&3@+*R5N(?(&s)x5S@Uo^zew{dtbr7D2Y@ zjHjR9m{B>e#jS^t`55c6Rp(!>UbT1cce~yCzw+$aj5|&?^yZovN=2^v)G*UAc-a)e zkL!vBKc>00DFsW;%s*0ff9t;ab>BAcUab(B?aKH5yL`Tj2Ll2u_|fwo6bK@BkA)wb z{oh>u`J6eQ_b&R$oxttL@vx91k>B;U%lT=ygZlsfu9x_-*Y}L$&F@SM3=Ca5z4ggG zbBeiDbSJ0OuIFZ`TA=kZ*|YO~YeF6<2pG;>O!+hYNlfj+;$Qxg>NH-O+|Ooi=m}N* z8*=HoO6{X+!x_?`NMR_RaBTlpRaMX0g~ji@Csl`BDuO6X{nEAecDA;<)_gV9JO&M| zJbz{eh8LGo{!H(zXIQxU)C<<=?cqE

@If>gQBaQUX7oU}Rt@QSANiwRDlnO2PjO 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 literal 0 HcmV?d00001 diff --git a/example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..ed4cc16421680a50164ba74381b4b35ceaa0ccfc GIT binary patch literal 3276 zcmeAS@N?(olHy`uVBq!ia0y~yU}ykg4mJh`hQoG=rx_R+SkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ1ycWlfuYoZf#FpG1B2BJ1_tqhIlBUF7#JAXlDyqr82*Fc zg1yTpGcYi47I;J!Gca%qgD@k*tT_@43=Hfgp1!W^k2zU6jJSoWd;1s|xOaQHIEGZ* zdOJ6^|4x|X@%rPNXU|<55cuBXy%NiI&CUg!P7NXgG0F?Wwqy!Ts$tlnapz0&7p7YQ zpTaKXI|%GmT5#9b>}8xv=BArdxUYCsX5RAMWW9O!<96=b#`7YpkLf?Zas1n#rK`@} zDn9n@ef_-8b#8{CYx;D{7+O0Ph}erh3~!Ly>ld_4JMx_8oB3%CsSk8E{C)VaY*qD4 z!;g<%Enu+Y@cNki!2dw`>3!=t?y{X@zAbof&We?cN+NCie^@H`fAp>U@>}!yb>9an z8&(({XkW=#cG9G#ch}0AACBktS5)YgD*4^?Pn^7pMV|LVVphYxPY2G6)fi`MywTot zxP2vKL)NoD3(oAHz-;HkJArGTmc{CR59^wY9gJGjKTnPOaUp>@gm2%oIr1weo;~1o zsJ!M!`>@?rMRy$|~CEnKyQanqAO zlX47M;u)XoHt>s@9kBSZtGNE$r~6Sq0s@(*L_TYudO$qva66Zj0{@?;!~4H}SeV4- z!E}Gphj`8(0gB8|TH_Pmt>>v((ZQIb`T1~{VaU=4&a6BWMD}&wnQ!zboX;*Ik3qWF z&P8g~qz?y^n3puh7u}4H{E@JdvE<H#gtiku~izv#1Im6*^nKuammHH+s#o50kZvSvHiOE*1XJuUGQx_~bJ>lKyGG3{Q4s>xq6mJdwBc zJ%fJGBb8Z&{d{Yf^KS7kGi&Jm;LH26?ZJ7b{mgO3MgMQwOEp+<@0qRI7{Zoe@Mn8t zImFUeSGvniCss{=8Z3yx32kdAZ>QD}h(M_HL~Q+UNXcW>Nd#yvIzK!})8=}zUVb9OJPEaz+1I6S`b zEt>mfG`s7Y?e!l%xfNJ&@41`z@!Y-2^t^pj>xJB|K5Tw=lJ~LCgoQF!_~h;1oZp`C zevk7MPNDnh=Zxx~%nEwY+;~&Bk@FAxnOpt|EOvD_#1&4l_%`#mEi>P{^#Z4TN|dlf ztGq@|Q`zd79}YhFvu&~DD;5zJ`w0whCvYCqa##01W4iP(d-LrhbN%mIX^7M<@Z-0; zU-I(Hu_tY_4zVBp&9cnE@!^NV4pz25k}jtjpJFj><7f3PoEIP?BKPg_zkREdB8qKZ!T~+QIfFam$_=5855XBg}a1edS#O3~P4E z-u0hgvRCUsyHMCpnb;R!+65T5-7Y>;w!O#n>m`jl@&@wBO;!inCrz{5`_jEBVbRZ4 z=a<(u`!>xN{qy2JlQ4_#kzEJbt*`Iwy}Cqh-T z&UBpb;B{WR2~68q&0-VxEuB#+v^*SK{>X4Vt(ls9(JgATMuPi-$6RkEghNE_LXI%7 z8-4lUs`>iL5e1>1SqG*m-nH3ukHPA}>lu@+vYKYzow%Ur!@(lvC#~zNpY}0ri@ovY ztrnjar@YROiz`^NnClf-|IApKx>M9A|31$#zL=}QUUL^N`f%_=+QnI4bRU%RtUd3) z>ccHI)|__--bVkAt>3rn*Y^B9U(T-2`}5I#Psx|{IdK+&-+p_kuKvx)7juuJinpHa z&&-aWEULMd$FFC9uiWs5b8p^v;iXqJ8&jWJbqHCBuTEzA-OaH6^pE*1ZIh0lQMk5h z$JLXJHQR5yYJTOqH;&-)mK;T@_?t6FoSmm?u~}&oWxV&a2gTN0a%Q zy*;lTT$LKX3O@LyANN9DyIFezQ}6A`4_yTzrXwZ;3wXy=x7#u1b^6-T$xHWc_uOR1#Ij4Ui{(X3+q4An zNnfkKS5~~W+UsZTIq9#5!Xu>v^UTjp`EpHdwUMC0gmWGfQf~hG^-79={k;X-ue!?U z@9$V-KVQ)*wlQGtfuq$I&D@$!Niuwzt?;sr_4Vp(o2Xsq&Rv_v9&?fZf1%ohhey_$ zJF4uRi?Y@OFwuX~x5>G$9`KA^B z@As<()#fKIo?^cjv_qG@aK;tp7fa{wdACtXdEx>d;Vb7D1ag@=J6O)=t^M@mlu+LG zZWd8H`5o4eD;@;zS-9kbGW&!Y(cGpeDF!yR4r$k#y4QOC|F*iUzwH{O%l~7|_x~-v zyA@L#-a-J%BxJ~{qCss`}4otHBn+>$=d%@+=XSSh|;7zn>A7=oM5O6 zX?1OKlVnK9t0+45N{|Nb;`0mzFRj=XjH~D(p zM%H(2vzvQ^Lv`KcHAyq}Ra*p~kY6t9_{ZY`L(^gB`82WkMDTT;9F+X^P zL9ut1!=^JjM%?xj%!EyL@foa2NbCE*D_GY~aAHVmE#D7=O+Q=~7Q~$nQ=j41z;RY> zjc~(GM-|Vo4{JIqCLTEGC~&9$l50~YOUH#16*U5!*WA{7OTRNc?B4RX;`Ze~2acZI z5>qF|cq~Ij=#R_~(*k literal 0 HcmV?d00001 diff --git a/example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 0000000000000000000000000000000000000000..483be61389733f2e5331c08db8ca245268610ccb GIT binary patch literal 1429 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4rT@h1`S>QUNSs54@ z6p}rHd>I(3)EF2VS{N99F)%PRykKA`HDF+PmB7GYHG_dcykO3*KpO@IrilSQA+8Jz z3<)QHB%J&a4@Pk(e#C-N^obwQ$Dt_knGknI zo%j)T>_^0LgcgVbWD;U5#CDL!krYQBhXx=-JwzqMF1YujU@i$g{wwl0$b}GPkN{6S z`9po{SNnb6!;gVO71eNv`Ed2|Cx7T}|7N`No6*j1c6+~vfwcULMA8B=GxGQkhO&1? zU}c6ozZvfOZn62D^O{Enlh0Ou`X7E2q}^cWH;@!qR%gvC;o`0AQFGWpXfA8iT$ac= zQ0+Uu8Seh6z3QcC!Dfz#+3Zns*`lBdm?P#eMa(wb`ORSGH=(=@LirovvJexPBjzwi z%wY_lt-s@&`nuPmr8^*c;j&B-vl%01Geyk)|Np;2#5@xQ28LTDL4KeF&ft9i+t(ip z_!t-%7_6@S|NnoR9EizaedGWC|664+*eDXH90n*?8mx(tfx+Y^$P6iwrkOKlSMW11 znBM&Vf2)-6%K!iWKk))7vc9nm!o3g5CkzY>I#Qw_*?UkfL*M`Z|9`}Qlrq?X9JC4I zAc#duOMw?drla{v1`kZ&x447eE>7#Neh-Cb_IV^(WoU|`@Z@Q5sCVBi)8VMc~o zb0ioT7}!fZeO=ifbFy+6aSK)V_AxLpvU$2VhDcmaPGDekQ%e&IGb`is)5|lM-#)!R z-XXvv!X?B<=E(F3QzlKDICXM(KuAy+T|ZYeGK`h~Zl##uR8IM}$D+gm$Z zI$GiWxqAmMp1gVV>e;)8FQ2}BeEPxj_6i0X7Aht>HcCcXR%+7}_3RW4H7!+5b#0Z6 zwXM~sE9&oGuwliHC0o|)S+r@@u4U5}uG_b8->LBt=(e!k-Kt!c1=xaH(nF9H|_1NuhM3DxAvrJM&5S^di$$)Hp5cCn7SJ(<$oC% z7*tDKBT7;dOH!?pi&7IyQW=a43@vpHEOiY`Lkvx=Obx6I4RsC7tqcqn=oIIoXvob^ Z$xN%nt>I$f>5HKF^>p=fS?83{1OQU9x^Vyi literal 0 HcmV?d00001 diff --git a/example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png new file mode 100644 index 0000000000000000000000000000000000000000..bcbf36df2f2aaaa0a63c7dabc94e600184229d0d GIT binary patch literal 5933 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 I&MBb@0FMIvLjV8( literal 0 HcmV?d00001 diff --git a/example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png new file mode 100644 index 0000000000000000000000000000000000000000..9c0a652864769b250ed58097f2f6270b393f751f GIT binary patch literal 1243 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}Ea{HEjtmSN`?>!lvVtU& zJ%W507^>757#dm_7=AG@Ff_biU???UV0e|lz+g3lfkC`r&aOZk1_lPUByV>YhW{YA zVDIwD3=9mM1s;*b3=G`DAk4@xYmNj10|R@Br>`sfV@_5MBW|JU-aZBf=2M<7jv*0; z*G`YkkO>tzUY}kj{h9HYNQ;>Kk#C+Ylio~jQh0K7-_I;o-{#p398Cf>pVoG)Sg2on zhV96;W&NS?CM^oB)6_bqEK*gywWTxUx1y=M^cp8dtDn!i z|9?*L`<>QK({poHa;>P9VLG>>C`NI^+*ff^WeS`VnIbIzN9i;C%zL0debo!QKamfL zAFw=F>L>JW!5pE8!rhnEw=^^>{r<4N;iTENYYj?=YKj&pGd}*fA^HbPgzd@?o(Tv2 z{+jXByEE~~9NA#iKKrDhMM?~_*u9m{A028eUjNN(&lNMK$cL*oW=?#*ZMWo}wGDZ; z$3MnI9f;=gXx7$xpyO)Jb#e}Kdh~%{))FrM!}ksExV>0;=xv3Vg~Pd8id8>+dAg&xyz$De>dto9nMVfSW{*?tz9&&A^BqA9gV}xdQ9>= z=bj9@b0vHEsiO}L+SQ0@n4Ia3-_LHx_D(hQ<}>E`4632bTlcH%Io`}0f6`NCooA8E zKgI%cO(QYJP_xFBA2z;_h+tM@70co>|IZyDaqm`gnS#FW!@f4QA9IS8tZr`*s$6Zr z;nS{^mn`d+MiGuYMeKJ|DlM>{oVG zyncYC^}S1VYK(~+CAn6oY?Q1?|EvEm@?Wd%{r|x(YK=z~42sIn@1LJ#e|dh8p<;c@ z%|%N&*09Cx+kEh^_US8Sr#Om2LeoP^L!7?z?J>T+w;}%ioAS?lIek{nN^0f!cgu=j zKX&Q9y~13f4a%#|tT4(_f95}B)~)>6Ot;+*ZB4M-oFY)NYtOd0nu5xickgmJ-g9=I zKDVlfJJ?yw^v#;HM~!DhG938O?{?(gH$EwrX6et}mv{I7RpKmA5ec{&eV|3FyKGHe zV!VrcyxaA@@3;AV<<|b&_%c7&Pcf+IJWuao#=Zo*3&JLx(0 zpN;zEZCv)mi0)vKVR5_Cxq`Q{LXznoLtetArhng@%b6ImuJ2c_f1~?5B6J7S9*#W= zR;8Xf`D*nn?FZVo*!L_tmHHsQ&YbBVyNu$awNG26Ef^RWR7+eVN>UO_QmvAUQWHy3 z8H@}JEp-hnbq!2I3{9;}4Xg|ebq&m|3=9_N6z8I7$jwj5OsmAL;bP(Giwq1544$rj JF6*2UngAMu6(#@x literal 0 HcmV?d00001 diff --git a/example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png new file mode 100644 index 0000000000000000000000000000000000000000..e71a726136a47ed24125c7efc79d68a4a01961b4 GIT binary patch literal 14800 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 U3r}BUU|?YIboFyt=akR{00MO-p8x;= literal 0 HcmV?d00001 diff --git a/example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/example_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000000000000000000000000000000000000..8a31fe2dd3f91d79cab6e0390356bb3c1a355f94 GIT binary patch literal 1874 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hE| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2Fs>?NMQuI!IFSvicjg{ph|7#P?bJzX3_ zDsJ7K{k}USRN}b(`MEdcCExA75pb}n&LLyUzJQnf8k4ppbZ+?MuBofI_YM0$ej&w| z-8@@DyIBHnd1$yCy`#HgL)F5c%OXn4HkIAIA^+~&nakZfH&>@U`)Bd}+}`qKayvGZ zKf7c7{B!NR;&;XKY{OqL+%~Kdzi{hiR_HfoerC}#`BFZ$|IGYkS``!Q1FZI~-2PJT zCtq_sV~xTgv8zA6o4he8kkR0LbaTO4CX)l}S@@XFtCsu@J}{f9RY7;|e`A{f27#93 z*;Q8V4Obo><=dyr^hRcHcgn-cm52CQ4=_L3)V97d?h;?MV4K;umbfXAEN{*fo#{5% zq9|i$%vhFca@)Q2yi0@DpGA=eXInaWSOq+)f}c6%B!^c|5(m8zk}i7=31Ng*=!$lxdlY+7JUzH&-ZLld1$L6{No0b3h(^~ zf6qKf=A1C~`DBlx9GxIrg;$HuvEBPnw`|_}nWZdmWcFq|E#s>gf-uOy?Jx!0mX#P?w129?ilvJ{`oZa z(BJPIm6`l|rZSic_V8773P|o_yLeso%WkC<-h5q#E6-o@DjjKCKU0!3@{qgG0q2&h z2h1L56e#P}%;nhob>alGniNJG7lU^qeDd2KZ$2-e$o(UNsiG_4!205cM;pTDf4Sy8 zVV~Z@`_@82?ftq9^Vf27R7?MurJLW^67oRtU~Umx4gZHe`8~ct=JAcKTso(@E#22K zRbOgoFWGitPlJD3`d)p9#8oWycjnF0>l3}VyYA_&qi?0F1FpI}R6MAd;Bp}Af%Ai# z7EfhD9a?@`2aCAvyFByIkLMkq#ST?$Z8Rv)2~T2LBFMO3d(XmY-kHLC80XFWxafg} zzLE^XFUBccclG7p*)Y~sRL!i++S*|BFp;zF&nFGzR;3e34SWpjAzS5FCC;A0(P_uZ zFfT@mOJGmgiukbZ4F;9%AH5g*h<87*SfT6|&1%8&vGxm?@cD70&t~ z?mk0SKkT5aqw9rdOJ1mK2){a4IK#Ik#LVm83u76ZZcV+KkAG61<%tQf1}=CMT`L(7 zJ4={h*S4ebd@J9In7Rf?1b>|&>@s8ij>Gex>lv0m4ik-8&F>?6=dcW0cNLF=kucJCm1BDh}ws_v5O3Z-1|)V_@s2<=>Q2KJ7c;e_kj0O-X89Voy=! z28&OBKU}dF*12=r*D{~~{lq}N6|Wcz!ioNo6@htWr{>iz5FN4N5mC!6QG5oUE7-^mXOM>&j7A=eHZHxAsbzj&Pp1#no zHB{nq*0CS0ynFt;?ELYNp&($Y=!3NBa?^gQyhy!!n{T$_e}xZrA115{+jFa$-T88! zYoKd`@{aZAU#C~kTK7ww=lbCc%aV9q1_lPz64!{5l*E!$tK_28#FA77BLhQAT?0#9 z1Je*gQ!7&gD?>wF19K|_g9SRpxhNWP^HVa@DsgMLSa|v(0|Nttr>mdKI;Vst01`nx ALI3~& literal 0 HcmV?d00001 diff --git a/example_app/macos/Runner/Base.lproj/MainMenu.xib b/example_app/macos/Runner/Base.lproj/MainMenu.xib new file mode 100644 index 0000000..80e867a --- /dev/null +++ b/example_app/macos/Runner/Base.lproj/MainMenu.xib @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + + + + + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_app/macos/Runner/Configs/AppInfo.xcconfig b/example_app/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 0000000..49b6d45 --- /dev/null +++ b/example_app/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = example_app + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.exampleApp + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2022 com.example. All rights reserved. diff --git a/example_app/macos/Runner/Configs/Debug.xcconfig b/example_app/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 0000000..36b0fd9 --- /dev/null +++ b/example_app/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/example_app/macos/Runner/Configs/Release.xcconfig b/example_app/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 0000000..dff4f49 --- /dev/null +++ b/example_app/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/example_app/macos/Runner/Configs/Warnings.xcconfig b/example_app/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 0000000..42bcbf4 --- /dev/null +++ b/example_app/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/example_app/macos/Runner/DebugProfile.entitlements b/example_app/macos/Runner/DebugProfile.entitlements new file mode 100644 index 0000000..dddb8a3 --- /dev/null +++ b/example_app/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/example_app/macos/Runner/Info.plist b/example_app/macos/Runner/Info.plist new file mode 100644 index 0000000..4789daa --- /dev/null +++ b/example_app/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/example_app/macos/Runner/MainFlutterWindow.swift b/example_app/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 0000000..2722837 --- /dev/null +++ b/example_app/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController.init() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/example_app/macos/Runner/Release.entitlements b/example_app/macos/Runner/Release.entitlements new file mode 100644 index 0000000..852fa1a --- /dev/null +++ b/example_app/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/example_app/pubspec.lock b/example_app/pubspec.lock new file mode 100644 index 0000000..8350c53 --- /dev/null +++ b/example_app/pubspec.lock @@ -0,0 +1,245 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + archive: + dependency: transitive + description: + name: archive + url: "https://pub.dartlang.org" + source: hosted + version: "3.3.1" + async: + dependency: transitive + description: + name: async + url: "https://pub.dartlang.org" + source: hosted + version: "2.8.2" + bisection: + dependency: transitive + description: + name: bisection + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.3+1" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + characters: + dependency: transitive + description: + name: characters + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + charcode: + dependency: transitive + description: + name: charcode + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.1" + clock: + dependency: transitive + description: + name: clock + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + collection: + dependency: transitive + description: + name: collection + url: "https://pub.dartlang.org" + source: hosted + version: "1.16.0" + crypto: + dependency: transitive + description: + name: crypto + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.2" + fake_async: + dependency: transitive + description: + name: fake_async + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.0" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.1" + flutter_svg: + dependency: transitive + description: + name: flutter_svg + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.3" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + gifencoder: + dependency: transitive + description: + name: gifencoder + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" + image: + dependency: transitive + description: + name: image + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.3" + kanimaji: + dependency: "direct main" + description: + path: ".." + relative: true + source: path + version: "0.0.1" + lints: + dependency: transitive + description: + name: lints + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + matcher: + dependency: transitive + description: + name: matcher + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.11" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.4" + meta: + dependency: transitive + description: + name: meta + url: "https://pub.dartlang.org" + source: hosted + version: "1.7.0" + path: + dependency: transitive + description: + name: path + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.1" + path_drawing: + dependency: transitive + description: + name: path_drawing + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + path_parsing: + dependency: transitive + description: + name: path_parsing + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + petitparser: + dependency: transitive + description: + name: petitparser + url: "https://pub.dartlang.org" + source: hosted + version: "5.0.0" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.2" + stack_trace: + dependency: transitive + description: + name: stack_trace + url: "https://pub.dartlang.org" + source: hosted + version: "1.10.0" + stream_channel: + dependency: transitive + description: + name: stream_channel + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + test_api: + dependency: transitive + description: + name: test_api + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.9" + typed_data: + dependency: transitive + description: + name: typed_data + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.1" + vector_math: + dependency: transitive + description: + name: vector_math + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.2" + xml: + dependency: transitive + description: + name: xml + url: "https://pub.dartlang.org" + source: hosted + version: "5.4.1" +sdks: + dart: ">=2.17.5 <3.0.0" + flutter: ">=2.4.0-0.0.pre" diff --git a/example_app/pubspec.yaml b/example_app/pubspec.yaml new file mode 100644 index 0000000..ba63a9a --- /dev/null +++ b/example_app/pubspec.yaml @@ -0,0 +1,21 @@ +name: example_app +description: A new Flutter project. +publish_to: 'none' +version: 1.0.0+1 + +environment: + sdk: ">=2.17.5 <3.0.0" + +dependencies: + flutter: + sdk: flutter + kanimaji: + path: ../ + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^2.0.0 + +flutter: + uses-material-design: true diff --git a/example_app/web/favicon.png b/example_app/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s77>k44ofy`glX=O&z`$AH z5n0T@pr;JNj1^1m%NQ6KBQrxHN+NuHtdjF{^%7I^lT!66atjzhz^1~gBDWwnwIorY zA~z?m*s8)-39P~@uhG~7qCqZhc3d|4;4lG&j~$oK zA@xWG2F9zNE{-7;ld7wO#(qnZWJZzI2E3_xA*Lsx!2?73+ET^w%+}I@67GR zPL~gKB+lnDthp%7_f?t4uW8c8|3WP+WgZ_FE&TA=jOG3EO9#GP7O}Aw)>E_$k#Ij{ zy7GD-^V?e9l7~+mufGc|5hy!fsr=)zztlt_?dh+%eqZG?+EVFvYJGT3%B4l+c?Nxv zA961J%WD)5K5(#z=Uq!-q}j6RjfU+9tC!e#p8CvEH~sU+6WhDDJxnp0o^W94eWCU1 zQd#DyR^MO$Yr>MKOsyrcjGjlI&9nHBnS0EEGw0Y$CX2WHmGZe!`~O@#c5SN5zDu26 zDI4BKt!FtLvCi9OcFDt_gv}BORd*bZl^1SM*A_yFxrSX8ds2x$lS21HT;^ zTCIz7I(nCKmV|Unv7TVUR`#dH$H;AN(TuMbbG%<%3CMZUe|J|QuJuIw1-!H;WNWB?$;ib zdFQ+9g^uhz>as0SX1QKp$Jx0PS=bUhTs~c2!d=hEU?gX@B64~UD6e?B`njxgN@xNA DfL3B_ literal 0 HcmV?d00001 diff --git a/example_app/web/icons/Icon-192.png b/example_app/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 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 L>gTe~DWM4f2kRIC literal 0 HcmV?d00001 diff --git a/example_app/web/icons/Icon-512.png b/example_app/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/example_app/web/icons/Icon-maskable-192.png b/example_app/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 zcmeAS@N?(olHy`uVBq!ia0y~yU^oE69Bd2>3_*8t*cli^7kaulhE&A8jg6ix<382y z>SbHwgtHtfGjFfcpQNf-ZC+ven!)+TA3-Iv4^10X^?q+Sz$|z~?>ECej&=Dg-5*Pp zd5%po6sX93!?B^2xjIedrTCtW4;Zy6oq0pw}SJvO&X6-!W8zxx;3^^Mm7j0n8u%e>*Gp*7wJsFuOk@ zNe!)L&HJ6L#r7PNDZ05r+`6H6%CZY>y7fYTTx-4@Jh}Ffl&BTE2akq-#q6>Zsf*17 z4!C)#ZVx=TK27y=o3=HZz_k61>U*|nF*D|ZJ7>I~hxU*6%eowNh@dkN$asahU_p)ld9) z%RHI76(WrFFL%G+CCl>Qe7FHefDz-RJbw?l%9+*ey=MJvIOJZr68) zlDt5rO%v+do^HP^xt)peP3qK}Mojk8&A&`F->D>}^1Ufh!RA-}=Vghf{;4Q)**z4! zDRMVma5zMb&1TU(e#L(ll*5rIFugzv3cPg( zu>f~XUq=RS!(|8Uqi#>0|8?VszouXRN8XfgxF3`$cGiJ`TQN2I-^F&{Y4P%$FVq!! z>~!|GmZ@bkF-bfzpZV0kd|u>NN%OO-|296I&+}&2a>oXlnSRec_kTaP-r&zHE_1;T z_bx1xeSLSw#=2%Ii_H7)+?^mX^_?`1IjD>{&S znVZAGh3DULzqT(Y4DCbD%U^we_|xr%mtHxKZ5Wk4e1ADHdE)u`Up{Vr{qu8vxrArK zv!f?Jt?u9OC;OP}a?S-!^($IAwwitYV|DiCuRqOe{5uY9+nUs{nWf{v{l)HmuAy_w zZq8+zW`Fp({LZJ6)9Tk2*h^gZWa9X+|K?(MHr2CccK;5kszpqFSjlcAD>4dRp3Nt8G^KNh9`@YOcpyzp&3yYGC<)erk2~qD|hP-||lW_4~t5 z@8j=}$XYo!nEdFD_^0SReLV_wNIb;;Q%Ux09#kPt}$3XNbJ|vwPxsq15!^Pm|1}jw+mwSB>+QUwx5fLg-w< zACYC1@?~}e&^0+0x=p$d*o22=_G{sc1 zr?zQ-`QbP9Nj0Zr_o=AW6*Vc+-E|ND*I)JVkgxg9W7^2ltK7g<*W8`=XI)-en+coy zrAMppe@Z$X&-UZ~H|JmX4>Rh{e;u5V@H`>;6l0B`yTMIf=DN!<-TU_J^_~4}XV9xt z|1(7xH|gx}V@X|=SFmI1h8d|%|JB`@s{Z-R-&MOi^7b9oQ?@tXlx*T{uDv|R{r|qb z&hk~;uXDWCFWX|UMRfYy57$?PUV1Kn{H^EN+e*79|Efw}v~9W0>Hm`tGuqaNG1r~7 zY<_!PCAX|W#d62rW06AB{>!h=YJ08x^)3g~7pFzb{lC6kxcFa$-Txg+WH&DOsJ}Go zpU#JL9}CIqCu>h0`*d2?sp-G>?OP>hccnG%H?(H>eYEDn*AE*T^w=arc~3U@g@2v! z@w<(D{Ml7uOm(U0Mzzj9s!g1KvWl{k+h26wPJ3~ywJiD0yd^$T8<{^eJvsie&GLWY z+p1qX8Bc^vQn?VK_T#;!&;|MKUw_Q%d>Qx8-+lW6=gaQs+a+(4W~a>(_?V?|QG)5i zEw@JvYvvwMs@Jc5sUsghHF@TP{ogYje*1kt8s%1Z?90!|b4+)-p8QmFcv}-o36@xj}{TI7k zO)t`^Uvs3e=HH%F74vCgf_sFZT*hGubcOJiqqel-rXNce^Jir6P~ z2YVWvxOGFkIZIJPr{43y{_h?R=jZC_pPw(hJp1~gKNF|jH~nB<#ePENV9Uht$_MJZ z-e)+R-*@Q)9StK>L+pU5j6Voe$Tzdx$jGlzm=Tm80@9!(-ynTquz{-bH{rl z9sB10CFV>1S6p1af9*Hd`DW|BZKa^BkS1y zhfk}i`k2$dV^!tjIquSF$wE^mJl}4^Exb_Rfc(P4noK7|G~>IIHVYf5{bc=iKJV>? zKGyzQ$@AL0PU|1k_nPG_bgjOHWmaxZl->T<)9$a7aM&$8=f%bI_c&h6z4yV@^J-Jq zZE1_!n+^V@ce3T3pXBeIUM-@bzDJAm)Va^A?fxfOFWJ3q%bc?6IX#R)DjoVKs%G$? zHfh{g(OY=CiZCCZKyuTR(QV>%M>`u0MOitYI`O4ZKick#|GZk)t4@q4q~pXq@@ zCmPBx<@9q@Oy9MoWZV2re~RQTeSLm8;~`(EO;%yjy@ppQClZ2+M2-u*eUx*)jc;qN zQvPf|=?lj)nRt?#Cfg34`jPXx&V&1aRuv!CIk2ANekGHKkWK9-_v-%dFD}o%U2>U4e*^dYdebHA^?rY8V*9fzCpbu5 zO-N+xAD(|FJ{^90F*icNK}U4Ie@T()lJDoMldtdNKd}GFW$x#jboZYux;^2*vEKrA z|4Zd^?{j=eKgrGF;h|RfDw}yjigevKp53w~Rv zO1F#Wy5BZC^!DUsRgM6Wmy$cH*!GuHSD0V?J40vxuO6Nrb2X0y+4frcc(# zRnMNbvz@=;59@A&P|GE|yz3(R|7)D*TsKqw*P%3iyZS&@m0QgWtS!gaowIFc{`E0& z{=J9Q?K*Wn>ie7ZrnD_vb;0k(;^@7XzkK!o$Gmp-?2R)xXT4BiU=lgPdjJ0C-oJLX z#aU;5S9A3&kE;8*;yU+=;wJ*K_x}t1eG#9((Ercp_Ka=3LLvfh7ie-Av|afz_g=o- zhnMB*msK=gJ$_#69+AB<>BIgn$5Xj#=9}rAx!iB}xp3Fl`F0#aJqx`B5_lGVRBmGV zz5C1V;FrH^)XuS`mMG}jH{XB%E9u#zZ_kca{`x4p{nGKgB%y*CJ@V0<4Gh~RUD_h7 z67ljhtL*zcW8HU3vDXc#PQdm-FV%UlP4- zzr4zZE7}|hnk&|%@f<0>YxnoL*YtUIvO&}1*I%ivS1`M|?2TX69EAnv=EpA%Z#geN z;l;kEs(L557N7QiTyLg(=HlM+yKeG#zuCPyb3oQ;r8tX$=ZQz}HHDtkoc4~$JFVat z@y~hvrPXgfd!Ig^kls}3Da50$d1{6D^B4E59htbV?kv~s>J2!Sxp-2;{($*E=Q7S_ zl=!oLztj4+$sfLJ^t=xgl3uvvVW2P9z)5tK*s*+ua9i*mOsxeF)nM0$xLS7 zz_>V7+LLLbY?bzs(#fsYUf3r(@hxZaYW-ak-u3^@xMEG$*f|gt?HTE z_a0dOO; zW?~}y42fqyWmDd=oSbmrv+@V|y0XruJb}pCnNJ_qN4q@q>8^V7s)M`v3}fr8Tqe#h zRZNV_d>G!@?G)}|Io4BrfB7|U_LnE*r>%Vc`$(bj?{7R`>SjB>=lsAQqsaVYGuMkp zysk3SY#GWk7L*DsU}947{E%`;R_K9!#e}|piJl_cTAu{&zq}|ez3o>`hiH1$B9Y}k z(=TYPubiXA%BfV@#E=#<^;%PT)Bm{0rRsjIS7N`Ow62)&@6&Jbll;F$wxqAHKYde% zufqNFuU(uxNgSp#PIPfjdd~8sv$%=f!urV%OGb_WsXcG4gj6DSxtzBtZU~zfy)f^_ z;(f=j)&1Br>+<aY88T69P#ub;m>cz6Dy+1umZro0v42+-Q{)_Qlr$>r~D z_s#$Je50sUy{3}m!Z&>jEAy@>C_Vk5-p46-r*!w^cLE#<{WmW~$L)A?`MbQmL;3sI zMW3fH5|6neA02Nm%k@IX-c|hs*VUA+FO9L=t;1cpn5OW(PLkbMdvm$GO1nP*jgElVeuBqn{6;EKF+@59GEz z>$y;FVQ}xX%7pgRr$2w~YTo|hf3KT>uPP%)Lh~WhJY~-hd*k0O58a<0X(D(yf>ZL! z;VpsP>pSI=yDAlwRd|7TU?;(BO5X$MKaGqrif7 zvkvajn#jNr&^g1!$( zM?m=5gt)053@j^L&PXg-C&a+`YL(=f)k2&N3{yKKo3Dg24Oz$hnT-5ZJY*g~e~flGr)jZxarD)8F{SUU_PFa*d)}5trw>7@3-tH#QcpRN1EO z7dpu+$m7N_CY2b&08a+)*zgAZNestVaye-?wv?5+?!Hxfzu0e8`m*ygjnnn++S(Q` zTW){+X;j=^W81s)m!JP#GynO^cQbXwx?4XqGO#ExFmgC3XfX-1ID~vl+aS;Y5^8K= zU~1?D$uKYpbWC7iQgB*qoWkM2z$DPXz|>$lDl-}eqv>EYFO10Y;EPwnz87B$ZFH0k z<~A@fy=D<$IK#o=u)v&2{JB!R{q_mXk)2!{MAFURGUZZ0%FCLZ-D^4sZ0jAGNn zzAjtE`Si#AE#?!q%g*LdI&f*4@_rdcgCb^Q8xEe<1Fbtx)ZU+WQhmRrH)})DlvCL+ z>t(HG?ceKad|LhWw=eY>Z{n`u|2|sxpP1ce!SHNaps)i& z&#gT?d`yQG7R>#>_q@!h>~^Kep09pS_Fp`Gt90{X{k1h6@4roZe70>LQ=<8~Wj+l> z|MK^zD9P_B^j~*pzD}`f-8?7lWQ7I>iDpqrW)?P|1y_DfZ(YZySQE_hrt9dgySoD7 zJ7uSSSn*?fH%~{=Kdq*(Ei)6dQLV7A6v zM};D$m7nLI-0Lqt&F$aOsEXNl8Ln-ua=sn0efLsRhANA$m$wW5wOxC<>FJ(Gosgg| zeij9W#&0awF8ynrRlo7;glh~h9QN8S4CUT;%>T*z%UXq7UD*`$s*R&KO57IY9GoA@ zTho%waP87>**8oIpWf$KxnDG3Qs6Q+_TVV-Rw(^fyz~1^X3cfq)>nUu;=L0*G-PX(>4Of2pKLshx zi93GDfJs5j+t`nzLM=f0r?~UyH_va?e&Ca2c&#?aSE_rLF1=YuF7?}Sug)j?(tcSI?(;6|QAvWNBd4(Q9?+VF`== zYZm_|_+)Z-Hp8tHhOSQT$Ddhk_H#Q}|G(|`=49ya$xli-YZM;LW?(vC9(b$yKnKT? ziS@sd=3lpQ`&a3{ds_YXBkMj_)r$W;W3_h9|LE_RPsl%i&uMaYijV_?fuRCJV-Qo- z!Taj-R~G(T!{`zITRfOubY;seQvsz-MgMjeUHv!Z#QgVZ%UJ{%<~~|l$kF1tK;q|b zkJZyBCh#7};yn=JvhMEu6S*$`66-RV-k35eI4r)H%2DEZp!;(=Z^Knf28;iC=_a}1 zf({G@<_Zjrs*QU->#zIve$TqRJ&)GiOqlz9>rQUB@D+7x-2XzJoNuyMPK$Zc&%ks* z-aD$v;Q}a<-p;)9yC>@He7>a@)n~6`JhASv48z2eE-u9ZOGUR{<$o^!C0zZ+Ic0_> zQ(4*e279K|bMf2nX)r~VC_gi0s5&TrZvRo1N7uqw1Q^zSC^Tj{q<%rXV zp6_R7vf{h1o(zl+CadK-DhM#$?)me%BPoh`g4@5~oqts_|2yncTl`*)DdCG+T7y7@ z`hq$C|DNowU3LE3_H`?xuO0Zjn{m?PcRk&2pI*zU{Oz`Q-|_iw|19eFbstu0V33$* z`+}FnN_E4_KVL1keVzJQ@71e~YZw(iy)W^)T*1x6(IEC=hbWVxpho$>*LgR}d1Ksv zSsi-+Sf;_u?4xa6>7n^ufAW>z-an>u=e8gti-UVYrWlj6(gdsjGw*!<;&blor@VER z+w%7vs$G&C$2{TP=k(R{f4_NfZXKrr!!9+S-vT#`8jGIC$D4kSW!CTh^R=@g_ZmaQ z_sbW=uDultV%Pe#zb*Wi)TL*eas?e2a=LBKw>t2%tWvK3TJU*kacl~sQxtQ8aox9{ z-wifawum!vFz8EUvM?Q1z9926Uv6)>*w1Tn7p@oZIoy?M=sj`&p^C$6kG%(da<4N8 z{N#UM?a;r9Q-NWItbl}K@dhR{8a=3zpx%?biGL-&#dLYi*MCKa)@C^XvOB&vCC*Xkhrj zFi}mxK!oY+#Qit-{r^+pqnr@UmK@1^z^*>}bn)K+4h4p`B+g%qjnh~rJ+7TU|K#56 z=)Z4P{n|G1eUa?Kch!o*30v6?B>uVfH@BkgtrUY&J^SLq(+M033~b3@ z%zfKpUmAE=&i1g6Lw;cCY4)vq_Ljvxy?yNGXHgk$MwSB+Iwvg_DF?j!b64sArkt9W ztEz;3Cvvyfu4l~fFp=<@^=joMiJ$4}f9{qQ`FH$T{QFdI-T{t=i!-M%9(7pIe=?Slco?-V|dy<1+)S}gPFabE5_87)SZ0|C0u`xOEd0-pT| zeR5xoIUzQ9`$Y+_NjffHqW^dO-?fKz!@B);YCeX{6D;aW58dyK-Pv{ZpPj(vV-28q zN#WVW)TqT2I+oN4sjKJvZ`)$Z!^F{$ zc%w1SVZkH^@rm^x6Ma|Tmp&W3k?lbF+xYK`OY61SmfQ~gh- zICv&Bcs^ObD|h>^`#NrByHD{(T`HR?UY@PD^K^Lq)X(7)|I51k(_M3Lt)idRHu1MeV@%%0IBJo>auy-1N&C1b1EYc8ZlhHV94hDj|J-@!^B1j8@oT4e-%bB_WWVE;f3K%K_CMv% zaHr#stW$aX*7~=9CbQNr`OExk+lA2iECLL6nU};^bU2rst5^GOV>`Kc^Rn6Dao20U z?$5e>?(#0TD{6b=cOSdloHN^V&i{*@cmAET&HCr-_W1i^wFU->t(B5@CUCB?{=ezQ zHk(iPv)C3Km1;2C`ah}g@K+wiIsYf@7yPm|pNXSkU*~5Vj+Feb(XRi>mcM4%{%il^ z%hf){4B63tJ$`?-ZD~+on870OVx~j=#QLuXPJQMTYkzgcG+`Ipfu`!){~rC(O(@PZ zVG&@sIAc~LUt>e|S^KxuyF?1Ut~@O>5g};z6)~C#Lx5%$2^HO7{|Nd9q z`OmleTbrBmCv%pgsR9`wL%SRf7=x;={e}D9togrAxqh>1ljNK>Q-*!v|HXZS-1O^t zC+>gl=~Emi;K1OLn8tQfys`9o{_iWL`qD*D;%7yE*l|JOzR2poxz8o9J1eL*FeIos z91w22^7H%?;pJDmYo+>5o$h*V_38WO_w~gJYTe(jzuUChPv`sJ*ISu>`Z&m^|1Ul? zfB8vo<3J$?2A9k-wzsn#c7DF@zwz^`cfbFgb$eQA`0tpr_xHciSEXMaU%2@Hp3mX= z-)BGL_cU=n7%I>)i-AcY>$7o%JWGty|AX&;>o;Y3WK3Dhm@%1gMRm-iT~~hp@qc&n zW9^*%{gpn_9|av4j-(g6y_x9n=+FH5C)MYLW!B$rTW!qz?f1W{o6mN?c@}=FPjheG z;#zc-6rmL{k1>yY||_KbN5S+70I()G?8#Z%_m`G42TFDW@P)#cx_wr5@(CISu&2CfPTo(V7igx>mpA!qA;&$IVy@BdHh z$d&ymF3FQ~-+to$rz%g2I3xrd7$h7X32|gFy*_t;ns;r=`)%*<+w8wr`6OOdDax)w z^ylUW=gW>2+OoXjP+*uLFJPcjV0ioa|3dzW^*8tZFUj5Q>z26rv9IZuOGhhBP5(XG z&G5_acRi>q2vx7UC2IjH4fc2?y^ z`_*sdH+r{jsXgAl>DK)|+i>RtQyG{JOqKcGJFnsViT$fL|LbJIrS+RjZqC@e;u?-w0v7i07|9RQJQoL;SGi$a-$Jjn@eLw%ieF;l( zrvu!KEDhp4CPr#ZcFORzVUAkYu6tCoSLNKDB!@rlBi~N(-f2| zOIGLEzcxCc)wliQp<7dD=Re!bb71X7J#nUK4>wfokh&=99{jxCbp4mD+nCKA7U(jv zI7Bzyk+*3)@^k*lOaF|wpV+VWD8K&L{=1R?p9LwVTgm_arz^KcZ||QIE_LtbR$Kgk zu-}nKA%uyeAwbuC|6YNJ@_)Ir*Yv%)eBg%Kr}(GbIn}9xEw|0~?%8*C-~Xkb|If4C zIcv-Q&AdAVnQ}Q57;XtY`Io@?qvKEb%fDB4PG9?LyZz(+yS~M%D)yLjL}dxw|NSp~ z;(o8+{;9L-`5iYHclJ3e_%Lxa7`$~`A1$O&{%=>Hw|->Do7-3ayjA{RlV9EW@ALijjJ}xbp(^k*`r?x$4i--aMu8&m3Jzus4`RBwLo4r?Q<$=RXrnZ`Z1c=UF@oGo6YTDeZjvX|eFnohhs3P5&RPk$l0ya%I)h zqe_-1XY;eT`6fvIoNqU!xczO`pQBg*)Mfq4o4DU7>Uw;__1gay{{!onO5EY#P+)LN zaA^zhKal?9zVF%i@B6Kmth>D|Kc#;1TV`Rw_^tJG_D>Am!NC-*+Q4u_t4{8oY2()u z_rGO6o7q%mTEAW5-dnwBHc`p8S?!Piyp=3wXW8b+z_@|;mCa^xPzue<`gc}hjdFeQ z*-18cUat8+>z4hw{Wq7zFg7j}aA4p$D)i;BcB9Fs`6ut5jQ*>$H|cO^?P{ZjcSWA#%1MSoL+Iui$jzd~l31gH^o+it4+x78eXR6m8+7Da!& zpZ;V$^MBJOQP~4Ox6e(#!{7K;z=0vB-P-?cLxcB|{Gw_5>t@G`=YQ2sS`ob_zUz!@ z^OJM;^LM|Je}4a<%Q8=nFD?v>7lbq9F6)A_!I}Eqf7iGi(#pENvGAX+*|PoR-4E}+ zD|$Y64o{HT9w+yLfA4yB3Ntx_M!uRvUpQ+sH|3%ME&eiaQv%lf|0ovNR|e$~h8Z(o0x{~6wY*x>fQbzCv4_#?SX zfB*9h`@7mbzOY28e9oQ8tG}xoo&Da*$<4^Y;>y4%FlFb9HEJ7do~T!@o}bCPZw9}A z{ki#1*VpI8f4+X+s3O_#;F`Ve|4M%p%{}<@^WWwJJ2(^=j-{U0aJ#Jb>Hf8S|8~8p z`pm`1y!qNvA*pje=BMnxe}dtOT=!@54UE$r6bzU+8V>M?RhM5^u8)?Aee>EpLNEWu z*?r3YYwS`Mcf0&+3wvzD(c;a(D6sDBqSuv?Pwp=}cHe#Neno@$JOh)mf77n^ZA-Ter%WislT1!+QZX*ObG|$Pu!RK#n)KH z#KDku;sL1RulD=L-}z6%*W5DK|FYVm$^ImRMJ-P-_qyMIJO9jGbI4bKqlbg+%EhQ>=d;&eU$^__&+xCeZvHe+H26{ba`Wc@9iPn^PN)h< zFfy_n;OMcqrnuzX{{XwPs(p7}ZJ)dO_v$%+p4FT4oH?sp?|s(kZ2g-1Y{ys`|FZ}% z{F`}c5j)fCiS?g5Yqidu9aNsq6 zmZ$yv|A(71@BE$O^?UifQ%kPRm%A4no}2%>y7<-YRX<-poPPD+YrkL0Z}an_*R>po z07XvH$%#G6pfSN{+4t2qWPWb9-?(1$Qu+Fi;=Y&4pUkhfGyOlY#!-Te#YV`1p`yhz z_$`Ny^8Y7C?aofD|1Ma+`E!2k=k04gieLVI<Oa=j2AOSot#_G<0y_1E&H*TmIsU-vccFyPrGv^t-?OsqA*{kM&OTGvD5q*?Q88 z`SUfebz3}jP3C-!FFR&$`akU2!!(YbCI+Siku;ui0oUjE{e9y<--?i*zqU0$er^7J zr|Q{xUlgU^r5x0*y?uEpD@Thz1Eat`-e%dxvVZci(I3)*j5k%{ib=hd;< z0+-oNn{?fJyg?u^|NZLdxAEW0>}5gyr0{h&=bti(U(HdbcCnDd;Xo?`(}7m0?_1OY z-u=#0xHN1CjEl|M=0-uLg;b{D?&{0EJX@`?VGKl+pZ z`)$Yb3K!%VSsd!uR8H#nBL4Haa&__X{NyFyb~4XiZWp|}2jn_T@V?9x9swZ}>v zM?lSi?xovp{Ay2}fB&5CXJqNhrPJ3~-MM#p#_6i(D>Ij;nSIj>DG9j#r|_TOjGdfJ zi`5$#B=&Z0w?9zy{Qcr*>yM|+f3*Eh+Woqf3sxRGxo-99kKyY+oqx+05dF8~&vyIo zFBw_dd>9xFQeO8g$iM6QZ`Y%>-#3=b4)1T|+<-p)Jz zO8-;&`yHtdVt?r!ytRC`orC$Mg1w$+_rF|Q=ko8}=T>V)0bxcK2cK*23fKHouD@FO zJ7oXK3GHEz^}khWa(!9JdgYJrnNy|$4GzqVEDXU%tQo(bxE~*WYmLE&OWdbj+16(L zt6D9;`tRNueQpW@+>9&^I@8`|&N=)0&uOKfc}mrn75O(F+dq+2Lz>65K3KR|mPH}J ziGlIJmJe7fHk4Y&vFqSsP|ee5 z+0^ebJDWK&+{;VKl^NX9FV(SyJp1#z^3$iU-?Eh!uTL-kIA>}9>R?CZ8?V04J>2@| zojKpri{j6XW@ne*WWD&+>~rXhrCx7eY`lA7%Gr-IO5#0*p8lzSp&R@&`u&Zm-X4rI z61rbWu{eZ0`(}LO$j|vRPr8F!FstpK9Gz8t-Tt?vudDX5nT=wm|BjuozrOWC|M#os z{!bKtR%GDsI_K*0rpyv6 zH}SvuBe9#V91SOU?v?HEeqR48AjE3>`Tnh!Uu-VsJAX^UKd$6Sou%0G`d6(xSNvRT zS9_~SH~M{o`sL_da+7_3yDw9Ezc)vz{<&=Rr(=6PgQh%SZd77qVJJQ{!(ryz9j}|Mw~X_qu1MxP|pa->leg2bTR+7M}P$#%$vL-*;X9iK+E`3u1BDvdmn* z;@;2wX3={m9p82=|KAb0bta*@yry-_rM5VpQtth8xcuMG6Zik@IX>&HideRuQ`etv zPL0>5Y~3XX?^oZmnYh2)_T2vV{R)dKSU`pIn>qW^=rv2BRFJ1TJT>PY~ z|CYzi(9QmrRnco>)M0&qy8EHzkbG~NWU$l&wlrnAJXC9ueTg}X#Kxr_58vo z`I-Kci$!;J{CTbP#jIZVRo1_ymzO+Y6aBgW^`+K7H@><*@pWHr@!yQC^GzI!LkgR@ z?7Dl;|5y9V=A8dIyR7W=_1r(cW`$X*wQ}8`&tLyj-T8-m&-HVm2AuPCpZmK$I<`r4 z^Xb{U)+_xlkJb8=eEt2yKW8Tth1%WT;nDy25p$y|qzOOyOUr(T12Zh{Zt`)OZ(67H z|JBJ9A+G1w{I0zH{e33m3$0K3O&jjTPPqE#|1oLtPv7$uKJhv;o-?xa6d%ydx9Pj^^Q@L(!VDo+Q{`fKJvKIzhUT%1)+OsQt#fksF^bAxIb5nP({u=suyHxz)=^G6{>F-U1%Mn^5r z9h<`O#(-S4Hxvk?R@)WUX1jEoBvMztpBpoxiaJS z#QK@GI&TuHGp`%(^K)5w;{W=1qsjAk6vp3M!}s%Hhkf+t!dhNN7KY1*I}UiUq_8t@ z?RgWmS8c{Qc%<@vVzb{;Yq$aps=) zEa&dO=ob->6n0>UQ11TDrpom0_cxz+wQi|Qhn`=MxLMg{()s7_xv5LEIc~A*(I|Hn?;FS1*+cZ2)e2hkq0p6RV&Jds{8ZEOANnbCC{m%s8$_4g5ycU4_*?wk7C z_Xl^FT=ZaIywK6X-NkaL=zvbNuz`);In!EO5&wnrKPBf|&eHp__}P0q|7qv$Z?0Wc z_2lHAW6bC5`)BPpG}HS6svjAXdVF&_8fr2uR`xyVnixCVW1rTc^1d&&E`O@@GM?Ap z?zG+cE~29SkBImmQ@4Ld^&353WJi2nza_m}KQ3|CG(FGEi+_%-Ej@o({Jo#czgrt; z{t+>)pZ_9rbsGay!^?+04xJ6ZK_hIF?lPV`Te171Rng{eS!uDdvp>Jr{IITNci89e z8ke@sWjt~I`jMaUM$_lp6uRgI|Ne7!nN+yr0#Qa52kn|WF(Qn)=dR^E_-;KcDmc+*tNUZQ)n3?0-k!XGi+pdtQEP%d`0w|ApP38pXYNENq`EDdfN)(e!9j z8k6tL1|#{4ce2iks{Ong#&59Ovf_FDh6(+vw$#6CvCn2qXgl>{)jp;FHR-=()>nlI z{d}K3(f-{1jJSe{^-LTL|9uwc8P4bQ5M!IAvpuit!R)&IsgI_w7XIfH`!>GdUvJ-q zWp@^3bL=eYy=wP=;?+N23kv>4|2y>Qhbkir!{me3jb4Ha=3lwg`DN<0d?x27_gzlB z`93w!ZMbPQV z`~TIR-E|xa41WriOqF8tV)-+%s{4V1A5V#Cn9xu8nJ04J^O(NXFZ%wn`N&W0**UL+ ztJgX6zwD5c+vu`dseaq9-0Wo^@2D|xG^jcKxyRjj!Np-?+iaJAjMnv~+x{Q-JOAXL zv9bB{e4$r-HS_nMKe7ME(gn}nKRwUV`^ATW@q+P(8S>(@I4*4SQvSd4&bM=SABg?Y zJpSd>(bhlL)%l-%oGxCp;pmC@&pivDt-t)w{$$qw8ULT~*1h3qI5;~aM)uA&4g=l7 z=j(UdBs~9r>1gYpKgr@xwb!3{+O;@%XG-`r@dY!PPFBC)lssc|S=)~D``@34-+L*1 z>EFVCkAK}ZJ$6xn;aJAi#{SIPN(V&zUrelj^he%)f_-h~G?#zX!4tE;dAl@d3LJmE zZRh#;(w*mL?eF@t|M?A{x>+ag7j7$v22J?XUV0Yk%~adXaGRMk)E(66ak%_XKX!)t zx&QugvraF()i{&U!bouEvxsgV2Ud^C<#suHZXbO7ec`!%a`KyVR=ugz`V@Zdzk0rn z()9Q5yQ->HGRcSGL@y+2IVrug+7*lZTJ7t z_Q@yg-|Y`imbPU|$Pwc$u<=zo@O{E7J{2CTxAS#>L@)bmx}%FxJ}{f<)G0>Y#^Yh1 z|7#yl`y{;NZ}d5-y!&j7ECAn8T)!Cx*tn+)`oL1UiqyD97e?s;@ zaq&<7@~6fAtUM?sc67RuLpl?Wxc8N-f6TM~%IX|8mzlRcKPvUf{`whfzAbL-VC3N4@=jUe11k{kgE; z;Yq6*7PuU^dVJZZwnt))-v6Y}KHs}6HCk`__kFkO<8!|zADrL4c1OAdivYvn4a|E_ zaKy~$tcjDAp3}*2xM7RQ1JlM`Hut_inYZWd4VPt%YwyGr|IG_~rm_{hDbi#Rkst%zQp zCd}G*?q_yDrGuD5k1-=Fv(DW5e?M*glDZYQy$juRUjF(0S<1XT%?wNl5@id-S((&k zHke&-d;UjO`M=WPCmR$(`83vWZdmnmyP?m~y@yx+oc!(mfjuTWRhc*%bQ_;?xqv>rM;xOrZ6xm1RZWS z%F$(dSNY7~rtF1p#%$03FI4Ay;;ldB%AebZPUM^kSrFK{`KK7aN}_5C;V$`8Dlv)|0qePKZ$i;jHwv!&H@(l zpN~%{=G&gE`Two^&pur~>2Ym&#p?O&)|ZbMfX09_#j8S{4}`Gvoceiw_iUkM$Jy3& zHoV)l`C^gx+2pIiqCd5t|G%u>cOts)(Vw*s3JVKZ1Q-s^?BUa9@>ODZzTeLORn{vr z!Lo3r1P#;wlYbjm{y(|cqW<3*7e@w0f!3MFEl+3(HhkW`d3$clT9*US{k~6USm~U2 z7Z?_P``hVN9}gYX`eeV;e){+MDxdNXPpk&5#Njv{_hp;I0u82P5C7<&njSyrbffdF z{p)A#TFvodb$w|3lvT6r&&{{jH577SIFj*oVsB)3gMG!bfWCJ=Prfn4zgg@vY2VfJ zcYn^Fbu~QYZmQ*h5}n-j-b(+Ii!1F-|8LXSX%CttV(4|7ZqBJ8_~FCNnRE7(XkCBP z{xxjB-kkb))6!DE1}*j#!pyHvF{)(?N;!OEuJ0*CIy4$i+2kJJm&s) z{TX!n>c85nzgEww`1mu5Mdr5X%&tP%sbN74t z?mb=m$CYF4@8GKraYvs_|1G{QUdKgk@)w(bPjs86&1A^>7d`WuP011#0S0ALox`u@ zH)KAszamvXJ+OYJsn31cfOJo#|Nov_`pfV$vK*+$Iq9*@V}aHu{nerQi)Y`vE^}jv zkeZU!C;flfvp5$#+us{`*!Z{~1EWD1xADGnoHtzl%`HFnknwg@^@f`A24_o!-aq1> z{z-qo@#=X(ab9DCQUgPRoWlav#+0r9h1owH%{h2~n{wUk19viROf#*QefT={SLnq3 zzur%>-u2!iue_nEd%?dDw|~dQKK+v}_~&N!M2RB=G(&Bw@W8{tx_;}e{|4Wa=I6Rz zS$6nF+5c(h?B73iRk2iGkeK+u?~_+N-%rD>rq>-8^f53s{A6TgXVRBl68+b2uJ7Fc z*XF*ea){mKzwc@u^Xw~5zGwGK{1iW!DH!lg?BJK9b{6&RFHh+TXn+^+yRZ~Ez{C*S07QzF83d7q!_I?WWOjz88j#Z06u8Ce{j2sb>uEqG(wXLH??((?DS zZzb5p&cFRUKj`!M>%V-1Riju|_%z(oba;|)?!QxtNsUE-L2b$oHYTM{UemtSKY8P$ z_blt5b93^WKi02)6g`ZenX$pcRYS1g?Z(cU|I*^0jMXbP`nx|{bhCp~fkDa4&e>dj zLC|0M%1;6RZclFiG}oD1KkZ+~Ep6X#ANiLaTkrQPd)3$334xDyhUlHzZ>9N(Ilq4L zn^jf}@*EBaq#0Qn%%_-`lrgQB(|K}zUztMvm$x%xBof#b)JJa0``G(@yN9b!ilVi6 z-1PAMUtBHq*grkw|Ks~}-D+9b-ynF4z zGGp44-rCif&8aV|zFyn==1tx0+P~Si1$5r7oBRKCd`-x{(qB7MI1hf``&YN_`2HXhbk|gt2grw*46s^ z|8M^On0I@=rd9q9&39qhap0*OhX`n)fsjCf!UC5A`@cl+NksMTub9yAva@d4>OZF^ zWIz9ZX>tFl&Hnc4w|>6PE-zm;lVb;`-~)s7ovci*OdJf)SXg90W&7%Q%L%{Fm+aS0 zxc&97(xOZMw!BE0{5f8j@qX#fJEf<6KbaXZ_8CvVtuO(!h*wzQLQ{hf?ZwD&)@MToI9z5c)X(>P6Aq$tU)&+5NNV!0vyS zL{GkJ*dF_nO^j{Z+!J@?Wf@rB|(#E-VP1^eH%Qkv0PdE z&b(?(X3G5Uw|?e+YW?k-^=GR3&&rNJq2+al+oavX$4Z*G;glXA?{? zS-yjVNfI>X&&VXlxyI!{qsQ`r*D&S2fPaNggBE+tN4A*-NeQnr-I*V& zH84nQua&$zjiW?~$x7<9k@m&JRY{UR=Ub_spH~-__PKS%|6speTH22$=?2bhaACPq zv^l2yr)oz--!q=GeW0ePOj(Kuv&sV31NQZQ7TNqr+NHL@WN%#X=IwjyZkzsFBzaBg zfAI1r(f+pDpIg^;`=sb~r+ocqQ~lgw@#XW^wI>z1zB`uE>okkA;(K}g%oL_|t}Hws zW;;%Ab7EjL5b?gy9|-E2-Z^w&AA8g@B2{nqZV5PK^e(b;hI(1G4K*0{&(`~I9i zeY$_eiT{?7XP&R_h|hIAbxm!>|BX8AB9>2FyY974aQ$_f&1;+Pif?^y-kjLIe!r2W z`h#2B1Nd(IGjEjR>1AL_$Pim-zgQ(fg~>{)GBxC_NZ#zyBFUfjHD2?)v;J9q@}FD# z>PzwbJsbwrM}CEhCI`-JD8D~pDzgBiUdqn&BcO`OOwU3n@zwbxsTuIZ*I<{Ge zQCoDW5##&44=Z-5HTX1iYVK5HV&Z7v=s6?M?wa7svZ9>*#nt?5(|2bA(Qrg<6kYw*>UTcPuhetYdvyJfLpsxyua`Sl@G_sg*vQIY z^+~_`M{w)J_mNgzAuKCe8`p43Tr+RFm($I_lo0)-GVcmYO$w7)Yz$*&yXn70AE%lA zXP2Ltzj{`^*iZeEGJEgi>fGO_MKa9gJhAQ5Q)%63;R^=y&c^5e6E|WEtbZ#})5yTo zpvl;%E2wdrr6u68{;}&;pXy&WUita@>OW6kd-0#@k_|O`liq%hY;({RyEAj$H5Q#` zMl<~``#316t;+rvIO&78f5oVn1({M5JukF7STd`?CyBy8ioSGfiS~yxZCMbLy0|Onw&!pZi9~qFfmm58P=uFb$N652rsb z+HgaoQvduJ{o1_=?0@xFe++m1r@#8d|CRZw(SNV;Jv;6CCo;2Mm9HzC>Di=fe@frR zzvuJl4C1Phkd{9rcUY;b{3HoU)ufhj?yEkzC@lsb<#_2 z*>6uS{MpwS(|fV;u`cvKX-;?yxqy)W3=ll4t@n=;{Ef8M5saW(|S+HP%xY7bn`Tg>oj4TH{ zcupD|b9Lx$h_Cw7WV6Va(UyPXnV+jq{I7iaCw+73ExW?^H?{sgO>3!nd%w)rLGP2l zKhK%D!V^+iuH8$!G0D4bj+Jl&M+WEA+sz6M3>=4iN{rl?IyrW1nBc;)XU0@!9mgG4 zesuR=nE3y6e89Q=0iVyy#{_J9AK%@a<9ncH;?*CU|F6sbm$k9JDk&lCv47qAtiLzU zPxeW9($8m>aPfmy2c0sU{WYxzVx?H_=3`d>GJy(_^rDd)SP}w z)zAFwpY`v%tw#F1s<3A}Pt>nvns5Cuf35A?4cXUNUKBNa`guC5T}b$qT&UWHl3&*z z>oPWQWGp)I{e{s1foBda9|F!h@pR2cj zuk!zKdG+7x*ICwN{eHRV|C6;1moqOdi+Z~M&i(a4f3mLDZ!w53bTdo0vf6TYD_g(ewW|m0{;yxXrM_-!{jRzCrT<#3rHvS0Wr;pq{pDYcyLIi| zdA|H_pC4{pQgA`SN_asTy8_dj+yky1mc_mhWzpiC(%G70v z|Chdh-S%Hkxp+iZ|Mb4jvO?s4U)PuAFTMUfn$0kM+NPHa=T>@0fBRrz#8_7L;8miq z0|U=(yDxl9Y%?3Wi(VbA4B{*JSa|E_{$K9=Cugp=-(0ut|E=iXAuaRWepQJ#{Icx* z66#y8wOMxRv-=Z|rhMJDuk-QZ@1GbL1h<0D1+Y7lp8Rv~-a_+hHc$K&&M4Ji4*jR* zAD^mIvM))o+S>ZlJ?V8`emqNL5}YPxw|Oxz8ibs_pwA&85Ru9hBv^1U!PjA5r0AUY zbL`dE*Vx^Dwf)ZX`LSESecKoF*8cW#`}@AiwO{{-F8{pt(%)Yv^^BIP{hj|h>{8Lq zQy$FI)TY0fw|u?OHKhj;N=?YyUjh^!XfaJw|5N*pF);K0l4twZe0?5wWb&K~)8}1W z|LE7zdm((GOZM-cZ232**Fo&%@17s4dt%F`?Qdr}{HbuZH@jJA>nWB!&wpt@RkmMk z%-F%OZ%!g;yF{vf6?bD0Qxr>$hPBR$%<_h^f1XeN|DWgS_rv@8Z_V_5UH>LGL~$~R zzI^}oL{7NtudjW1qW6Etz6jT3J5~44@MOUCkWFd~f(N!6LDpWmZ&wUZNzh`NcFw-@ z&(zQ7U$I3lnSbTSRj+?{Wi9W_J@M#7->N_9>!0~%|F$|mFaGL&$)DS|PrSOXuHBb) zcH!Q*-5XZ@Tz}Q<(|bFQd!c(K?2R>Ie5>oreOsY{;RajjJkG{G4wFuX*w6J}i}};e z)o(o?@A|9zZs(bAWvSbi`#m$Z?%)1es($8$$lv+%gn7T6eJaj&Z;CF@5}6AZMV3eQ zvj{NAC0-I?X>(ZM#iFD9|NOoA*Zxf2^55lIb@0rUU;f?mtCD$t>}1VT(|>x|e{0{o zJ}>JRQ>5j1laXnswU?M8sPT8TvvKvz+hmlVBo|Q#R3}e zf6}e5`=nsrx^MMgH}jw1_OA=(b4@8zDgDzOTk6n1ck`_^-PJm~!fzx$=A0*gbD!l@ z&Vb#_eWzo$-)Z5Hc=$al$JvRY=j@^$b|y*2rx)V(7)(DRF|A|DVIaj zv^42Kb^e|%pN8hz9ZTau3q&hFn{a&bQV?W(&i8cwoxkayI@$NBt>0TWLH7OZU`}4! zTW-Da&y{!GyFR~5?zX?9o62*=_4OfY58Cr=^yJlq6S$|pu2yMacp+%k-*mu?L*;41 zb-h#T>;CjV-GBeP_@`S(Bg;DK|7QL3%l@;|oKa=(iMe<8*Bp1)=y9JZu2|{dzGwT- zusk^@cWS$n+Je@DJGP25aWupkd=}uynch(3qrbl_uufHw@qc*S?ge3tA@yv5kI$E% zxAWO9GrzgkOR4^D*SmG6SpFzHWnkZN=Mp<3i-Y`>N;VcYhlE&`KdpPp9N#j%cy{LB zs)tc)-<3xsCG1_lzap>Tq}~5zv+9EvDe1DusFrWCPGGptv}=NT14DwHgMt!M>dc0H z*?(N`EM5Iuc251$7aIGt58S#}8M$#qtVzJs6&I8qtc$J>xmP9mo^OL0qj`xF1LFnG zFsar91)LdzAF{vy>HIVO{Ay4~=*jBq|9%2|6S@XGfl_oM#S6w zQHBxQk`{E%(qpfAGHv$LwR40ov~=J9?!dr!fjLEvv2meb0NiN<-+Xdgw?sEN`>hSelgY`|>3$JS)Cq4yjf9K(F@d7mvyj>3bpZMNHhsWfg z$eVq2a~U;Ln8aS`cI<52?efnxuY+Oo%p<0?0uBsc9A~CGBrE{UhkmX8@AGf75aasa z=UGCo{Sck}?cq=jt=Qsn}Sp)e#I8HH(;ZR_RSy9N(;^y&S zYO%O$D$~Eq&;RWyRaWH@-rl}H$0UWx?T0H@h6hJOLyv2?;sw*j z@N@A~>i?cR{>1*@`}I@18WgYoxa`Xuy85?qP~Y!gpBEi^{H*0_TJxRVe0^^walWXE zyIg0<$iiUE%p?$@{NdD3=AY*EA7=dd_W#$aK(z(ij;)XSCSxUD_S8CJ{gP+#m%E<7 z%eV2|y55M<-pBI5!D)9cwJ|U);I)0%dccEI#Pz_0tUq5T)<3(``|WG`(SKc0`>&ta z|LiV%Rqv5|??UQ+v^_3*zIKmS#gh2d2YI;}4J;;KP~_lgb_iBmVD#y|M#{I_YxeK` zt9NZxl=8+iEDB698;bf>8Ce=s4fNU_d{|ByF~+WWb=}82{QK*2QIYj0>ehi*B%g2n zX7}yu^|S4p%H>TyI?f;*qm0u4vmitGF z{al{@HT*f-n)9FXGtMqAy}kc;f@1Y<>kfwbZVT7)GI21dv9c&6xIDP}nf=rIe;*2e zo;_dVdgcGSPmk4w&PQctoH@UFRpt!0zp1(tIA0V^yJ!YEo<>4ALz~HLHT!C*{oiZ< z?iBue>J!JY=5;#@l5Ku1ZQ5D;PuleV)^D%Q8wNa=k?}NQoFnn#aNL%SehiEUdKws5 z)^O;!9$3C#X?;~ixx;Ucnu_1Qu5T0AX1~MXk`IH@fviPEh02U94$4Y;4Gb(@EK@js zY_I<@^s z99#Y5Ty);F*AWsYre9)aWNBdUFkx(z;Jne*V6*sJ;Qp+&0#W=MudUzxGO2jAs_SlY_g~u15$CIR;8ajd zj7kGTf}aBe(^^gyZf5(hJN_J7zF+D7$yBDWa~G3)?YHmRUzzLpdg0omZ%;pedG+5p z&GxU-r?dX;`nJF9p5wa}N`JKyjTq~4WRkTx8YI@9o1u7t5!99pe#>{lrQ!N<6BX^> zKB?Po-p)U?q(*1Hkep^_frNFU4#!_~5qHV1g;*J+&egUPT5aLzBZT z4)H8zt`3(cuXbtLwf^7Q+MA-j{25<=A2Vf@3+B%ZPF=LHj>Ag$!^HW219yJgcutrg5xsIq>+?tDnw>-CwwW|0%95*V`K1w|~vC^>Z?VYEP)@O|#o| z>1Vj>znAs;tAB=H{dL{M(bs+o$B%=;$Dfu9Fis2W|6au6uxDHP6M+{~K*Nw5j}XW)@%iWLfQ zXI*`nX}Z#aH>Q=R1$I|Wud(~^_2&JjLM>}9rhfn8EEUY3X8JF*c((c+04TG1~7r!y+@8vzv+SORt1qxB$c9jjXnf2QoNyTo3%O@QDl57r3-A zTkmy#Xi~msmhy)6x39d&#|a?`olH{bI6Ci_)=Hg6Z#5#wWL4K0_5WgVFES4)ub zm2T7adn(iS7uK(hc~DtlBCf#5;?Ur>__P4W)B`)Y+l&6sw^v^;FSG3QtJ7UKOjkDi z+WJ-XX2+BsdWIUuYp!?5q}OP6(3pZD$gy?gznxpy{4o19#$4B7$K zsVK?D;-pw$5&p33yte>|i?sv7_EZ!d4=-H;snl!1YP!PC{xWt~$( F695xY89M*~ literal 0 HcmV?d00001 diff --git a/example_app/web/index.html b/example_app/web/index.html new file mode 100644 index 0000000..56387c8 --- /dev/null +++ b/example_app/web/index.html @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + example_app + + + + + + + + + + diff --git a/example_app/web/manifest.json b/example_app/web/manifest.json new file mode 100644 index 0000000..16a251d --- /dev/null +++ b/example_app/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "example_app", + "short_name": "example_app", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +}