Jonny Borges
Committed by GitHub

Merge pull request #1497 from Bdaya-Dev/router-outlet

[WIP] Implement Router outlet pattern for getx
Showing 100 changed files with 2444 additions and 0 deletions

Too many changes to show.

To preserve performance only 100 of 100+ files are displayed.

  1 +{
  2 + // Use IntelliSense to learn about possible attributes.
  3 + // Hover to view descriptions of existing attributes.
  4 + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  5 + "version": "0.2.0",
  6 + "configurations": [
  7 + {
  8 + "name": "getx",
  9 + "request": "launch",
  10 + "type": "dart"
  11 + },
  12 + {
  13 + "name": "example",
  14 + "cwd": "example",
  15 + "request": "launch",
  16 + "type": "dart"
  17 + },
  18 + {
  19 + "name": "example_nav2",
  20 + "cwd": "example_nav2",
  21 + "request": "launch",
  22 + "type": "dart"
  23 + }
  24 + ]
  25 +}
  1 +# Miscellaneous
  2 +*.class
  3 +*.log
  4 +*.pyc
  5 +*.swp
  6 +.DS_Store
  7 +.atom/
  8 +.buildlog/
  9 +.history
  10 +.svn/
  11 +
  12 +# IntelliJ related
  13 +*.iml
  14 +*.ipr
  15 +*.iws
  16 +.idea/
  17 +
  18 +# The .vscode folder contains launch configuration and tasks you configure in
  19 +# VS Code which you may wish to be included in version control, so this line
  20 +# is commented out by default.
  21 +#.vscode/
  22 +
  23 +# Flutter/Dart/Pub related
  24 +**/doc/api/
  25 +**/ios/Flutter/.last_build_id
  26 +.dart_tool/
  27 +.flutter-plugins
  28 +.flutter-plugins-dependencies
  29 +.packages
  30 +.pub-cache/
  31 +.pub/
  32 +/build/
  33 +
  34 +# Web related
  35 +lib/generated_plugin_registrant.dart
  36 +
  37 +# Symbolication related
  38 +app.*.symbols
  39 +
  40 +# Obfuscation related
  41 +app.*.map.json
  42 +
  43 +# Android Studio will place build artifacts here
  44 +/android/app/debug
  45 +/android/app/profile
  46 +/android/app/release
  1 +# This file tracks properties of this Flutter project.
  2 +# Used by Flutter tool to assess capabilities and perform upgrades etc.
  3 +#
  4 +# This file should be version controlled and should not be manually edited.
  5 +
  6 +version:
  7 + revision: b22742018b3edf16c6cadd7b76d9db5e7f9064b5
  8 + channel: stable
  9 +
  10 +project_type: app
  1 +# example_nav2
  2 +
  3 +A new Flutter project.
  4 +
  5 +## Getting Started
  6 +
  7 +This project is a starting point for a Flutter application.
  8 +
  9 +A few resources to get you started if this is your first Flutter project:
  10 +
  11 +- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab)
  12 +- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook)
  13 +
  14 +For help getting started with Flutter, view our
  15 +[online documentation](https://flutter.dev/docs), which offers tutorials,
  16 +samples, guidance on mobile development, and a full API reference.
  1 +gradle-wrapper.jar
  2 +/.gradle
  3 +/captures/
  4 +/gradlew
  5 +/gradlew.bat
  6 +/local.properties
  7 +GeneratedPluginRegistrant.java
  8 +
  9 +# Remember to never publicly share your keystore.
  10 +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
  11 +key.properties
  1 +def localProperties = new Properties()
  2 +def localPropertiesFile = rootProject.file('local.properties')
  3 +if (localPropertiesFile.exists()) {
  4 + localPropertiesFile.withReader('UTF-8') { reader ->
  5 + localProperties.load(reader)
  6 + }
  7 +}
  8 +
  9 +def flutterRoot = localProperties.getProperty('flutter.sdk')
  10 +if (flutterRoot == null) {
  11 + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
  12 +}
  13 +
  14 +def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
  15 +if (flutterVersionCode == null) {
  16 + flutterVersionCode = '1'
  17 +}
  18 +
  19 +def flutterVersionName = localProperties.getProperty('flutter.versionName')
  20 +if (flutterVersionName == null) {
  21 + flutterVersionName = '1.0'
  22 +}
  23 +
  24 +apply plugin: 'com.android.application'
  25 +apply plugin: 'kotlin-android'
  26 +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
  27 +
  28 +android {
  29 + compileSdkVersion 30
  30 +
  31 + sourceSets {
  32 + main.java.srcDirs += 'src/main/kotlin'
  33 + }
  34 +
  35 + defaultConfig {
  36 + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
  37 + applicationId "com.get.example_nav2"
  38 + minSdkVersion 16
  39 + targetSdkVersion 30
  40 + versionCode flutterVersionCode.toInteger()
  41 + versionName flutterVersionName
  42 + }
  43 +
  44 + buildTypes {
  45 + release {
  46 + // TODO: Add your own signing config for the release build.
  47 + // Signing with the debug keys for now, so `flutter run --release` works.
  48 + signingConfig signingConfigs.debug
  49 + }
  50 + }
  51 +}
  52 +
  53 +flutter {
  54 + source '../..'
  55 +}
  56 +
  57 +dependencies {
  58 + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
  59 +}
  1 +<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2 + package="com.get.example_nav2">
  3 + <!-- Flutter needs it to communicate with the running application
  4 + to allow setting breakpoints, to provide hot reload, etc.
  5 + -->
  6 + <uses-permission android:name="android.permission.INTERNET"/>
  7 +</manifest>
  1 +<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2 + package="com.get.example_nav2">
  3 + <application
  4 + android:label="example_nav2"
  5 + android:icon="@mipmap/ic_launcher">
  6 + <activity
  7 + android:name=".MainActivity"
  8 + android:launchMode="singleTop"
  9 + android:theme="@style/LaunchTheme"
  10 + android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
  11 + android:hardwareAccelerated="true"
  12 + android:windowSoftInputMode="adjustResize">
  13 + <!-- Specifies an Android theme to apply to this Activity as soon as
  14 + the Android process has started. This theme is visible to the user
  15 + while the Flutter UI initializes. After that, this theme continues
  16 + to determine the Window background behind the Flutter UI. -->
  17 + <meta-data
  18 + android:name="io.flutter.embedding.android.NormalTheme"
  19 + android:resource="@style/NormalTheme"
  20 + />
  21 + <!-- Displays an Android View that continues showing the launch screen
  22 + Drawable until Flutter paints its first frame, then this splash
  23 + screen fades out. A splash screen is useful to avoid any visual
  24 + gap between the end of Android's launch screen and the painting of
  25 + Flutter's first frame. -->
  26 + <meta-data
  27 + android:name="io.flutter.embedding.android.SplashScreenDrawable"
  28 + android:resource="@drawable/launch_background"
  29 + />
  30 + <intent-filter>
  31 + <action android:name="android.intent.action.MAIN"/>
  32 + <category android:name="android.intent.category.LAUNCHER"/>
  33 + </intent-filter>
  34 + </activity>
  35 + <!-- Don't delete the meta-data below.
  36 + This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
  37 + <meta-data
  38 + android:name="flutterEmbedding"
  39 + android:value="2" />
  40 + </application>
  41 +</manifest>
  1 +package com.get.example_nav2
  2 +
  3 +import io.flutter.embedding.android.FlutterActivity
  4 +
  5 +class MainActivity: FlutterActivity() {
  6 +}
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<!-- Modify this file to customize your launch splash screen -->
  3 +<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  4 + <item android:drawable="?android:colorBackground" />
  5 +
  6 + <!-- You can insert your own image assets here -->
  7 + <!-- <item>
  8 + <bitmap
  9 + android:gravity="center"
  10 + android:src="@mipmap/launch_image" />
  11 + </item> -->
  12 +</layer-list>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<!-- Modify this file to customize your launch splash screen -->
  3 +<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  4 + <item android:drawable="@android:color/white" />
  5 +
  6 + <!-- You can insert your own image assets here -->
  7 + <!-- <item>
  8 + <bitmap
  9 + android:gravity="center"
  10 + android:src="@mipmap/launch_image" />
  11 + </item> -->
  12 +</layer-list>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<resources>
  3 + <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
  4 + <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
  5 + <!-- Show a splash screen on the activity. Automatically removed when
  6 + Flutter draws its first frame -->
  7 + <item name="android:windowBackground">@drawable/launch_background</item>
  8 + </style>
  9 + <!-- Theme applied to the Android Window as soon as the process has started.
  10 + This theme determines the color of the Android Window while your
  11 + Flutter UI initializes, as well as behind your Flutter UI while its
  12 + running.
  13 +
  14 + This Theme is only used starting with V2 of Flutter's Android embedding. -->
  15 + <style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
  16 + <item name="android:windowBackground">?android:colorBackground</item>
  17 + </style>
  18 +</resources>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<resources>
  3 + <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
  4 + <style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
  5 + <!-- Show a splash screen on the activity. Automatically removed when
  6 + Flutter draws its first frame -->
  7 + <item name="android:windowBackground">@drawable/launch_background</item>
  8 + </style>
  9 + <!-- Theme applied to the Android Window as soon as the process has started.
  10 + This theme determines the color of the Android Window while your
  11 + Flutter UI initializes, as well as behind your Flutter UI while its
  12 + running.
  13 +
  14 + This Theme is only used starting with V2 of Flutter's Android embedding. -->
  15 + <style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
  16 + <item name="android:windowBackground">?android:colorBackground</item>
  17 + </style>
  18 +</resources>
  1 +<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2 + package="com.get.example_nav2">
  3 + <!-- Flutter needs it to communicate with the running application
  4 + to allow setting breakpoints, to provide hot reload, etc.
  5 + -->
  6 + <uses-permission android:name="android.permission.INTERNET"/>
  7 +</manifest>
  1 +buildscript {
  2 + ext.kotlin_version = '1.3.50'
  3 + repositories {
  4 + google()
  5 + jcenter()
  6 + }
  7 +
  8 + dependencies {
  9 + classpath 'com.android.tools.build:gradle:4.1.0'
  10 + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
  11 + }
  12 +}
  13 +
  14 +allprojects {
  15 + repositories {
  16 + google()
  17 + jcenter()
  18 + }
  19 +}
  20 +
  21 +rootProject.buildDir = '../build'
  22 +subprojects {
  23 + project.buildDir = "${rootProject.buildDir}/${project.name}"
  24 + project.evaluationDependsOn(':app')
  25 +}
  26 +
  27 +task clean(type: Delete) {
  28 + delete rootProject.buildDir
  29 +}
  1 +org.gradle.jvmargs=-Xmx1536M
  2 +android.useAndroidX=true
  3 +android.enableJetifier=true
  1 +#Fri Jun 23 08:50:38 CEST 2017
  2 +distributionBase=GRADLE_USER_HOME
  3 +distributionPath=wrapper/dists
  4 +zipStoreBase=GRADLE_USER_HOME
  5 +zipStorePath=wrapper/dists
  6 +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip
  1 +include ':app'
  2 +
  3 +def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
  4 +def properties = new Properties()
  5 +
  6 +assert localPropertiesFile.exists()
  7 +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
  8 +
  9 +def flutterSdkPath = properties.getProperty("flutter.sdk")
  10 +assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
  11 +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
  1 +*.mode1v3
  2 +*.mode2v3
  3 +*.moved-aside
  4 +*.pbxuser
  5 +*.perspectivev3
  6 +**/*sync/
  7 +.sconsign.dblite
  8 +.tags*
  9 +**/.vagrant/
  10 +**/DerivedData/
  11 +Icon?
  12 +**/Pods/
  13 +**/.symlinks/
  14 +profile
  15 +xcuserdata
  16 +**/.generated/
  17 +Flutter/App.framework
  18 +Flutter/Flutter.framework
  19 +Flutter/Flutter.podspec
  20 +Flutter/Generated.xcconfig
  21 +Flutter/ephemeral/
  22 +Flutter/app.flx
  23 +Flutter/app.zip
  24 +Flutter/flutter_assets/
  25 +Flutter/flutter_export_environment.sh
  26 +ServiceDefinitions.json
  27 +Runner/GeneratedPluginRegistrant.*
  28 +
  29 +# Exceptions to above rules.
  30 +!default.mode1v3
  31 +!default.mode2v3
  32 +!default.pbxuser
  33 +!default.perspectivev3
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>CFBundleDevelopmentRegion</key>
  6 + <string>en</string>
  7 + <key>CFBundleExecutable</key>
  8 + <string>App</string>
  9 + <key>CFBundleIdentifier</key>
  10 + <string>io.flutter.flutter.app</string>
  11 + <key>CFBundleInfoDictionaryVersion</key>
  12 + <string>6.0</string>
  13 + <key>CFBundleName</key>
  14 + <string>App</string>
  15 + <key>CFBundlePackageType</key>
  16 + <string>FMWK</string>
  17 + <key>CFBundleShortVersionString</key>
  18 + <string>1.0</string>
  19 + <key>CFBundleSignature</key>
  20 + <string>????</string>
  21 + <key>CFBundleVersion</key>
  22 + <string>1.0</string>
  23 + <key>MinimumOSVersion</key>
  24 + <string>8.0</string>
  25 +</dict>
  26 +</plist>
  1 +#include "Generated.xcconfig"
  1 +#include "Generated.xcconfig"
  1 +// !$*UTF8*$!
  2 +{
  3 + archiveVersion = 1;
  4 + classes = {
  5 + };
  6 + objectVersion = 46;
  7 + objects = {
  8 +
  9 +/* Begin PBXBuildFile section */
  10 + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
  11 + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
  12 + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
  13 + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
  14 + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
  15 + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
  16 +/* End PBXBuildFile section */
  17 +
  18 +/* Begin PBXCopyFilesBuildPhase section */
  19 + 9705A1C41CF9048500538489 /* Embed Frameworks */ = {
  20 + isa = PBXCopyFilesBuildPhase;
  21 + buildActionMask = 2147483647;
  22 + dstPath = "";
  23 + dstSubfolderSpec = 10;
  24 + files = (
  25 + );
  26 + name = "Embed Frameworks";
  27 + runOnlyForDeploymentPostprocessing = 0;
  28 + };
  29 +/* End PBXCopyFilesBuildPhase section */
  30 +
  31 +/* Begin PBXFileReference section */
  32 + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
  33 + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
  34 + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
  35 + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
  36 + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
  37 + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
  38 + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
  39 + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
  40 + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
  41 + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
  42 + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
  43 + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
  44 + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
  45 +/* End PBXFileReference section */
  46 +
  47 +/* Begin PBXFrameworksBuildPhase section */
  48 + 97C146EB1CF9000F007C117D /* Frameworks */ = {
  49 + isa = PBXFrameworksBuildPhase;
  50 + buildActionMask = 2147483647;
  51 + files = (
  52 + );
  53 + runOnlyForDeploymentPostprocessing = 0;
  54 + };
  55 +/* End PBXFrameworksBuildPhase section */
  56 +
  57 +/* Begin PBXGroup section */
  58 + 9740EEB11CF90186004384FC /* Flutter */ = {
  59 + isa = PBXGroup;
  60 + children = (
  61 + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
  62 + 9740EEB21CF90195004384FC /* Debug.xcconfig */,
  63 + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
  64 + 9740EEB31CF90195004384FC /* Generated.xcconfig */,
  65 + );
  66 + name = Flutter;
  67 + sourceTree = "<group>";
  68 + };
  69 + 97C146E51CF9000F007C117D = {
  70 + isa = PBXGroup;
  71 + children = (
  72 + 9740EEB11CF90186004384FC /* Flutter */,
  73 + 97C146F01CF9000F007C117D /* Runner */,
  74 + 97C146EF1CF9000F007C117D /* Products */,
  75 + );
  76 + sourceTree = "<group>";
  77 + };
  78 + 97C146EF1CF9000F007C117D /* Products */ = {
  79 + isa = PBXGroup;
  80 + children = (
  81 + 97C146EE1CF9000F007C117D /* Runner.app */,
  82 + );
  83 + name = Products;
  84 + sourceTree = "<group>";
  85 + };
  86 + 97C146F01CF9000F007C117D /* Runner */ = {
  87 + isa = PBXGroup;
  88 + children = (
  89 + 97C146FA1CF9000F007C117D /* Main.storyboard */,
  90 + 97C146FD1CF9000F007C117D /* Assets.xcassets */,
  91 + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
  92 + 97C147021CF9000F007C117D /* Info.plist */,
  93 + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
  94 + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
  95 + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
  96 + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
  97 + );
  98 + path = Runner;
  99 + sourceTree = "<group>";
  100 + };
  101 +/* End PBXGroup section */
  102 +
  103 +/* Begin PBXNativeTarget section */
  104 + 97C146ED1CF9000F007C117D /* Runner */ = {
  105 + isa = PBXNativeTarget;
  106 + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
  107 + buildPhases = (
  108 + 9740EEB61CF901F6004384FC /* Run Script */,
  109 + 97C146EA1CF9000F007C117D /* Sources */,
  110 + 97C146EB1CF9000F007C117D /* Frameworks */,
  111 + 97C146EC1CF9000F007C117D /* Resources */,
  112 + 9705A1C41CF9048500538489 /* Embed Frameworks */,
  113 + 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
  114 + );
  115 + buildRules = (
  116 + );
  117 + dependencies = (
  118 + );
  119 + name = Runner;
  120 + productName = Runner;
  121 + productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
  122 + productType = "com.apple.product-type.application";
  123 + };
  124 +/* End PBXNativeTarget section */
  125 +
  126 +/* Begin PBXProject section */
  127 + 97C146E61CF9000F007C117D /* Project object */ = {
  128 + isa = PBXProject;
  129 + attributes = {
  130 + LastUpgradeCheck = 1020;
  131 + ORGANIZATIONNAME = "";
  132 + TargetAttributes = {
  133 + 97C146ED1CF9000F007C117D = {
  134 + CreatedOnToolsVersion = 7.3.1;
  135 + LastSwiftMigration = 1100;
  136 + };
  137 + };
  138 + };
  139 + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
  140 + compatibilityVersion = "Xcode 9.3";
  141 + developmentRegion = en;
  142 + hasScannedForEncodings = 0;
  143 + knownRegions = (
  144 + en,
  145 + Base,
  146 + );
  147 + mainGroup = 97C146E51CF9000F007C117D;
  148 + productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
  149 + projectDirPath = "";
  150 + projectRoot = "";
  151 + targets = (
  152 + 97C146ED1CF9000F007C117D /* Runner */,
  153 + );
  154 + };
  155 +/* End PBXProject section */
  156 +
  157 +/* Begin PBXResourcesBuildPhase section */
  158 + 97C146EC1CF9000F007C117D /* Resources */ = {
  159 + isa = PBXResourcesBuildPhase;
  160 + buildActionMask = 2147483647;
  161 + files = (
  162 + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
  163 + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
  164 + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
  165 + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
  166 + );
  167 + runOnlyForDeploymentPostprocessing = 0;
  168 + };
  169 +/* End PBXResourcesBuildPhase section */
  170 +
  171 +/* Begin PBXShellScriptBuildPhase section */
  172 + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
  173 + isa = PBXShellScriptBuildPhase;
  174 + buildActionMask = 2147483647;
  175 + files = (
  176 + );
  177 + inputPaths = (
  178 + );
  179 + name = "Thin Binary";
  180 + outputPaths = (
  181 + );
  182 + runOnlyForDeploymentPostprocessing = 0;
  183 + shellPath = /bin/sh;
  184 + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
  185 + };
  186 + 9740EEB61CF901F6004384FC /* Run Script */ = {
  187 + isa = PBXShellScriptBuildPhase;
  188 + buildActionMask = 2147483647;
  189 + files = (
  190 + );
  191 + inputPaths = (
  192 + );
  193 + name = "Run Script";
  194 + outputPaths = (
  195 + );
  196 + runOnlyForDeploymentPostprocessing = 0;
  197 + shellPath = /bin/sh;
  198 + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
  199 + };
  200 +/* End PBXShellScriptBuildPhase section */
  201 +
  202 +/* Begin PBXSourcesBuildPhase section */
  203 + 97C146EA1CF9000F007C117D /* Sources */ = {
  204 + isa = PBXSourcesBuildPhase;
  205 + buildActionMask = 2147483647;
  206 + files = (
  207 + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
  208 + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
  209 + );
  210 + runOnlyForDeploymentPostprocessing = 0;
  211 + };
  212 +/* End PBXSourcesBuildPhase section */
  213 +
  214 +/* Begin PBXVariantGroup section */
  215 + 97C146FA1CF9000F007C117D /* Main.storyboard */ = {
  216 + isa = PBXVariantGroup;
  217 + children = (
  218 + 97C146FB1CF9000F007C117D /* Base */,
  219 + );
  220 + name = Main.storyboard;
  221 + sourceTree = "<group>";
  222 + };
  223 + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
  224 + isa = PBXVariantGroup;
  225 + children = (
  226 + 97C147001CF9000F007C117D /* Base */,
  227 + );
  228 + name = LaunchScreen.storyboard;
  229 + sourceTree = "<group>";
  230 + };
  231 +/* End PBXVariantGroup section */
  232 +
  233 +/* Begin XCBuildConfiguration section */
  234 + 249021D3217E4FDB00AE95B9 /* Profile */ = {
  235 + isa = XCBuildConfiguration;
  236 + buildSettings = {
  237 + ALWAYS_SEARCH_USER_PATHS = NO;
  238 + CLANG_ANALYZER_NONNULL = YES;
  239 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
  240 + CLANG_CXX_LIBRARY = "libc++";
  241 + CLANG_ENABLE_MODULES = YES;
  242 + CLANG_ENABLE_OBJC_ARC = YES;
  243 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  244 + CLANG_WARN_BOOL_CONVERSION = YES;
  245 + CLANG_WARN_COMMA = YES;
  246 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  247 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
  248 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  249 + CLANG_WARN_EMPTY_BODY = YES;
  250 + CLANG_WARN_ENUM_CONVERSION = YES;
  251 + CLANG_WARN_INFINITE_RECURSION = YES;
  252 + CLANG_WARN_INT_CONVERSION = YES;
  253 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  254 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
  255 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  256 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  257 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  258 + CLANG_WARN_STRICT_PROTOTYPES = YES;
  259 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  260 + CLANG_WARN_UNREACHABLE_CODE = YES;
  261 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
  262 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
  263 + COPY_PHASE_STRIP = NO;
  264 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
  265 + ENABLE_NS_ASSERTIONS = NO;
  266 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  267 + GCC_C_LANGUAGE_STANDARD = gnu99;
  268 + GCC_NO_COMMON_BLOCKS = YES;
  269 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  270 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  271 + GCC_WARN_UNDECLARED_SELECTOR = YES;
  272 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  273 + GCC_WARN_UNUSED_FUNCTION = YES;
  274 + GCC_WARN_UNUSED_VARIABLE = YES;
  275 + IPHONEOS_DEPLOYMENT_TARGET = 9.0;
  276 + MTL_ENABLE_DEBUG_INFO = NO;
  277 + SDKROOT = iphoneos;
  278 + SUPPORTED_PLATFORMS = iphoneos;
  279 + TARGETED_DEVICE_FAMILY = "1,2";
  280 + VALIDATE_PRODUCT = YES;
  281 + };
  282 + name = Profile;
  283 + };
  284 + 249021D4217E4FDB00AE95B9 /* Profile */ = {
  285 + isa = XCBuildConfiguration;
  286 + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
  287 + buildSettings = {
  288 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  289 + CLANG_ENABLE_MODULES = YES;
  290 + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
  291 + ENABLE_BITCODE = NO;
  292 + INFOPLIST_FILE = Runner/Info.plist;
  293 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
  294 + PRODUCT_BUNDLE_IDENTIFIER = com.get.exampleNav2;
  295 + PRODUCT_NAME = "$(TARGET_NAME)";
  296 + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
  297 + SWIFT_VERSION = 5.0;
  298 + VERSIONING_SYSTEM = "apple-generic";
  299 + };
  300 + name = Profile;
  301 + };
  302 + 97C147031CF9000F007C117D /* Debug */ = {
  303 + isa = XCBuildConfiguration;
  304 + buildSettings = {
  305 + ALWAYS_SEARCH_USER_PATHS = NO;
  306 + CLANG_ANALYZER_NONNULL = YES;
  307 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
  308 + CLANG_CXX_LIBRARY = "libc++";
  309 + CLANG_ENABLE_MODULES = YES;
  310 + CLANG_ENABLE_OBJC_ARC = YES;
  311 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  312 + CLANG_WARN_BOOL_CONVERSION = YES;
  313 + CLANG_WARN_COMMA = YES;
  314 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  315 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
  316 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  317 + CLANG_WARN_EMPTY_BODY = YES;
  318 + CLANG_WARN_ENUM_CONVERSION = YES;
  319 + CLANG_WARN_INFINITE_RECURSION = YES;
  320 + CLANG_WARN_INT_CONVERSION = YES;
  321 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  322 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
  323 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  324 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  325 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  326 + CLANG_WARN_STRICT_PROTOTYPES = YES;
  327 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  328 + CLANG_WARN_UNREACHABLE_CODE = YES;
  329 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
  330 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
  331 + COPY_PHASE_STRIP = NO;
  332 + DEBUG_INFORMATION_FORMAT = dwarf;
  333 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  334 + ENABLE_TESTABILITY = YES;
  335 + GCC_C_LANGUAGE_STANDARD = gnu99;
  336 + GCC_DYNAMIC_NO_PIC = NO;
  337 + GCC_NO_COMMON_BLOCKS = YES;
  338 + GCC_OPTIMIZATION_LEVEL = 0;
  339 + GCC_PREPROCESSOR_DEFINITIONS = (
  340 + "DEBUG=1",
  341 + "$(inherited)",
  342 + );
  343 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  344 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  345 + GCC_WARN_UNDECLARED_SELECTOR = YES;
  346 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  347 + GCC_WARN_UNUSED_FUNCTION = YES;
  348 + GCC_WARN_UNUSED_VARIABLE = YES;
  349 + IPHONEOS_DEPLOYMENT_TARGET = 9.0;
  350 + MTL_ENABLE_DEBUG_INFO = YES;
  351 + ONLY_ACTIVE_ARCH = YES;
  352 + SDKROOT = iphoneos;
  353 + TARGETED_DEVICE_FAMILY = "1,2";
  354 + };
  355 + name = Debug;
  356 + };
  357 + 97C147041CF9000F007C117D /* Release */ = {
  358 + isa = XCBuildConfiguration;
  359 + buildSettings = {
  360 + ALWAYS_SEARCH_USER_PATHS = NO;
  361 + CLANG_ANALYZER_NONNULL = YES;
  362 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
  363 + CLANG_CXX_LIBRARY = "libc++";
  364 + CLANG_ENABLE_MODULES = YES;
  365 + CLANG_ENABLE_OBJC_ARC = YES;
  366 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  367 + CLANG_WARN_BOOL_CONVERSION = YES;
  368 + CLANG_WARN_COMMA = YES;
  369 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  370 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
  371 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  372 + CLANG_WARN_EMPTY_BODY = YES;
  373 + CLANG_WARN_ENUM_CONVERSION = YES;
  374 + CLANG_WARN_INFINITE_RECURSION = YES;
  375 + CLANG_WARN_INT_CONVERSION = YES;
  376 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  377 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
  378 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  379 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  380 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  381 + CLANG_WARN_STRICT_PROTOTYPES = YES;
  382 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  383 + CLANG_WARN_UNREACHABLE_CODE = YES;
  384 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
  385 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
  386 + COPY_PHASE_STRIP = NO;
  387 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
  388 + ENABLE_NS_ASSERTIONS = NO;
  389 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  390 + GCC_C_LANGUAGE_STANDARD = gnu99;
  391 + GCC_NO_COMMON_BLOCKS = YES;
  392 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  393 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  394 + GCC_WARN_UNDECLARED_SELECTOR = YES;
  395 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  396 + GCC_WARN_UNUSED_FUNCTION = YES;
  397 + GCC_WARN_UNUSED_VARIABLE = YES;
  398 + IPHONEOS_DEPLOYMENT_TARGET = 9.0;
  399 + MTL_ENABLE_DEBUG_INFO = NO;
  400 + SDKROOT = iphoneos;
  401 + SUPPORTED_PLATFORMS = iphoneos;
  402 + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
  403 + TARGETED_DEVICE_FAMILY = "1,2";
  404 + VALIDATE_PRODUCT = YES;
  405 + };
  406 + name = Release;
  407 + };
  408 + 97C147061CF9000F007C117D /* Debug */ = {
  409 + isa = XCBuildConfiguration;
  410 + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
  411 + buildSettings = {
  412 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  413 + CLANG_ENABLE_MODULES = YES;
  414 + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
  415 + ENABLE_BITCODE = NO;
  416 + INFOPLIST_FILE = Runner/Info.plist;
  417 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
  418 + PRODUCT_BUNDLE_IDENTIFIER = com.get.exampleNav2;
  419 + PRODUCT_NAME = "$(TARGET_NAME)";
  420 + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
  421 + SWIFT_OPTIMIZATION_LEVEL = "-Onone";
  422 + SWIFT_VERSION = 5.0;
  423 + VERSIONING_SYSTEM = "apple-generic";
  424 + };
  425 + name = Debug;
  426 + };
  427 + 97C147071CF9000F007C117D /* Release */ = {
  428 + isa = XCBuildConfiguration;
  429 + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
  430 + buildSettings = {
  431 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  432 + CLANG_ENABLE_MODULES = YES;
  433 + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
  434 + ENABLE_BITCODE = NO;
  435 + INFOPLIST_FILE = Runner/Info.plist;
  436 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
  437 + PRODUCT_BUNDLE_IDENTIFIER = com.get.exampleNav2;
  438 + PRODUCT_NAME = "$(TARGET_NAME)";
  439 + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
  440 + SWIFT_VERSION = 5.0;
  441 + VERSIONING_SYSTEM = "apple-generic";
  442 + };
  443 + name = Release;
  444 + };
  445 +/* End XCBuildConfiguration section */
  446 +
  447 +/* Begin XCConfigurationList section */
  448 + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
  449 + isa = XCConfigurationList;
  450 + buildConfigurations = (
  451 + 97C147031CF9000F007C117D /* Debug */,
  452 + 97C147041CF9000F007C117D /* Release */,
  453 + 249021D3217E4FDB00AE95B9 /* Profile */,
  454 + );
  455 + defaultConfigurationIsVisible = 0;
  456 + defaultConfigurationName = Release;
  457 + };
  458 + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
  459 + isa = XCConfigurationList;
  460 + buildConfigurations = (
  461 + 97C147061CF9000F007C117D /* Debug */,
  462 + 97C147071CF9000F007C117D /* Release */,
  463 + 249021D4217E4FDB00AE95B9 /* Profile */,
  464 + );
  465 + defaultConfigurationIsVisible = 0;
  466 + defaultConfigurationName = Release;
  467 + };
  468 +/* End XCConfigurationList section */
  469 + };
  470 + rootObject = 97C146E61CF9000F007C117D /* Project object */;
  471 +}
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Workspace
  3 + version = "1.0">
  4 + <FileRef
  5 + location = "self:">
  6 + </FileRef>
  7 +</Workspace>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>IDEDidComputeMac32BitWarning</key>
  6 + <true/>
  7 +</dict>
  8 +</plist>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>PreviewsEnabled</key>
  6 + <false/>
  7 +</dict>
  8 +</plist>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Scheme
  3 + LastUpgradeVersion = "1020"
  4 + version = "1.3">
  5 + <BuildAction
  6 + parallelizeBuildables = "YES"
  7 + buildImplicitDependencies = "YES">
  8 + <BuildActionEntries>
  9 + <BuildActionEntry
  10 + buildForTesting = "YES"
  11 + buildForRunning = "YES"
  12 + buildForProfiling = "YES"
  13 + buildForArchiving = "YES"
  14 + buildForAnalyzing = "YES">
  15 + <BuildableReference
  16 + BuildableIdentifier = "primary"
  17 + BlueprintIdentifier = "97C146ED1CF9000F007C117D"
  18 + BuildableName = "Runner.app"
  19 + BlueprintName = "Runner"
  20 + ReferencedContainer = "container:Runner.xcodeproj">
  21 + </BuildableReference>
  22 + </BuildActionEntry>
  23 + </BuildActionEntries>
  24 + </BuildAction>
  25 + <TestAction
  26 + buildConfiguration = "Debug"
  27 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
  28 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
  29 + shouldUseLaunchSchemeArgsEnv = "YES">
  30 + <Testables>
  31 + </Testables>
  32 + <MacroExpansion>
  33 + <BuildableReference
  34 + BuildableIdentifier = "primary"
  35 + BlueprintIdentifier = "97C146ED1CF9000F007C117D"
  36 + BuildableName = "Runner.app"
  37 + BlueprintName = "Runner"
  38 + ReferencedContainer = "container:Runner.xcodeproj">
  39 + </BuildableReference>
  40 + </MacroExpansion>
  41 + <AdditionalOptions>
  42 + </AdditionalOptions>
  43 + </TestAction>
  44 + <LaunchAction
  45 + buildConfiguration = "Debug"
  46 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
  47 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
  48 + launchStyle = "0"
  49 + useCustomWorkingDirectory = "NO"
  50 + ignoresPersistentStateOnLaunch = "NO"
  51 + debugDocumentVersioning = "YES"
  52 + debugServiceExtension = "internal"
  53 + allowLocationSimulation = "YES">
  54 + <BuildableProductRunnable
  55 + runnableDebuggingMode = "0">
  56 + <BuildableReference
  57 + BuildableIdentifier = "primary"
  58 + BlueprintIdentifier = "97C146ED1CF9000F007C117D"
  59 + BuildableName = "Runner.app"
  60 + BlueprintName = "Runner"
  61 + ReferencedContainer = "container:Runner.xcodeproj">
  62 + </BuildableReference>
  63 + </BuildableProductRunnable>
  64 + <AdditionalOptions>
  65 + </AdditionalOptions>
  66 + </LaunchAction>
  67 + <ProfileAction
  68 + buildConfiguration = "Profile"
  69 + shouldUseLaunchSchemeArgsEnv = "YES"
  70 + savedToolIdentifier = ""
  71 + useCustomWorkingDirectory = "NO"
  72 + debugDocumentVersioning = "YES">
  73 + <BuildableProductRunnable
  74 + runnableDebuggingMode = "0">
  75 + <BuildableReference
  76 + BuildableIdentifier = "primary"
  77 + BlueprintIdentifier = "97C146ED1CF9000F007C117D"
  78 + BuildableName = "Runner.app"
  79 + BlueprintName = "Runner"
  80 + ReferencedContainer = "container:Runner.xcodeproj">
  81 + </BuildableReference>
  82 + </BuildableProductRunnable>
  83 + </ProfileAction>
  84 + <AnalyzeAction
  85 + buildConfiguration = "Debug">
  86 + </AnalyzeAction>
  87 + <ArchiveAction
  88 + buildConfiguration = "Release"
  89 + revealArchiveInOrganizer = "YES">
  90 + </ArchiveAction>
  91 +</Scheme>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Workspace
  3 + version = "1.0">
  4 + <FileRef
  5 + location = "group:Runner.xcodeproj">
  6 + </FileRef>
  7 +</Workspace>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>IDEDidComputeMac32BitWarning</key>
  6 + <true/>
  7 +</dict>
  8 +</plist>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>PreviewsEnabled</key>
  6 + <false/>
  7 +</dict>
  8 +</plist>
  1 +import UIKit
  2 +import Flutter
  3 +
  4 +@UIApplicationMain
  5 +@objc class AppDelegate: FlutterAppDelegate {
  6 + override func application(
  7 + _ application: UIApplication,
  8 + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  9 + ) -> Bool {
  10 + GeneratedPluginRegistrant.register(with: self)
  11 + return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  12 + }
  13 +}
  1 +{
  2 + "images" : [
  3 + {
  4 + "size" : "20x20",
  5 + "idiom" : "iphone",
  6 + "filename" : "Icon-App-20x20@2x.png",
  7 + "scale" : "2x"
  8 + },
  9 + {
  10 + "size" : "20x20",
  11 + "idiom" : "iphone",
  12 + "filename" : "Icon-App-20x20@3x.png",
  13 + "scale" : "3x"
  14 + },
  15 + {
  16 + "size" : "29x29",
  17 + "idiom" : "iphone",
  18 + "filename" : "Icon-App-29x29@1x.png",
  19 + "scale" : "1x"
  20 + },
  21 + {
  22 + "size" : "29x29",
  23 + "idiom" : "iphone",
  24 + "filename" : "Icon-App-29x29@2x.png",
  25 + "scale" : "2x"
  26 + },
  27 + {
  28 + "size" : "29x29",
  29 + "idiom" : "iphone",
  30 + "filename" : "Icon-App-29x29@3x.png",
  31 + "scale" : "3x"
  32 + },
  33 + {
  34 + "size" : "40x40",
  35 + "idiom" : "iphone",
  36 + "filename" : "Icon-App-40x40@2x.png",
  37 + "scale" : "2x"
  38 + },
  39 + {
  40 + "size" : "40x40",
  41 + "idiom" : "iphone",
  42 + "filename" : "Icon-App-40x40@3x.png",
  43 + "scale" : "3x"
  44 + },
  45 + {
  46 + "size" : "60x60",
  47 + "idiom" : "iphone",
  48 + "filename" : "Icon-App-60x60@2x.png",
  49 + "scale" : "2x"
  50 + },
  51 + {
  52 + "size" : "60x60",
  53 + "idiom" : "iphone",
  54 + "filename" : "Icon-App-60x60@3x.png",
  55 + "scale" : "3x"
  56 + },
  57 + {
  58 + "size" : "20x20",
  59 + "idiom" : "ipad",
  60 + "filename" : "Icon-App-20x20@1x.png",
  61 + "scale" : "1x"
  62 + },
  63 + {
  64 + "size" : "20x20",
  65 + "idiom" : "ipad",
  66 + "filename" : "Icon-App-20x20@2x.png",
  67 + "scale" : "2x"
  68 + },
  69 + {
  70 + "size" : "29x29",
  71 + "idiom" : "ipad",
  72 + "filename" : "Icon-App-29x29@1x.png",
  73 + "scale" : "1x"
  74 + },
  75 + {
  76 + "size" : "29x29",
  77 + "idiom" : "ipad",
  78 + "filename" : "Icon-App-29x29@2x.png",
  79 + "scale" : "2x"
  80 + },
  81 + {
  82 + "size" : "40x40",
  83 + "idiom" : "ipad",
  84 + "filename" : "Icon-App-40x40@1x.png",
  85 + "scale" : "1x"
  86 + },
  87 + {
  88 + "size" : "40x40",
  89 + "idiom" : "ipad",
  90 + "filename" : "Icon-App-40x40@2x.png",
  91 + "scale" : "2x"
  92 + },
  93 + {
  94 + "size" : "76x76",
  95 + "idiom" : "ipad",
  96 + "filename" : "Icon-App-76x76@1x.png",
  97 + "scale" : "1x"
  98 + },
  99 + {
  100 + "size" : "76x76",
  101 + "idiom" : "ipad",
  102 + "filename" : "Icon-App-76x76@2x.png",
  103 + "scale" : "2x"
  104 + },
  105 + {
  106 + "size" : "83.5x83.5",
  107 + "idiom" : "ipad",
  108 + "filename" : "Icon-App-83.5x83.5@2x.png",
  109 + "scale" : "2x"
  110 + },
  111 + {
  112 + "size" : "1024x1024",
  113 + "idiom" : "ios-marketing",
  114 + "filename" : "Icon-App-1024x1024@1x.png",
  115 + "scale" : "1x"
  116 + }
  117 + ],
  118 + "info" : {
  119 + "version" : 1,
  120 + "author" : "xcode"
  121 + }
  122 +}
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "filename" : "LaunchImage.png",
  6 + "scale" : "1x"
  7 + },
  8 + {
  9 + "idiom" : "universal",
  10 + "filename" : "LaunchImage@2x.png",
  11 + "scale" : "2x"
  12 + },
  13 + {
  14 + "idiom" : "universal",
  15 + "filename" : "LaunchImage@3x.png",
  16 + "scale" : "3x"
  17 + }
  18 + ],
  19 + "info" : {
  20 + "version" : 1,
  21 + "author" : "xcode"
  22 + }
  23 +}
  1 +# Launch Screen Assets
  2 +
  3 +You can customize the launch screen with your own desired assets by replacing the image files in this directory.
  4 +
  5 +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.
  1 +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2 +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12121" systemVersion="16G29" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
  3 + <dependencies>
  4 + <deployment identifier="iOS"/>
  5 + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
  6 + </dependencies>
  7 + <scenes>
  8 + <!--View Controller-->
  9 + <scene sceneID="EHf-IW-A2E">
  10 + <objects>
  11 + <viewController id="01J-lp-oVM" sceneMemberID="viewController">
  12 + <layoutGuides>
  13 + <viewControllerLayoutGuide type="top" id="Ydg-fD-yQy"/>
  14 + <viewControllerLayoutGuide type="bottom" id="xbc-2k-c8Z"/>
  15 + </layoutGuides>
  16 + <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
  17 + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
  18 + <subviews>
  19 + <imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4">
  20 + </imageView>
  21 + </subviews>
  22 + <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
  23 + <constraints>
  24 + <constraint firstItem="YRO-k0-Ey4" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="1a2-6s-vTC"/>
  25 + <constraint firstItem="YRO-k0-Ey4" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="4X2-HB-R7a"/>
  26 + </constraints>
  27 + </view>
  28 + </viewController>
  29 + <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
  30 + </objects>
  31 + <point key="canvasLocation" x="53" y="375"/>
  32 + </scene>
  33 + </scenes>
  34 + <resources>
  35 + <image name="LaunchImage" width="168" height="185"/>
  36 + </resources>
  37 +</document>
  1 +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2 +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
  3 + <dependencies>
  4 + <deployment identifier="iOS"/>
  5 + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
  6 + </dependencies>
  7 + <scenes>
  8 + <!--Flutter View Controller-->
  9 + <scene sceneID="tne-QT-ifu">
  10 + <objects>
  11 + <viewController id="BYZ-38-t0r" customClass="FlutterViewController" sceneMemberID="viewController">
  12 + <layoutGuides>
  13 + <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
  14 + <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
  15 + </layoutGuides>
  16 + <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
  17 + <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
  18 + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
  19 + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
  20 + </view>
  21 + </viewController>
  22 + <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
  23 + </objects>
  24 + </scene>
  25 + </scenes>
  26 +</document>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>CFBundleDevelopmentRegion</key>
  6 + <string>$(DEVELOPMENT_LANGUAGE)</string>
  7 + <key>CFBundleExecutable</key>
  8 + <string>$(EXECUTABLE_NAME)</string>
  9 + <key>CFBundleIdentifier</key>
  10 + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
  11 + <key>CFBundleInfoDictionaryVersion</key>
  12 + <string>6.0</string>
  13 + <key>CFBundleName</key>
  14 + <string>example_nav2</string>
  15 + <key>CFBundlePackageType</key>
  16 + <string>APPL</string>
  17 + <key>CFBundleShortVersionString</key>
  18 + <string>$(FLUTTER_BUILD_NAME)</string>
  19 + <key>CFBundleSignature</key>
  20 + <string>????</string>
  21 + <key>CFBundleVersion</key>
  22 + <string>$(FLUTTER_BUILD_NUMBER)</string>
  23 + <key>LSRequiresIPhoneOS</key>
  24 + <true/>
  25 + <key>UILaunchStoryboardName</key>
  26 + <string>LaunchScreen</string>
  27 + <key>UIMainStoryboardFile</key>
  28 + <string>Main</string>
  29 + <key>UISupportedInterfaceOrientations</key>
  30 + <array>
  31 + <string>UIInterfaceOrientationPortrait</string>
  32 + <string>UIInterfaceOrientationLandscapeLeft</string>
  33 + <string>UIInterfaceOrientationLandscapeRight</string>
  34 + </array>
  35 + <key>UISupportedInterfaceOrientations~ipad</key>
  36 + <array>
  37 + <string>UIInterfaceOrientationPortrait</string>
  38 + <string>UIInterfaceOrientationPortraitUpsideDown</string>
  39 + <string>UIInterfaceOrientationLandscapeLeft</string>
  40 + <string>UIInterfaceOrientationLandscapeRight</string>
  41 + </array>
  42 + <key>UIViewControllerBasedStatusBarAppearance</key>
  43 + <false/>
  44 +</dict>
  45 +</plist>
  1 +#import "GeneratedPluginRegistrant.h"
  1 +class DemoProduct {
  2 + final String name;
  3 + final String id;
  4 +
  5 + DemoProduct({
  6 + required this.name,
  7 + required this.id,
  8 + });
  9 +}
  1 +import 'package:get/get.dart';
  2 +
  3 +import '../controllers/home_controller.dart';
  4 +
  5 +class HomeBinding extends Bindings {
  6 + @override
  7 + void dependencies() {
  8 + Get.lazyPut<HomeController>(
  9 + () => HomeController(),
  10 + );
  11 + }
  12 +}
  1 +import 'dart:async';
  2 +
  3 +import 'package:get/get.dart';
  4 +
  5 +class HomeController extends GetxController {
  6 + final now = DateTime.now().obs;
  7 + @override
  8 + void onReady() {
  9 + super.onReady();
  10 + Timer.periodic(
  11 + Duration(seconds: 1),
  12 + (timer) {
  13 + now.value = DateTime.now();
  14 + },
  15 + );
  16 + }
  17 +}
  1 +import 'package:example_nav2/app/modules/home/controllers/home_controller.dart';
  2 +import 'package:flutter/material.dart';
  3 +
  4 +import 'package:get/get.dart';
  5 +
  6 +class DashboardView extends GetView<HomeController> {
  7 + @override
  8 + Widget build(BuildContext context) {
  9 + return Scaffold(
  10 + body: Center(
  11 + child: Obx(
  12 + () => Column(
  13 + mainAxisSize: MainAxisSize.min,
  14 + children: [
  15 + Text(
  16 + 'DashboardView is working',
  17 + style: TextStyle(fontSize: 20),
  18 + ),
  19 + Text('Time: ${controller.now.value.toString()}')
  20 + ],
  21 + ),
  22 + ),
  23 + ),
  24 + );
  25 + }
  26 +}
  1 +import 'package:example_nav2/app/modules/home/views/dashboard_view.dart';
  2 +import 'package:example_nav2/app/routes/app_pages.dart';
  3 +import 'package:flutter/material.dart';
  4 +
  5 +import 'package:get/get.dart';
  6 +import 'package:get/get_navigation/src/nav2/get_router_delegate.dart';
  7 +import 'package:get/get_navigation/src/nav2/router_outlet.dart';
  8 +
  9 +import '../controllers/home_controller.dart';
  10 +
  11 +class HomeView extends GetView<HomeController> {
  12 + @override
  13 + Widget build(BuildContext context) {
  14 + return GetRouterOutlet.builder(
  15 + builder: (context, delegate, currentRoute) {
  16 + //This router outlet handles the appbar and the bottom navigation bar
  17 + final title = currentRoute?.title;
  18 + final currentName = currentRoute?.name;
  19 + var currentIndex = 0;
  20 + if (currentName?.startsWith(Routes.PRODUCTS) == true) currentIndex = 2;
  21 + if (currentName?.startsWith(Routes.PROFILE) == true) currentIndex = 1;
  22 + return Scaffold(
  23 + appBar: title == null
  24 + ? null
  25 + : AppBar(
  26 + title: Text(title),
  27 + centerTitle: true,
  28 + ),
  29 + body: GetRouterOutlet(
  30 + emptyPage: (delegate) => DashboardView(),
  31 + pickPages: (currentNavStack) {
  32 + // will take any route after home
  33 + final res = currentNavStack.pickAfterRoute(Routes.HOME);
  34 + // print('''RouterOutlet rebuild:
  35 + // currentStack: $currentNavStack
  36 + // pickedStack: $res''');
  37 + return res;
  38 + },
  39 + ),
  40 + bottomNavigationBar: BottomNavigationBar(
  41 + currentIndex: currentIndex,
  42 + onTap: (value) {
  43 + switch (value) {
  44 + case 0:
  45 + delegate.offUntil(Routes.HOME);
  46 + break;
  47 + case 1:
  48 + delegate.toNamed(Routes.PROFILE);
  49 + break;
  50 + case 2:
  51 + delegate.toNamed(Routes.PRODUCTS);
  52 + break;
  53 + default:
  54 + }
  55 + },
  56 + items: [
  57 + // _Paths.HOME + [Empty]
  58 + BottomNavigationBarItem(
  59 + icon: Icon(Icons.home),
  60 + label: 'Home',
  61 + ),
  62 + // _Paths.HOME + Routes.PROFILE
  63 + BottomNavigationBarItem(
  64 + icon: Icon(Icons.account_box_rounded),
  65 + label: 'Profile',
  66 + ),
  67 + // _Paths.HOME + _Paths.PRODUCTS
  68 + BottomNavigationBarItem(
  69 + icon: Icon(Icons.account_box_rounded),
  70 + label: 'Products',
  71 + ),
  72 + ],
  73 + ),
  74 + );
  75 + },
  76 + );
  77 + }
  78 +}
  1 +import 'package:get/get.dart';
  2 +
  3 +import '../controllers/product_details_controller.dart';
  4 +
  5 +class ProductDetailsBinding extends Bindings {
  6 + @override
  7 + void dependencies() {
  8 + Get.create<ProductDetailsController>(
  9 + () => ProductDetailsController(
  10 + Get.parameters['productId'] ?? '',
  11 + ),
  12 + );
  13 + }
  14 +}
  1 +import 'package:get/get.dart';
  2 +
  3 +class ProductDetailsController extends GetxController {
  4 + final String productId;
  5 +
  6 + ProductDetailsController(this.productId);
  7 +}
  1 +import 'package:flutter/material.dart';
  2 +
  3 +import 'package:get/get.dart';
  4 +
  5 +import '../controllers/product_details_controller.dart';
  6 +
  7 +class ProductDetailsView extends GetWidget<ProductDetailsController> {
  8 + @override
  9 + Widget build(BuildContext context) {
  10 + return Scaffold(
  11 + body: Center(
  12 + child: Column(
  13 + mainAxisSize: MainAxisSize.min,
  14 + children: [
  15 + Text(
  16 + 'ProductDetailsView is working',
  17 + style: TextStyle(fontSize: 20),
  18 + ),
  19 + Text('ProductId: ${controller.productId}')
  20 + ],
  21 + ),
  22 + ),
  23 + );
  24 + }
  25 +}
  1 +import 'package:get/get.dart';
  2 +
  3 +import '../controllers/products_controller.dart';
  4 +
  5 +class ProductsBinding extends Bindings {
  6 + @override
  7 + void dependencies() {
  8 + Get.lazyPut<ProductsController>(
  9 + () => ProductsController(),
  10 + );
  11 + }
  12 +}
  1 +import 'package:example_nav2/app/models/demo_product.dart';
  2 +import 'package:get/get.dart';
  3 +
  4 +class ProductsController extends GetxController {
  5 + final products = <DemoProduct>[].obs;
  6 +
  7 + void loadDemoProductsFromSomeWhere() {
  8 + products.add(
  9 + DemoProduct(
  10 + name: 'Product added on: ${DateTime.now().toString()}',
  11 + id: DateTime.now().millisecondsSinceEpoch.toString(),
  12 + ),
  13 + );
  14 + }
  15 +
  16 + @override
  17 + void onReady() {
  18 + super.onReady();
  19 + loadDemoProductsFromSomeWhere();
  20 + }
  21 +
  22 + @override
  23 + void onClose() {
  24 + Get.printInfo(info: 'Products: onClose');
  25 + super.onClose();
  26 + }
  27 +}
  1 +import 'package:example_nav2/app/routes/app_pages.dart';
  2 +import 'package:flutter/material.dart';
  3 +
  4 +import 'package:get/get.dart';
  5 +
  6 +import '../controllers/products_controller.dart';
  7 +
  8 +class ProductsView extends GetView<ProductsController> {
  9 + @override
  10 + Widget build(BuildContext context) {
  11 + return Scaffold(
  12 + floatingActionButton: FloatingActionButton.extended(
  13 + onPressed: controller.loadDemoProductsFromSomeWhere,
  14 + label: Text('Add'),
  15 + ),
  16 + body: Obx(
  17 + () => RefreshIndicator(
  18 + onRefresh: () async {
  19 + controller.products.clear();
  20 + controller.loadDemoProductsFromSomeWhere();
  21 + },
  22 + child: ListView.builder(
  23 + itemCount: controller.products.length,
  24 + itemBuilder: (context, index) {
  25 + final item = controller.products[index];
  26 + return ListTile(
  27 + onTap: () {
  28 + Get.getDelegate()?.toNamed(Routes.PRODUCT_DETAILS(item.id));
  29 + },
  30 + title: Text(item.name),
  31 + subtitle: Text(item.id),
  32 + );
  33 + },
  34 + ),
  35 + ),
  36 + ),
  37 + );
  38 + }
  39 +}
  1 +import 'package:get/get.dart';
  2 +
  3 +import '../controllers/profile_controller.dart';
  4 +
  5 +class ProfileBinding extends Bindings {
  6 + @override
  7 + void dependencies() {
  8 + Get.lazyPut<ProfileController>(
  9 + () => ProfileController(),
  10 + );
  11 + }
  12 +}
  1 +import 'package:get/get.dart';
  2 +
  3 +class ProfileController extends GetxController {
  4 + //TODO: Implement ProfileController
  5 +
  6 + final count = 0.obs;
  7 + @override
  8 + void onInit() {
  9 + super.onInit();
  10 + }
  11 +
  12 + @override
  13 + void onReady() {
  14 + super.onReady();
  15 + }
  16 +
  17 + @override
  18 + void onClose() {}
  19 + void increment() => count.value++;
  20 +}
  1 +import 'package:flutter/material.dart';
  2 +
  3 +import 'package:get/get.dart';
  4 +
  5 +import '../controllers/profile_controller.dart';
  6 +
  7 +class ProfileView extends GetView<ProfileController> {
  8 + @override
  9 + Widget build(BuildContext context) {
  10 + return Scaffold(
  11 + body: Center(
  12 + child: Text(
  13 + 'ProfileView is working',
  14 + style: TextStyle(fontSize: 20),
  15 + ),
  16 + ),
  17 + );
  18 + }
  19 +}
  1 +import 'package:get/get.dart';
  2 +
  3 +import '../controllers/settings_controller.dart';
  4 +
  5 +class SettingsBinding extends Bindings {
  6 + @override
  7 + void dependencies() {
  8 + Get.lazyPut<SettingsController>(
  9 + () => SettingsController(),
  10 + );
  11 + }
  12 +}
  1 +import 'package:get/get.dart';
  2 +
  3 +class SettingsController extends GetxController {
  4 + //TODO: Implement SettingsController
  5 +
  6 + final count = 0.obs;
  7 + @override
  8 + void onInit() {
  9 + super.onInit();
  10 + }
  11 +
  12 + @override
  13 + void onReady() {
  14 + super.onReady();
  15 + }
  16 +
  17 + @override
  18 + void onClose() {}
  19 + void increment() => count.value++;
  20 +}
  1 +import 'package:flutter/material.dart';
  2 +
  3 +import 'package:get/get.dart';
  4 +
  5 +import '../controllers/settings_controller.dart';
  6 +
  7 +class SettingsView extends GetView<SettingsController> {
  8 + @override
  9 + Widget build(BuildContext context) {
  10 + return Scaffold(
  11 + appBar: AppBar(
  12 + title: Text('SettingsView'),
  13 + centerTitle: true,
  14 + ),
  15 + body: Center(
  16 + child: Text(
  17 + 'SettingsView is working',
  18 + style: TextStyle(fontSize: 20),
  19 + ),
  20 + ),
  21 + );
  22 + }
  23 +}
  1 +import 'package:get/get.dart';
  2 +import 'package:get/get_navigation/src/nav2/router_outlet.dart';
  3 +import '../modules/home/bindings/home_binding.dart';
  4 +import '../modules/home/views/home_view.dart';
  5 +import '../modules/product_details/bindings/product_details_binding.dart';
  6 +import '../modules/product_details/views/product_details_view.dart';
  7 +import '../modules/products/bindings/products_binding.dart';
  8 +import '../modules/products/views/products_view.dart';
  9 +import '../modules/profile/bindings/profile_binding.dart';
  10 +import '../modules/profile/views/profile_view.dart';
  11 +import '../modules/settings/bindings/settings_binding.dart';
  12 +import '../modules/settings/views/settings_view.dart';
  13 +
  14 +part 'app_routes.dart';
  15 +
  16 +class AppPages {
  17 + AppPages._();
  18 +
  19 + static const INITIAL = Routes.HOME;
  20 +
  21 + static final routes = [
  22 + GetPage(
  23 + name: _Paths.HOME,
  24 + page: () => HomeView(),
  25 + bindings: [
  26 + HomeBinding(),
  27 + ],
  28 + title: null,
  29 + middlewares: [
  30 + RouterOutletContainerMiddleWare(_Paths.HOME),
  31 + ],
  32 + children: [
  33 + GetPage(
  34 + name: _Paths.PROFILE,
  35 + page: () => ProfileView(),
  36 + title: 'Profile',
  37 + binding: ProfileBinding(),
  38 + ),
  39 + GetPage(
  40 + name: _Paths.PRODUCTS,
  41 + page: () => ProductsView(),
  42 + title: 'Products',
  43 + binding: ProductsBinding(),
  44 + children: [
  45 + GetPage(
  46 + name: _Paths.PRODUCT_DETAILS,
  47 + page: () => ProductDetailsView(),
  48 + binding: ProductDetailsBinding(),
  49 + ),
  50 + ],
  51 + ),
  52 + ],
  53 + ),
  54 + GetPage(
  55 + name: _Paths.SETTINGS,
  56 + page: () => SettingsView(),
  57 + binding: SettingsBinding(),
  58 + ),
  59 + ];
  60 +}
  1 +part of 'app_pages.dart';
  2 +// DO NOT EDIT. This is code generated via package:get_cli/get_cli.dart
  3 +
  4 +abstract class Routes {
  5 + Routes._();
  6 +
  7 + static const HOME = _Paths.HOME;
  8 + static const PROFILE = _Paths.HOME + _Paths.PROFILE;
  9 +
  10 + static const SETTINGS = _Paths.SETTINGS;
  11 +
  12 + static const PRODUCTS = _Paths.HOME + _Paths.PRODUCTS;
  13 + static String PRODUCT_DETAILS(String productId) => '$PRODUCTS/$productId';
  14 +}
  15 +
  16 +abstract class _Paths {
  17 + static const HOME = '/home';
  18 + static const PRODUCTS = '/products';
  19 + static const PROFILE = '/profile';
  20 + static const SETTINGS = '/settings';
  21 + static const PRODUCT_DETAILS = '/:productId';
  22 +}
  1 +import 'package:flutter/material.dart';
  2 +
  3 +import 'package:get/get.dart';
  4 +import 'package:get/get_navigation/src/nav2/get_router_delegate.dart';
  5 +
  6 +import 'app/routes/app_pages.dart';
  7 +
  8 +void main() {
  9 + runApp(
  10 + GetMaterialApp.router(
  11 + title: "Application",
  12 + getPages: AppPages.routes,
  13 + routeInformationParser: GetInformationParser(),
  14 + routerDelegate: GetDelegate(),
  15 + ),
  16 + );
  17 +}
  1 +name: example_nav2
  2 +version: 1.0.0+1
  3 +publish_to: none
  4 +description: A new Flutter project.
  5 +environment:
  6 + sdk: ">=2.12.0 <3.0.0"
  7 +
  8 +dependencies:
  9 + cupertino_icons: ^1.0.2
  10 + effective_dart: 1.3.1
  11 + # get: ^4.1.4
  12 + get:
  13 + path: ../
  14 + flutter:
  15 + sdk: flutter
  16 +
  17 +dev_dependencies:
  18 + flutter_test:
  19 + sdk: flutter
  20 +
  21 +flutter:
  22 + uses-material-design: true
  1 +<!DOCTYPE html>
  2 +<html>
  3 +<head>
  4 + <!--
  5 + If you are serving your web app in a path other than the root, change the
  6 + href value below to reflect the base path you are serving from.
  7 +
  8 + The path provided below has to start and end with a slash "/" in order for
  9 + it to work correctly.
  10 +
  11 + For more details:
  12 + * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base
  13 + -->
  14 + <base href="/">
  15 +
  16 + <meta charset="UTF-8">
  17 + <meta content="IE=Edge" http-equiv="X-UA-Compatible">
  18 + <meta name="description" content="A new Flutter project.">
  19 +
  20 + <!-- iOS meta tags & icons -->
  21 + <meta name="apple-mobile-web-app-capable" content="yes">
  22 + <meta name="apple-mobile-web-app-status-bar-style" content="black">
  23 + <meta name="apple-mobile-web-app-title" content="example_nav2">
  24 + <link rel="apple-touch-icon" href="icons/Icon-192.png">
  25 +
  26 + <title>example_nav2</title>
  27 + <link rel="manifest" href="manifest.json">
  28 +</head>
  29 +<body>
  30 + <!-- This script installs service_worker.js to provide PWA functionality to
  31 + application. For more information, see:
  32 + https://developers.google.com/web/fundamentals/primers/service-workers -->
  33 + <script>
  34 + var serviceWorkerVersion = null;
  35 + var scriptLoaded = false;
  36 + function loadMainDartJs() {
  37 + if (scriptLoaded) {
  38 + return;
  39 + }
  40 + scriptLoaded = true;
  41 + var scriptTag = document.createElement('script');
  42 + scriptTag.src = 'main.dart.js';
  43 + scriptTag.type = 'application/javascript';
  44 + document.body.append(scriptTag);
  45 + }
  46 +
  47 + if ('serviceWorker' in navigator) {
  48 + // Service workers are supported. Use them.
  49 + window.addEventListener('load', function () {
  50 + // Wait for registration to finish before dropping the <script> tag.
  51 + // Otherwise, the browser will load the script multiple times,
  52 + // potentially different versions.
  53 + var serviceWorkerUrl = 'flutter_service_worker.js?v=' + serviceWorkerVersion;
  54 + navigator.serviceWorker.register(serviceWorkerUrl)
  55 + .then((reg) => {
  56 + function waitForActivation(serviceWorker) {
  57 + serviceWorker.addEventListener('statechange', () => {
  58 + if (serviceWorker.state == 'activated') {
  59 + console.log('Installed new service worker.');
  60 + loadMainDartJs();
  61 + }
  62 + });
  63 + }
  64 + if (!reg.active && (reg.installing || reg.waiting)) {
  65 + // No active web worker and we have installed or are installing
  66 + // one for the first time. Simply wait for it to activate.
  67 + waitForActivation(reg.installing ?? reg.waiting);
  68 + } else if (!reg.active.scriptURL.endsWith(serviceWorkerVersion)) {
  69 + // When the app updates the serviceWorkerVersion changes, so we
  70 + // need to ask the service worker to update.
  71 + console.log('New service worker available.');
  72 + reg.update();
  73 + waitForActivation(reg.installing);
  74 + } else {
  75 + // Existing service worker is still good.
  76 + console.log('Loading app from service worker.');
  77 + loadMainDartJs();
  78 + }
  79 + });
  80 +
  81 + // If service worker doesn't succeed in a reasonable amount of time,
  82 + // fallback to plaint <script> tag.
  83 + setTimeout(() => {
  84 + if (!scriptLoaded) {
  85 + console.warn(
  86 + 'Failed to load app from service worker. Falling back to plain <script> tag.',
  87 + );
  88 + loadMainDartJs();
  89 + }
  90 + }, 4000);
  91 + });
  92 + } else {
  93 + // Service workers not supported. Just drop the <script> tag.
  94 + loadMainDartJs();
  95 + }
  96 + </script>
  97 +</body>
  98 +</html>
  1 +{
  2 + "name": "example_nav2",
  3 + "short_name": "example_nav2",
  4 + "start_url": ".",
  5 + "display": "standalone",
  6 + "background_color": "#0175C2",
  7 + "theme_color": "#0175C2",
  8 + "description": "A new Flutter project.",
  9 + "orientation": "portrait-primary",
  10 + "prefer_related_applications": false,
  11 + "icons": [
  12 + {
  13 + "src": "icons/Icon-192.png",
  14 + "sizes": "192x192",
  15 + "type": "image/png"
  16 + },
  17 + {
  18 + "src": "icons/Icon-512.png",
  19 + "sizes": "512x512",
  20 + "type": "image/png"
  21 + }
  22 + ]
  23 +}
  1 +flutter/ephemeral/
  2 +
  3 +# Visual Studio user-specific files.
  4 +*.suo
  5 +*.user
  6 +*.userosscache
  7 +*.sln.docstates
  8 +
  9 +# Visual Studio build-related files.
  10 +x64/
  11 +x86/
  12 +
  13 +# Visual Studio cache files
  14 +# files ending in .cache can be ignored
  15 +*.[Cc]ache
  16 +# but keep track of directories ending in .cache
  17 +!*.[Cc]ache/
  1 +cmake_minimum_required(VERSION 3.15)
  2 +project(example_nav2 LANGUAGES CXX)
  3 +
  4 +set(BINARY_NAME "example_nav2")
  5 +
  6 +cmake_policy(SET CMP0063 NEW)
  7 +
  8 +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib")
  9 +
  10 +# Configure build options.
  11 +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
  12 +if(IS_MULTICONFIG)
  13 + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release"
  14 + CACHE STRING "" FORCE)
  15 +else()
  16 + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
  17 + set(CMAKE_BUILD_TYPE "Debug" CACHE
  18 + STRING "Flutter build mode" FORCE)
  19 + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
  20 + "Debug" "Profile" "Release")
  21 + endif()
  22 +endif()
  23 +
  24 +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}")
  25 +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}")
  26 +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}")
  27 +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}")
  28 +
  29 +# Use Unicode for all projects.
  30 +add_definitions(-DUNICODE -D_UNICODE)
  31 +
  32 +# Compilation settings that should be applied to most targets.
  33 +function(APPLY_STANDARD_SETTINGS TARGET)
  34 + target_compile_features(${TARGET} PUBLIC cxx_std_17)
  35 + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100")
  36 + target_compile_options(${TARGET} PRIVATE /EHsc)
  37 + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0")
  38 + target_compile_definitions(${TARGET} PRIVATE "$<$<CONFIG:Debug>:_DEBUG>")
  39 +endfunction()
  40 +
  41 +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter")
  42 +
  43 +# Flutter library and tool build rules.
  44 +add_subdirectory(${FLUTTER_MANAGED_DIR})
  45 +
  46 +# Application build
  47 +add_subdirectory("runner")
  48 +
  49 +# Generated plugin build rules, which manage building the plugins and adding
  50 +# them to the application.
  51 +include(flutter/generated_plugins.cmake)
  52 +
  53 +
  54 +# === Installation ===
  55 +# Support files are copied into place next to the executable, so that it can
  56 +# run in place. This is done instead of making a separate bundle (as on Linux)
  57 +# so that building and running from within Visual Studio will work.
  58 +set(BUILD_BUNDLE_DIR "$<TARGET_FILE_DIR:${BINARY_NAME}>")
  59 +# Make the "install" step default, as it's required to run.
  60 +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1)
  61 +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
  62 + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE)
  63 +endif()
  64 +
  65 +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data")
  66 +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}")
  67 +
  68 +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}"
  69 + COMPONENT Runtime)
  70 +
  71 +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}"
  72 + COMPONENT Runtime)
  73 +
  74 +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
  75 + COMPONENT Runtime)
  76 +
  77 +if(PLUGIN_BUNDLED_LIBRARIES)
  78 + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}"
  79 + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
  80 + COMPONENT Runtime)
  81 +endif()
  82 +
  83 +# Fully re-copy the assets directory on each build to avoid having stale files
  84 +# from a previous install.
  85 +set(FLUTTER_ASSET_DIR_NAME "flutter_assets")
  86 +install(CODE "
  87 + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\")
  88 + " COMPONENT Runtime)
  89 +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}"
  90 + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime)
  91 +
  92 +# Install the AOT library on non-Debug builds only.
  93 +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}"
  94 + CONFIGURATIONS Profile;Release
  95 + COMPONENT Runtime)
  1 +cmake_minimum_required(VERSION 3.15)
  2 +
  3 +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral")
  4 +
  5 +# Configuration provided via flutter tool.
  6 +include(${EPHEMERAL_DIR}/generated_config.cmake)
  7 +
  8 +# TODO: Move the rest of this into files in ephemeral. See
  9 +# https://github.com/flutter/flutter/issues/57146.
  10 +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper")
  11 +
  12 +# === Flutter Library ===
  13 +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll")
  14 +
  15 +# Published to parent scope for install step.
  16 +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE)
  17 +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE)
  18 +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE)
  19 +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE)
  20 +
  21 +list(APPEND FLUTTER_LIBRARY_HEADERS
  22 + "flutter_export.h"
  23 + "flutter_windows.h"
  24 + "flutter_messenger.h"
  25 + "flutter_plugin_registrar.h"
  26 + "flutter_texture_registrar.h"
  27 +)
  28 +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/")
  29 +add_library(flutter INTERFACE)
  30 +target_include_directories(flutter INTERFACE
  31 + "${EPHEMERAL_DIR}"
  32 +)
  33 +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib")
  34 +add_dependencies(flutter flutter_assemble)
  35 +
  36 +# === Wrapper ===
  37 +list(APPEND CPP_WRAPPER_SOURCES_CORE
  38 + "core_implementations.cc"
  39 + "standard_codec.cc"
  40 +)
  41 +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/")
  42 +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN
  43 + "plugin_registrar.cc"
  44 +)
  45 +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/")
  46 +list(APPEND CPP_WRAPPER_SOURCES_APP
  47 + "flutter_engine.cc"
  48 + "flutter_view_controller.cc"
  49 +)
  50 +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/")
  51 +
  52 +# Wrapper sources needed for a plugin.
  53 +add_library(flutter_wrapper_plugin STATIC
  54 + ${CPP_WRAPPER_SOURCES_CORE}
  55 + ${CPP_WRAPPER_SOURCES_PLUGIN}
  56 +)
  57 +apply_standard_settings(flutter_wrapper_plugin)
  58 +set_target_properties(flutter_wrapper_plugin PROPERTIES
  59 + POSITION_INDEPENDENT_CODE ON)
  60 +set_target_properties(flutter_wrapper_plugin PROPERTIES
  61 + CXX_VISIBILITY_PRESET hidden)
  62 +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter)
  63 +target_include_directories(flutter_wrapper_plugin PUBLIC
  64 + "${WRAPPER_ROOT}/include"
  65 +)
  66 +add_dependencies(flutter_wrapper_plugin flutter_assemble)
  67 +
  68 +# Wrapper sources needed for the runner.
  69 +add_library(flutter_wrapper_app STATIC
  70 + ${CPP_WRAPPER_SOURCES_CORE}
  71 + ${CPP_WRAPPER_SOURCES_APP}
  72 +)
  73 +apply_standard_settings(flutter_wrapper_app)
  74 +target_link_libraries(flutter_wrapper_app PUBLIC flutter)
  75 +target_include_directories(flutter_wrapper_app PUBLIC
  76 + "${WRAPPER_ROOT}/include"
  77 +)
  78 +add_dependencies(flutter_wrapper_app flutter_assemble)
  79 +
  80 +# === Flutter tool backend ===
  81 +# _phony_ is a non-existent file to force this command to run every time,
  82 +# since currently there's no way to get a full input/output list from the
  83 +# flutter tool.
  84 +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_")
  85 +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE)
  86 +add_custom_command(
  87 + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS}
  88 + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN}
  89 + ${CPP_WRAPPER_SOURCES_APP}
  90 + ${PHONY_OUTPUT}
  91 + COMMAND ${CMAKE_COMMAND} -E env
  92 + ${FLUTTER_TOOL_ENVIRONMENT}
  93 + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat"
  94 + windows-x64 $<CONFIG>
  95 + VERBATIM
  96 +)
  97 +add_custom_target(flutter_assemble DEPENDS
  98 + "${FLUTTER_LIBRARY}"
  99 + ${FLUTTER_LIBRARY_HEADERS}
  100 + ${CPP_WRAPPER_SOURCES_CORE}
  101 + ${CPP_WRAPPER_SOURCES_PLUGIN}
  102 + ${CPP_WRAPPER_SOURCES_APP}
  103 +)
  1 +//
  2 +// Generated file. Do not edit.
  3 +//
  4 +
  5 +#include "generated_plugin_registrant.h"
  6 +
  7 +
  8 +void RegisterPlugins(flutter::PluginRegistry* registry) {
  9 +}
  1 +//
  2 +// Generated file. Do not edit.
  3 +//
  4 +
  5 +#ifndef GENERATED_PLUGIN_REGISTRANT_
  6 +#define GENERATED_PLUGIN_REGISTRANT_
  7 +
  8 +#include <flutter/plugin_registry.h>
  9 +
  10 +// Registers Flutter plugins.
  11 +void RegisterPlugins(flutter::PluginRegistry* registry);
  12 +
  13 +#endif // GENERATED_PLUGIN_REGISTRANT_
  1 +#
  2 +# Generated file, do not edit.
  3 +#
  4 +
  5 +list(APPEND FLUTTER_PLUGIN_LIST
  6 +)
  7 +
  8 +set(PLUGIN_BUNDLED_LIBRARIES)
  9 +
  10 +foreach(plugin ${FLUTTER_PLUGIN_LIST})
  11 + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin})
  12 + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin)
  13 + list(APPEND PLUGIN_BUNDLED_LIBRARIES $<TARGET_FILE:${plugin}_plugin>)
  14 + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries})
  15 +endforeach(plugin)
  1 +cmake_minimum_required(VERSION 3.15)
  2 +project(runner LANGUAGES CXX)
  3 +
  4 +add_executable(${BINARY_NAME} WIN32
  5 + "flutter_window.cpp"
  6 + "main.cpp"
  7 + "run_loop.cpp"
  8 + "utils.cpp"
  9 + "win32_window.cpp"
  10 + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc"
  11 + "Runner.rc"
  12 + "runner.exe.manifest"
  13 +)
  14 +apply_standard_settings(${BINARY_NAME})
  15 +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX")
  16 +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app)
  17 +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}")
  18 +add_dependencies(${BINARY_NAME} flutter_assemble)
  1 +// Microsoft Visual C++ generated resource script.
  2 +//
  3 +#pragma code_page(65001)
  4 +#include "resource.h"
  5 +
  6 +#define APSTUDIO_READONLY_SYMBOLS
  7 +/////////////////////////////////////////////////////////////////////////////
  8 +//
  9 +// Generated from the TEXTINCLUDE 2 resource.
  10 +//
  11 +#include "winres.h"
  12 +
  13 +/////////////////////////////////////////////////////////////////////////////
  14 +#undef APSTUDIO_READONLY_SYMBOLS
  15 +
  16 +/////////////////////////////////////////////////////////////////////////////
  17 +// English (United States) resources
  18 +
  19 +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
  20 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
  21 +
  22 +#ifdef APSTUDIO_INVOKED
  23 +/////////////////////////////////////////////////////////////////////////////
  24 +//
  25 +// TEXTINCLUDE
  26 +//
  27 +
  28 +1 TEXTINCLUDE
  29 +BEGIN
  30 + "resource.h\0"
  31 +END
  32 +
  33 +2 TEXTINCLUDE
  34 +BEGIN
  35 + "#include ""winres.h""\r\n"
  36 + "\0"
  37 +END
  38 +
  39 +3 TEXTINCLUDE
  40 +BEGIN
  41 + "\r\n"
  42 + "\0"
  43 +END
  44 +
  45 +#endif // APSTUDIO_INVOKED
  46 +
  47 +
  48 +/////////////////////////////////////////////////////////////////////////////
  49 +//
  50 +// Icon
  51 +//
  52 +
  53 +// Icon with lowest ID value placed first to ensure application icon
  54 +// remains consistent on all systems.
  55 +IDI_APP_ICON ICON "resources\\app_icon.ico"
  56 +
  57 +
  58 +/////////////////////////////////////////////////////////////////////////////
  59 +//
  60 +// Version
  61 +//
  62 +
  63 +#ifdef FLUTTER_BUILD_NUMBER
  64 +#define VERSION_AS_NUMBER FLUTTER_BUILD_NUMBER
  65 +#else
  66 +#define VERSION_AS_NUMBER 1,0,0
  67 +#endif
  68 +
  69 +#ifdef FLUTTER_BUILD_NAME
  70 +#define VERSION_AS_STRING #FLUTTER_BUILD_NAME
  71 +#else
  72 +#define VERSION_AS_STRING "1.0.0"
  73 +#endif
  74 +
  75 +VS_VERSION_INFO VERSIONINFO
  76 + FILEVERSION VERSION_AS_NUMBER
  77 + PRODUCTVERSION VERSION_AS_NUMBER
  78 + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
  79 +#ifdef _DEBUG
  80 + FILEFLAGS VS_FF_DEBUG
  81 +#else
  82 + FILEFLAGS 0x0L
  83 +#endif
  84 + FILEOS VOS__WINDOWS32
  85 + FILETYPE VFT_APP
  86 + FILESUBTYPE 0x0L
  87 +BEGIN
  88 + BLOCK "StringFileInfo"
  89 + BEGIN
  90 + BLOCK "040904e4"
  91 + BEGIN
  92 + VALUE "CompanyName", "com.get" "\0"
  93 + VALUE "FileDescription", "A new Flutter project." "\0"
  94 + VALUE "FileVersion", VERSION_AS_STRING "\0"
  95 + VALUE "InternalName", "example_nav2" "\0"
  96 + VALUE "LegalCopyright", "Copyright (C) 2021 com.get. All rights reserved." "\0"
  97 + VALUE "OriginalFilename", "example_nav2.exe" "\0"
  98 + VALUE "ProductName", "example_nav2" "\0"
  99 + VALUE "ProductVersion", VERSION_AS_STRING "\0"
  100 + END
  101 + END
  102 + BLOCK "VarFileInfo"
  103 + BEGIN
  104 + VALUE "Translation", 0x409, 1252
  105 + END
  106 +END
  107 +
  108 +#endif // English (United States) resources
  109 +/////////////////////////////////////////////////////////////////////////////
  110 +
  111 +
  112 +
  113 +#ifndef APSTUDIO_INVOKED
  114 +/////////////////////////////////////////////////////////////////////////////
  115 +//
  116 +// Generated from the TEXTINCLUDE 3 resource.
  117 +//
  118 +
  119 +
  120 +/////////////////////////////////////////////////////////////////////////////
  121 +#endif // not APSTUDIO_INVOKED
  1 +#include "flutter_window.h"
  2 +
  3 +#include <optional>
  4 +
  5 +#include "flutter/generated_plugin_registrant.h"
  6 +
  7 +FlutterWindow::FlutterWindow(RunLoop* run_loop,
  8 + const flutter::DartProject& project)
  9 + : run_loop_(run_loop), project_(project) {}
  10 +
  11 +FlutterWindow::~FlutterWindow() {}
  12 +
  13 +bool FlutterWindow::OnCreate() {
  14 + if (!Win32Window::OnCreate()) {
  15 + return false;
  16 + }
  17 +
  18 + RECT frame = GetClientArea();
  19 +
  20 + // The size here must match the window dimensions to avoid unnecessary surface
  21 + // creation / destruction in the startup path.
  22 + flutter_controller_ = std::make_unique<flutter::FlutterViewController>(
  23 + frame.right - frame.left, frame.bottom - frame.top, project_);
  24 + // Ensure that basic setup of the controller was successful.
  25 + if (!flutter_controller_->engine() || !flutter_controller_->view()) {
  26 + return false;
  27 + }
  28 + RegisterPlugins(flutter_controller_->engine());
  29 + run_loop_->RegisterFlutterInstance(flutter_controller_->engine());
  30 + SetChildContent(flutter_controller_->view()->GetNativeWindow());
  31 + return true;
  32 +}
  33 +
  34 +void FlutterWindow::OnDestroy() {
  35 + if (flutter_controller_) {
  36 + run_loop_->UnregisterFlutterInstance(flutter_controller_->engine());
  37 + flutter_controller_ = nullptr;
  38 + }
  39 +
  40 + Win32Window::OnDestroy();
  41 +}
  42 +
  43 +LRESULT
  44 +FlutterWindow::MessageHandler(HWND hwnd, UINT const message,
  45 + WPARAM const wparam,
  46 + LPARAM const lparam) noexcept {
  47 + // Give Flutter, including plugins, an opportunity to handle window messages.
  48 + if (flutter_controller_) {
  49 + std::optional<LRESULT> result =
  50 + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam,
  51 + lparam);
  52 + if (result) {
  53 + return *result;
  54 + }
  55 + }
  56 +
  57 + switch (message) {
  58 + case WM_FONTCHANGE:
  59 + flutter_controller_->engine()->ReloadSystemFonts();
  60 + break;
  61 + }
  62 +
  63 + return Win32Window::MessageHandler(hwnd, message, wparam, lparam);
  64 +}
  1 +#ifndef RUNNER_FLUTTER_WINDOW_H_
  2 +#define RUNNER_FLUTTER_WINDOW_H_
  3 +
  4 +#include <flutter/dart_project.h>
  5 +#include <flutter/flutter_view_controller.h>
  6 +
  7 +#include <memory>
  8 +
  9 +#include "run_loop.h"
  10 +#include "win32_window.h"
  11 +
  12 +// A window that does nothing but host a Flutter view.
  13 +class FlutterWindow : public Win32Window {
  14 + public:
  15 + // Creates a new FlutterWindow driven by the |run_loop|, hosting a
  16 + // Flutter view running |project|.
  17 + explicit FlutterWindow(RunLoop* run_loop,
  18 + const flutter::DartProject& project);
  19 + virtual ~FlutterWindow();
  20 +
  21 + protected:
  22 + // Win32Window:
  23 + bool OnCreate() override;
  24 + void OnDestroy() override;
  25 + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam,
  26 + LPARAM const lparam) noexcept override;
  27 +
  28 + private:
  29 + // The run loop driving events for this window.
  30 + RunLoop* run_loop_;
  31 +
  32 + // The project to run.
  33 + flutter::DartProject project_;
  34 +
  35 + // The Flutter instance hosted by this window.
  36 + std::unique_ptr<flutter::FlutterViewController> flutter_controller_;
  37 +};
  38 +
  39 +#endif // RUNNER_FLUTTER_WINDOW_H_
  1 +#include <flutter/dart_project.h>
  2 +#include <flutter/flutter_view_controller.h>
  3 +#include <windows.h>
  4 +
  5 +#include "flutter_window.h"
  6 +#include "run_loop.h"
  7 +#include "utils.h"
  8 +
  9 +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
  10 + _In_ wchar_t *command_line, _In_ int show_command) {
  11 + // Attach to console when present (e.g., 'flutter run') or create a
  12 + // new console when running with a debugger.
  13 + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) {
  14 + CreateAndAttachConsole();
  15 + }
  16 +
  17 + // Initialize COM, so that it is available for use in the library and/or
  18 + // plugins.
  19 + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED);
  20 +
  21 + RunLoop run_loop;
  22 +
  23 + flutter::DartProject project(L"data");
  24 +
  25 + std::vector<std::string> command_line_arguments =
  26 + GetCommandLineArguments();
  27 +
  28 + project.set_dart_entrypoint_arguments(std::move(command_line_arguments));
  29 +
  30 + FlutterWindow window(&run_loop, project);
  31 + Win32Window::Point origin(10, 10);
  32 + Win32Window::Size size(1280, 720);
  33 + if (!window.CreateAndShow(L"example_nav2", origin, size)) {
  34 + return EXIT_FAILURE;
  35 + }
  36 + window.SetQuitOnClose(true);
  37 +
  38 + run_loop.Run();
  39 +
  40 + ::CoUninitialize();
  41 + return EXIT_SUCCESS;
  42 +}
  1 +//{{NO_DEPENDENCIES}}
  2 +// Microsoft Visual C++ generated include file.
  3 +// Used by Runner.rc
  4 +//
  5 +#define IDI_APP_ICON 101
  6 +
  7 +// Next default values for new objects
  8 +//
  9 +#ifdef APSTUDIO_INVOKED
  10 +#ifndef APSTUDIO_READONLY_SYMBOLS
  11 +#define _APS_NEXT_RESOURCE_VALUE 102
  12 +#define _APS_NEXT_COMMAND_VALUE 40001
  13 +#define _APS_NEXT_CONTROL_VALUE 1001
  14 +#define _APS_NEXT_SYMED_VALUE 101
  15 +#endif
  16 +#endif