From 32d91dc3fabdea8c84bab1bac0bddd9e46ad0819 Mon Sep 17 00:00:00 2001 From: Luke Date: Sat, 13 May 2017 21:28:28 -0700 Subject: [PATCH] rename. add example project --- .gitignore | 8 +- README.md | 53 ++- example/.gitignore | 49 ++ example/android.iml | 12 + example/android/.gitignore | 13 + example/android/app/build.gradle | 103 +++++ .../android/app/src/main/AndroidManifest.xml | 32 ++ .../java/com/goposse/routersample/App.java | 6 + .../routersample/activities/MainActivity.java | 50 +++ .../routersample/constants/Channels.java | 6 + .../plugins/GeneratedPluginRegistrant.java | 11 + .../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/strings.xml | 4 + example/android/app/versions.properties | 1 + example/android/build.gradle | 29 ++ example/android/gradle.properties | 1 + example/android/settings.gradle | 15 + example/assets/images/2.0x/acc_boom.png | Bin 0 -> 9408 bytes example/assets/images/2.0x/logo_fluro.png | Bin 0 -> 23831 bytes example/assets/images/acc_boom.png | Bin 0 -> 4037 bytes example/assets/images/logo_fluro.png | Bin 0 -> 11041 bytes example/ios/.gitignore | 41 ++ example/ios/Flutter/AppFrameworkInfo.plist | 30 ++ example/ios/Flutter/Debug.xcconfig | 1 + example/ios/Flutter/Release.xcconfig | 1 + example/ios/Podfile | 38 ++ example/ios/Runner.xcodeproj/project.pbxproj | 424 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/xcschemes/Runner.xcscheme | 91 ++++ .../contents.xcworkspacedata | 7 + example/ios/Runner/AppDelegate.h | 6 + example/ios/Runner/AppDelegate.m | 38 ++ .../AppIcon.appiconset/Contents.json | 116 +++++ .../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 .../Runner/Base.lproj/LaunchScreen.storyboard | 27 ++ example/ios/Runner/Base.lproj/Main.storyboard | 26 ++ .../ios/Runner/GeneratedPluginRegistrant.h | 15 + .../ios/Runner/GeneratedPluginRegistrant.m | 12 + example/ios/Runner/Info.plist | 49 ++ example/ios/Runner/main.m | 10 + example/lib/app.dart | 49 ++ example/lib/config/application.dart | 5 + example/lib/config/route_handlers.dart | 21 + example/lib/helpers/color_helpers.dart | 51 +++ example/lib/main.dart | 13 + example/lib/screens/home_screen.dart | 98 ++++ example/lib/screens/test_screen_01.dart | 62 +++ example/pubspec.yaml | 13 + example/router_example.iml | 15 + lib/router.dart | 4 +- lib/src/common.dart | 2 +- lib/src/router.dart | 2 +- lib/src/tree.dart | 2 +- 70 files changed, 1644 insertions(+), 25 deletions(-) create mode 100644 example/.gitignore create mode 100644 example/android.iml create mode 100644 example/android/.gitignore create mode 100644 example/android/app/build.gradle create mode 100644 example/android/app/src/main/AndroidManifest.xml create mode 100644 example/android/app/src/main/java/com/goposse/routersample/App.java create mode 100644 example/android/app/src/main/java/com/goposse/routersample/activities/MainActivity.java create mode 100644 example/android/app/src/main/java/com/goposse/routersample/constants/Channels.java create mode 100644 example/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java create mode 100644 example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 example/android/app/src/main/res/values/strings.xml create mode 100644 example/android/app/versions.properties create mode 100644 example/android/build.gradle create mode 100644 example/android/gradle.properties create mode 100644 example/android/settings.gradle create mode 100644 example/assets/images/2.0x/acc_boom.png create mode 100644 example/assets/images/2.0x/logo_fluro.png create mode 100644 example/assets/images/acc_boom.png create mode 100644 example/assets/images/logo_fluro.png create mode 100644 example/ios/.gitignore create mode 100644 example/ios/Flutter/AppFrameworkInfo.plist create mode 100644 example/ios/Flutter/Debug.xcconfig create mode 100644 example/ios/Flutter/Release.xcconfig create mode 100644 example/ios/Podfile create mode 100644 example/ios/Runner.xcodeproj/project.pbxproj create mode 100644 example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 example/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 example/ios/Runner/AppDelegate.h create mode 100644 example/ios/Runner/AppDelegate.m create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 example/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 example/ios/Runner/Base.lproj/Main.storyboard create mode 100644 example/ios/Runner/GeneratedPluginRegistrant.h create mode 100644 example/ios/Runner/GeneratedPluginRegistrant.m create mode 100644 example/ios/Runner/Info.plist create mode 100644 example/ios/Runner/main.m create mode 100644 example/lib/app.dart create mode 100644 example/lib/config/application.dart create mode 100644 example/lib/config/route_handlers.dart create mode 100644 example/lib/helpers/color_helpers.dart create mode 100644 example/lib/main.dart create mode 100644 example/lib/screens/home_screen.dart create mode 100644 example/lib/screens/test_screen_01.dart create mode 100644 example/pubspec.yaml create mode 100644 example/router_example.iml diff --git a/.gitignore b/.gitignore index 1f379ff..5e1a3ad 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,11 @@ +# mac system +.DS_Store + +# intellij .idea + +# dart / flutter .packages pubspec.lock coverage -__temp_coverage* \ No newline at end of file +__temp_coverage* diff --git a/README.md b/README.md index 6bbd8e5..2226695 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,40 @@ -# Router + +

+ +The brightest, hippest, coolest router for Flutter. [![Build Status](https://travis-ci.org/goposse/flutter-router.svg?branch=master)](https://travis-ci.org/goposse/flutter-router) -[![codecov](https://codecov.io/gh/goposse/flutter-router/branch/master/graph/badge.svg)](https://codecov.io/gh/goposse/flutter-router) +[![Coverage](https://codecov.io/gh/goposse/flutter-router/branch/master/graph/badge.svg)](https://codecov.io/gh/goposse/flutter-router) + +## Features + +- Simple route navigation +- Wildcard parameter matching +- Querystring parameter parsing +- Common transitions built-in +- Simple custom transition creation ## Getting started - - You should ensure that you add the router as a dependency in your flutter project. - Currently, you will need to add the git repo directly. A submitted pub package will - be available soon. - - To add the dependency directly: - + +You should ensure that you add the router as a dependency in your flutter project. +Currently, you will need to add the git repo directly. A submitted pub package will be available **soon**. + +To add the dependency directly: + ```yaml dependencies: - router: + fluro: git: git://github.com/goposse/flutter-router.git ``` -You should then run `pub update` or update your packages in IntelliJ. +You should then run `flutter packages upgrade` or update your packages in IntelliJ. + +## Example Project + +There is a pretty sweet example project in the `example` folder. Check it out. Otherwise, keep reading to get up and running. ## Setting up -First, you should define a new `Router` object by initializing it as such: +First, you should define a new `Router` object by initializing it as such: ```dart final Router router = new Router(); ``` @@ -38,21 +52,22 @@ void defineRoutes(Router router) { } ``` -In the above example, the router will intercept a route such as +In the above example, the router will intercept a route such as `/users/1234` and route the application to the `UsersScreen` passing the value `1234` as a parameter to that screen. ## Navigating You can use the `Router` with the `MaterialApp.onGenerateRoute` parameter - via the `Router.generator` function. To do so, pass the function reference to - the `onGenerate` parameter like: `onGenerateRoute: router.generator`. - +via the `Router.generator` function. To do so, pass the function reference to +the `onGenerate` parameter like: `onGenerateRoute: router.generator`. + You can then use `Navigator.push` and the flutter routing mechanism will match the routes -for you. +for you. You can also manually push to a route yourself. To do so: ```dart -router.navigateTo(context, "/users/1234"); -``` \ No newline at end of file +router.navigateTo(context, "/users/1234", + transition: TransitionType.fadeIn); +``` diff --git a/example/.gitignore b/example/.gitignore new file mode 100644 index 0000000..da2f246 --- /dev/null +++ b/example/.gitignore @@ -0,0 +1,49 @@ +.DS_Store + +.atom/ +.idea +.packages +.pub/ +build/ +ios/.generated/ +packages +pubspec.lock +.flutter-plugins + +# temporary +Podfile.lock + +## Build generated +build/ +DerivedData/ + +## Various settings +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata/ + +## Other +*.moved-aside +*.xcuserstate + +## Obj-C/Swift specific +*.hmap +*.ipa +*.dSYM.zip +*.dSYM + +## Playgrounds +timeline.xctimeline +playground.xcworkspace + +# Swift Package Manager +# +# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. +# Packages/ +.build/ diff --git a/example/android.iml b/example/android.iml new file mode 100644 index 0000000..462b903 --- /dev/null +++ b/example/android.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/example/android/.gitignore b/example/android/.gitignore new file mode 100644 index 0000000..e6a9f06 --- /dev/null +++ b/example/android/.gitignore @@ -0,0 +1,13 @@ +*.iml +.gradle +/local.properties +/.idea/workspace.xml +/.idea/libraries +.DS_Store +/build +/captures +PluginRegistry.java + +/gradle +/gradlew +/gradlew.bat diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle new file mode 100644 index 0000000..726561a --- /dev/null +++ b/example/android/app/build.gradle @@ -0,0 +1,103 @@ +// flutter +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withInputStream { stream -> + localProperties.load(stream) + } +} + +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.") +} + +apply plugin: 'com.android.application' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +flutter { + source '../..' +} + +// build versioning +def currentVersionCode() { + def propsFile = file('versions.properties') + def props = new Properties() + props.load(new FileInputStream(propsFile)) + return props['build.versionCode'].toInteger() +} + +def incrementVersionCode() { + def propsFile = file('versions.properties') + def props = new Properties() + props.load(new FileInputStream(propsFile)) + def currentCode = props['build.versionCode'].toInteger() + def nextCode = currentCode + 1 + props['build.versionCode'] = nextCode.toString() + props.store(propsFile.newWriter(), null) + return nextCode +} + +// increments build version code on release builds +task('incrementVersionCode') << { + incrementVersionCode() +} + +tasks.whenTaskAdded { task -> + if (task.name == 'assembleRelease') { + task.dependsOn 'incrementVersionCode' + } +} + +buildscript { + // application variables + ext.app_ver_name = "1.0" + + // google version codes + ext.build_tools_ver = '25.0.3' + ext.support_lib_ver = '25.3.1' + ext.google_play_ver = '10.2.4' + ext.constraint_layout_ver = '1.0.2' +} + +android { + compileSdkVersion 25 + buildToolsVersion "$build_tools_ver" + + defaultConfig { + minSdkVersion 19 + targetSdkVersion 25 + applicationId "com.goposse.routersample" + versionCode currentVersionCode() + versionName "$app_ver_name" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } + lintOptions { + disable 'InvalidPackage' + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + 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 + } + } +} + +dependencies { + compile fileTree(dir: 'libs', include: ['*.jar']) + + // google + compile "com.android.support:appcompat-v7:$support_lib_ver" + compile "com.android.support:support-v13:$support_lib_ver" + compile "com.android.support:support-v4:$support_lib_ver" + + // testing + androidTestCompile "com.android.support:support-annotations:$support_lib_ver" + androidTestCompile 'com.android.support.test:runner:0.5' + androidTestCompile 'com.android.support.test:rules:0.5' +} diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..a16b270 --- /dev/null +++ b/example/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/example/android/app/src/main/java/com/goposse/routersample/App.java b/example/android/app/src/main/java/com/goposse/routersample/App.java new file mode 100644 index 0000000..4b8c122 --- /dev/null +++ b/example/android/app/src/main/java/com/goposse/routersample/App.java @@ -0,0 +1,6 @@ +package com.goposse.routersample; + +import io.flutter.app.FlutterApplication; + +public class App extends FlutterApplication { +} diff --git a/example/android/app/src/main/java/com/goposse/routersample/activities/MainActivity.java b/example/android/app/src/main/java/com/goposse/routersample/activities/MainActivity.java new file mode 100644 index 0000000..b05f1b5 --- /dev/null +++ b/example/android/app/src/main/java/com/goposse/routersample/activities/MainActivity.java @@ -0,0 +1,50 @@ +package com.goposse.routersample.activities; + +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.util.Log; + +import com.goposse.routersample.constants.Channels; + +import io.flutter.app.FlutterActivity; +import io.flutter.plugin.common.MethodChannel; +import io.flutter.plugins.PluginRegistry; + +public class MainActivity extends FlutterActivity { + + private static final String LOG_TAG = "A:Main"; + + PluginRegistry pluginRegistry; + private static MethodChannel deepLinkChannel; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + pluginRegistry = new PluginRegistry(); + pluginRegistry.registerAll(this); + + if (deepLinkChannel == null) { + deepLinkChannel = new MethodChannel(getFlutterView(), Channels.DEEP_LINK_RECEIVED); + } + + Intent intent = getIntent(); + checkForLinkEvent(intent); + } + + private void checkForLinkEvent(Intent intent) { + String action = intent.getAction(); + Log.d(LOG_TAG, "Hey!!! " + action); + if (action.equals(Intent.ACTION_VIEW)) { + Uri data = intent.getData(); + if (data != null) { + String path = data.getQueryParameter("path"); + if (path != null) { + Log.d(LOG_TAG, String.format("Received external link: %s", data.toString())); + deepLinkChannel.invokeMethod("linkReceived", path); + } + } + } + } + +} diff --git a/example/android/app/src/main/java/com/goposse/routersample/constants/Channels.java b/example/android/app/src/main/java/com/goposse/routersample/constants/Channels.java new file mode 100644 index 0000000..b88ad03 --- /dev/null +++ b/example/android/app/src/main/java/com/goposse/routersample/constants/Channels.java @@ -0,0 +1,6 @@ +package com.goposse.routersample.constants; + +public class Channels { + private static final String CHANNEL_PREFIX = "channel:com.goposse.routerdemo"; + public static final String DEEP_LINK_RECEIVED = CHANNEL_PREFIX + "/deeplink"; +} diff --git a/example/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java b/example/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java new file mode 100644 index 0000000..e07931d --- /dev/null +++ b/example/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java @@ -0,0 +1,11 @@ +package io.flutter.plugins; + +import io.flutter.plugin.common.PluginRegistry; + +/** + * Generated file. Do not edit. + */ +public final class GeneratedPluginRegistrant { + public static void registerWith(PluginRegistry registry) { + } +} diff --git a/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ literal 0 HcmV?d00001 diff --git a/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@Uy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ literal 0 HcmV?d00001 diff --git a/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f1c8d34e7a88e3f88bea192c3a370d44689c3c GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 0 HcmV?d00001 diff --git a/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6372eebdb28e45604e46eeda8dd24651419bc0 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 0 HcmV?d00001 diff --git a/example/android/app/src/main/res/values/strings.xml b/example/android/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..c39705a --- /dev/null +++ b/example/android/app/src/main/res/values/strings.xml @@ -0,0 +1,4 @@ + + + Router Sample + \ No newline at end of file diff --git a/example/android/app/versions.properties b/example/android/app/versions.properties new file mode 100644 index 0000000..e6d445b --- /dev/null +++ b/example/android/app/versions.properties @@ -0,0 +1 @@ +build.versionCode=1 \ No newline at end of file diff --git a/example/android/build.gradle b/example/android/build.gradle new file mode 100644 index 0000000..ec6951d --- /dev/null +++ b/example/android/build.gradle @@ -0,0 +1,29 @@ +buildscript { + repositories { + jcenter() + } + + dependencies { + classpath 'com.android.tools.build:gradle:2.4.0-alpha7' + } +} + +allprojects { + repositories { + jcenter() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" + project.evaluationDependsOn(':app') +} + +task clean(type: Delete) { + delete rootProject.buildDir +} + +task wrapper(type: Wrapper) { + gradleVersion = '2.14.1' +} diff --git a/example/android/gradle.properties b/example/android/gradle.properties new file mode 100644 index 0000000..8bd86f6 --- /dev/null +++ b/example/android/gradle.properties @@ -0,0 +1 @@ +org.gradle.jvmargs=-Xmx1536M diff --git a/example/android/settings.gradle b/example/android/settings.gradle new file mode 100644 index 0000000..115da6c --- /dev/null +++ b/example/android/settings.gradle @@ -0,0 +1,15 @@ +include ':app' + +def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() + +def plugins = new Properties() +def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') +if (pluginsFile.exists()) { + pluginsFile.withInputStream { stream -> plugins.load(stream) } +} + +plugins.each { name, path -> + def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() + include ":$name" + project(":$name").projectDir = pluginDirectory +} diff --git a/example/assets/images/2.0x/acc_boom.png b/example/assets/images/2.0x/acc_boom.png new file mode 100644 index 0000000000000000000000000000000000000000..f5a05560ba84ced8730d35ebf32c8e39a95a5e6f GIT binary patch literal 9408 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 Hbd3EU?S#8^ literal 0 HcmV?d00001 diff --git a/example/assets/images/2.0x/logo_fluro.png b/example/assets/images/2.0x/logo_fluro.png new file mode 100644 index 0000000000000000000000000000000000000000..873bdcd446eada760a13f367402ee30dd697a319 GIT binary patch literal 23831 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 literal 0 HcmV?d00001 diff --git a/example/assets/images/logo_fluro.png b/example/assets/images/logo_fluro.png new file mode 100644 index 0000000000000000000000000000000000000000..3f02e4bb64a67d9a423ab58dbe6a6cfd0e294233 GIT binary patch literal 11041 zcmV++E8f(JP)Q7n00001b5ch_0Itp) z=>PyK+et)0RCodHT?w2N#npe+bML*du)uOI%OxJDC?cRyQKB(oR5V`EsEL|r60ex= z%l9Sw#UOWLykg?5QM@5uxGX55h#V>cq5^W?u&}@$>^1%UU(fW=Gt)=)>?{zS_xsIs zch##`N7t+O>eZ`iq6}nOAkzYw7Ra_1XIem2$+wE=dtj_H@jD6?9{^@4#k~jD z7F=J$^|pS3Hp?_hhS6kNDTDK!Xn~z7JqYR@t zwNNJBRSQ79%2S9sp_3MciQ1uqac2#*;Kx_Q`EcEfUlro2fVaI5(Mll*D2E5WQt4Qf zi&6OqLWePMk_iQMzd;} zOt{tp=#XMH(GW1uh4_ueum2%vnk~rVxh$glx(nj_v_W+4bsZS&zd^Kn+6WU(h6;I? z6}=3jS+&f!EPRVfS+ztxVJ%xBTeWXg%5Nfi2KX1qrb#ni4d~s|4-97~EoAZpgDKGM zu0V$`$6(Q0CXE{$&{gsKUSC0T&C)?-&Vb$mcp3gRDi!lf(ZjwiSM=D+Fp9syb10`e zeXUXvet&2tf_8P-n2d{=gWrUeL<={l)P)050o3I}&|rhbvu(j-Tqe-PSU}Kv%>i*4 zKLe?d_tKZXxhnucK>d}N|k<&&h-zQR(Ks&rCWOo+F*kt6$MG@!N~eoAm73a zZA^p*1ko%o+%3opXz2rVxRXJAfld(yhpV7MKBqrJiuY(F`XkEl6W}5G$OM#cb2ia& zT?MgO-4^g(Z^C<>0whfJ+73MR9?DR)@=s>A~eg&>@HJCR&DYHg7{K`_BN>Wi;w_wOMJo&A?#GfOEcC zd~3o)OVZd#`;Xrq(L;2?in>$3O}r+jPQ*AupP`0{^;oyTXbcN56{CTR(ZIZ(!`EV5 z!%)Ni2Wl8k=uH8Pa~IN0G>tR~1kHMITsIlj#h84pN2&@mNLIhCPn{mg|8?QY*5ZInYxl21z z?&rnSoYP1fZ~82WaN)cX>Nu@`H3?-rO`17T2v$sz0cAdN0nFt8hNv$}-XEiUDa3D2 z-1kC>d-4zWL8sEAg74y`j5NL!Jq7ZdL?sdF`>(y8<`By@i?IZH}5%PJ>7Re+M z_5C%>#oT#Z1GgQ_+0eAo*YVsG!c*s^;HEtCRfWjAH$Xo8Jo^IV-R~!*(L*dDLoiHxnK-!8MMouKS5im3Y3%}KOcLQRuUmLt_y>}DZAT3b%VOQ$-Z|DxZY%2*Zxec`O#?Pps*!_5dTuwuWs=&K#wdp>z zArA(PJ``G4kX&*>+c02EgOa)>du6+O%oq)cyeP{P8&w+EO;CL@5&IF(4Bs{kbDjZU zvPx9GL`TG;Cwp7gLZaY8o$(wSMS*w701Yt_%#{r_?m?_0?Lx-qyUjfJvreMul>x)S zXz0swP>ls&)RTvISHLP(_bDe2!SdQ{Hwn?sS0TSUoYDl>`F9&K0 zg_SPGFv)k{V%)5%NEv2o7dCR# z{r!YWJX{$GPyR=J?tsSj92TvYC&s3Y(J%xsC-dCuhz2x90p1Wx30EU2s}})G?#ZLh zkgXuhjD^r6M#)9jM1&hS2sgUs7!! z4ss7Xw*hml#VXv*V5|x&3Yb>(LxmtI=p>mkTG453c=p%rsPl6Jje`T1|5fsOekaCP zthS;b`lj8~;Ktl54|Kz1#~geZt{z6zX^GKk(a`aNJAv?RiNuf4XCAd!eQ^bBiNed+ zLRlkTlud}q;Kjg|S*MF5>DwKIK>-$d)jumP!r=i-b`3hP)JU%!@NPhTxYLtwcZjOsa5o1xlr6}J?@e~f-6PL9ERK>234l*#A zSVM|3Tuh#Ii5-(^rSxYl4z16(Eimdg0(DKQV_GB{dhUtH-ON;DTc|@3sWigku`!Rh zfkJBv)vR^-@2~p5xdo6+(%F0Jy_EYIB#cUbhrZq{osj6qE^uS0`HMOuFJ+~eGGj$7 zQ10d`IW+9R+y)y>&hYD~=EExJbHCwqK}hYeSH4|1O=vBea({3iydz_`n0z{dIftR%0FBqwNDT!7vX( zURRpOB!_zU`N>lg+^xrmiL;-pe{#^gy+by`P9g7(#ZrPjCs57Upa2thyIRcG(ZK9D z?dVXTm%;8Tpp~e8^s*E{IpCqLPaMbEOe8h$kWjpriis5qQy@nzc?}DY&X&OOs42owVP!Z1V02xywfgSdrAZyU$#IJQDVl zO&nU6M}A02@^~JRO~ZKT7AdKX1#H?asA9mXPTZrG^csSDI$*qQ+b3)R7*i{ITyQh?5u76?HrsqboOe6Y>KTkF&2W1105 z!xSG=j^_uWydpNp*b*>_tna>ehe>c!5bA$20@KTAs-oI*cv2}$0@y>0jR4%K17IXp z0sVa4;Vh++$!TjhOVI&7p|JWfy3c&Nw{q2L5~Z*Ttxm?b4k=gwX+~ltM!@&1vEpNR z+X+Urp>8{yAKnz%U$uvT5Rb=Gw10xF@D^Yop&VqbYRATluZ-Aemz#~xGWYr1HlFZX zE62~e0(C7%nl3WwWN>&I&|yYz+Bax>N-85u?QV~pKz{B&3_{F8!(Ip`gTPH4>U&p9 zaXls{JfO!QEfOspYK|isqwa9SDj!e$gX;^lQC7eQ&NT=^#l=#j}Cd%EA^C#vUdgQupfqy7acQ+B1An; z?vTZ2yzDQ*lfoZkG;Bm2jK&)5hK8>?Kq~wpR+qoe1IidTX`OJnUvzr$C{kf8-|<6N zgkgW92cONEkhzM_y@wCkTlqZzJV| zo{~-kMC5b1n|zqI(%_*yHiD@1jF>W0densu^h+d<&GMO+9Wa9gw&qrgDR0BIC<4ty zH|h7XSDq?txmsJ7#psY8U{xnhk#x5JQxF`%f{m~|a;sPZe@)vgk zv%$9R_dF_q##Fas*;Nvcozpx}y4WZnRtt-Eg9f)P>-V$scB7?^`U@qwBX<{@Ga?NOLcGnCH zTpA(1#3=p&niEXrSxz2hxfnNNCr70d@W!riLr=40YMvnCQ8(#;o01VkoA1DNNsOBr zQ|X-Yg>~nDfm7s!XN=ETp`pK}hk?ni#QkAg1Lf^B9o{aZd@zWn3q%XH@1(7>!`|>& zdO2mTzC8izIK8iq`k0tp`D>aiHxTQI?5`Im*ZaLs6etuXpvnF8y3 z56HFyyE8QsX$#G=X;^J!OCd6fF&Z9jkWHU%ywLhQDtYoaEHxO7onj-};paO?ulyeJ zbH!*K-s}_6l7v`*IT;&>(h5+qUAfbRRu`2KZF-jr;YutgmKuw4JyTJWA}%{{+?+JK z&6$kL{0&Z`MLDDTL}D$HpLu~Z5A!p&{<%>*pf;WaYW)3?IhKS(>3t5Gi zpQJ1P#8#0GR@lB9cd=<^X6$7o8uHyrlK`Q$0ho^4{v>_th0Qw+cW zeJTd%H<283h}3|6bs>{ubNrMf8s5;gXq=SQPMM;E{%@gDTwf0pHV#2`Z8(W~v|lch zmyVOaunTv;xxDX450km>ho2xiuGHvjq{k{9@|$W5GrQ+CvnHH(Viso?7THnUn^Ed9 z=hW0jNJe(szs4?|QygzS$;TeOg85w!Ivyk>;(cnejD|8Xqs4)*I@H{p*C-{u>w4~4 z8<)5h50LifV}O1MBwXmf$r)y`ai-a~QIB!WEc~L-sjkxrwAEFFMW1~{)fic-AVD=t znVY<#MiA+9LA*6S(hkH?~XZY>v<~= z9KM~|O!fiY*s?luo<&cyyqv;#VZHd(epGhPa6X+knaNl^<)iL|I9qeZb|R?9WAigq zwWIV$zWR1%H5i}m?(52`W9wCRcy@7UXAhX{Rt)gd(AKSDGR{Y{g68II(DQUH(V)Vd ziGq~s1lsBvR@4)jHu7RP9Y&M;AW0|n6LNk#|v3*n=(kA#ENL$yWNmmo#P+ zkr!C8N%aF=owG_0(aImi7-ki370zEdDXP$3Q#JX5v4vI)3fEYru?i1u$fXW%;M~Kt zR+^Of5bE~BlwI(uULW<&kxSreH^}B7o4D*y$FmTyLJtgX&EA87R%(9KSX|SK=i@ki z>JvS^n=6?70`%)~C_@~xyP;vkTI@Dk{Ws4pk@B$o&>)fPcT%|>ngk79L!f67V+2x96@x2wm8{rs8^ca&^;hBZ= ziMyWtSU1C&@M8R1nwc5x62ORk5jvDBXkXFWjLB-iT>nBH9>$ueX5oq>D(J<$CB@Q= zhH{NW`Ui9xIKmFXS8f@DJ>~Jfr$Hj|7dO}FG@PzzkD+3AFV+HiPafSk&c}_TOJ~y=-1+I9Jk)M{Lc>Stw7)=3&GW4W2T}0!z36 ze^nOG>SkLdSsVE<##AtcYn71=6#0?k7q(EBg8TJ6(5cP?y?p&y=IXBsM%18#$Y0?0 zVe(`@D<;0a|6p*!orhk+fkxwY{$RD#X~>w5oXP5&zJDvQG5?d?x;!O4KvQsH^>Ov>8d(;SWrJDjqrP&u)hgskz zosO#tm93<%07o(GrE!%@$YPsMBbGqW3M_mv?$$Al2Xfk(+b*eW>FN{No(KbenNsirVEN4tfNbPaBxm&pM;5c394 z^vjf_8Rvq7V_bV!_;&{vSUD_X^t}M1?JwkN5Rb)2b4Lsym^V$F`8Z8NHv>d>VxKSD z$@myKUJuh8krlchyDWHl!5y&rxTv!fqcLHWZ6q!cMr#Rt$g5Dig=XtzU%JaTiVb=t zd@Eb$lrk|S;xkIx&+f?~3$d|wy&+28M30w$3KAY|Oq`B;?_R&Qg}?iQCsOIXr{XO1 z-ib_xY{YELH3mERu|f4mRGI?kP0vVro_alKJ({&_!Bs} zIN>&^o&0LrPr){#0(nfpDYA29@>&&fgX$}TtK&r1&faXzW>fBzIG{);>3HSy?r~@k zG^Kdpfnp^-P!CE)@iER%ESWn$4^5L7jfFZkaRVuYgY?|mgOOP|;H&rT#@Do9$rF=Z zALObPSd5*yQN81=*?FIKI(yIXP0p22#Ss3O1m@4kBqZ#S z3i%5=&%Ni^uX{NhpR)POqyd#QK)cONPpH=T@kVoQ3v5J%_xE(d-9@`o%FC zn9K_%djfS}Gq-E#IIVBgpo8Nd`t%-eB(OH(JNkWNnB6_kSusC;9_J}4*pu*kJ6y*& zMR`&i%p4K%{uDJAZO~6gjrcCAV{yg_*6m!4pE`*{a^*EMKBpuC>YvTFJIP8ko?yB* zf-sl!!X;b5EYAmtl&%Kd^$pEjoIPx&lflER^`P1g#Hc;eEY2#d@ckZ$Qnu1bg)^*h zq{1Q5T!ZJJL}NyPx5kU0ae-?(NRWr)%C&Pc1p9(0Hzb|_))Z+Mtd2MX8$sH=i*`}O zR~Q4o(!KqiQ(9nTmrM(630Gq`bwPa(tc*Fs5TJY&L+kGU3vFn;9`);8Us_Fj2XBi- z9SJuqKuVs();T_8O3)i(^6aP0%H_yt7->D|1UH!_whLp!Moh;yLllD7cHYGARm$mF zanRqd(hS=%3_a}Ejz|UscKYOj0FCpE>}@Vw z&&9!7S$-qY8@L_8&u)RY^+c?UNU5rmVHI4ENCV{@ofu~J%oE&>SeQnmYzHkL32%iN zo|`a!udqH&g@nAhzK7|wG>#mG3bqBrIxFv#R_{3HR;=#7&Hbq*tBGoks)|cg7*4g4B$vQ_SIsCl!^NJy!T+;IY%VL%mBMSky7;@*m_X2e{F zDdGvxzS;Z3RRsS<+vK82!GIG#aAEM60cM>HPntVRo<5c~|701}43t}6v&}5UNOqqq z#wl*v@qii)9N3FPj-cx9up)^*WDl61y@`&%%q9&yC+q#E;d~qbbOrTY=phy4^SmR* zzq3x7hzmrN@xM{Vv9d{cj>J-+p>xg3J*RD)i?o`ALSyivC#(r=3&Ab9%}rhQ_eXb{ ziTpG_sZ??-#=Hd|69i*GJ5c?{Cz_O*CM0HGsE!!moT2BGlljcYdK`IoLZUInIki0o z80E97k>3p3HEOLbBDTlW_Va~v5|PyMaxcDoGY67(7*0o~9T%*kJ;OF7qP6)m&*@>D zIcOQ@Pc;kr5ubBnm$@yY!GEk<3-*S&?R zGifcoRMPvZ{S8e8jnZ>itha=lvzvJI>y%1-2hWgvH zyHGeh7gjGG7$Mbm(zeT1K%ImR(#F6HR#e$5vitsEUO34O$Ba*^oOv+F{LXgt29vQ7 z#1_YlEPHeS-fL?n<4jgz1M1;qGA;wQ(n~WLH`xxAm@t?)N8^} ztQ~eIc6~}W@Qw~X*p}CL`5b@khzmUvfm5=*-jigQjFVWF4w8c7uG8ttUU`p|<~Qi^ z#C+^z)24z4CUa%dPbCkhG_?bE5#|<7XlaS(B?+FVMApmbQ|jTn%Z@PG2V%+|_ydH# zU9js2ai6XKqCFYgSk2g_(xdHW_rzkjEh;ukE2mjuXeV3+gWp48HAiMot)KWj$I^R; zVYfmr;zj#Zfy>3;)+?&)Nj>f#Ouhea1hE^Kb_|40RI}{TL~L&wA|_NgTX&-AER7+M z6ldWjb=B$1UJD}9Y#j~GXG>a}0@R{mDC5a(nu!GQMx35^D1bk@QG#!MMSST9)&S2X zcIOvv!C4&e`t5@@vIXsM8xs2{C+8ts#MVXzm52R1bMDGn*3rY?sj~uQpRbI_x=oqc z)beXjrkYJtFlYM()8Ru{+gFxqzh-8n6^{XZAfLmKp%bia9n4p5W zS^4y8J9@2+(>z7)JZoC}Sv@bYV>Fxr0v8KwM&oj55)vQyQ13cx2CUl?!En(DD^AqI zxAXEAg<4x&J$)0}dpg{a?=jsDq+>Z;Oz+ zbU|zoO&JaNm)WE-jpBnql>qq;tJ9PK@6D319g+$YXlzD&Q=vWL;tAuo}Zj zym`N0R^I+*MZx(Y3QlfohO-yDFjWuT1VceRMNRFW<3oLqB_?glXQ*KxVgdVoSWZvZ zK38STEMnD5o3;`)7GbIN@In%!fyvkl#AK+pE+~)QKHi!y#NVv3(ih{~8*FaE#}U#A z+WGBp5aqh?cce8nP$mN*>cCj@p?bVWil>r%P(>QTk3n701}krMkn-nu)qdbq?Q^vJ zNm}j4u3PX@(WHu1UK)M%L44$Vf+)8+I>0P_lMm{DGuE46TQEQ&K1jd*mc^Qy232WF zTN|znSsQMZKf%rqLxu`{TZ0;{4N18VYZvz#5Wf|-NsI=eDZL9 z^TTgC{lshDrybi>ov|S?*!44?R>X4x-u$VZN@X|z)RGuGkE-fN@NS2TgF27;lrB#6 zmPguA>YZobhy|g^xHlLigyvuAu#+K@HCq-{^-;J(jZN9-&{tGN4Vzv9olE2D)1pxK zhfYLUyg2nM_-b6-A$ow?_O4ofVKLRzOveBObx$n8-1EU`_NN@8VjQw;;*?P=QhOj{ zcVUW9AX@_dGG>pz4#B{v+=5l|wq1vb7OJKEv^%$4zHCx$-#xO$jN$RF0-pb{Njr!+ z7hZ5IF6k!H*_S|4FT}_3J_d8~M}r0@%y-c$pob*Z@3=XJ+;efixORgR=ovxOXOE&~1aMe4`zFPG*J+tK+cyUV{{KDU4 z<9%_=V8M;~);aL}Km|hy@is<|S=8OL#BM>@nox3#T0SO+YWAK1wFqCJ*G{$yz)3x* zt)Qyn3)p`bWA4&=F`b-sEF`jfS*YsWBafjLERP8F#zXZn$XFr1qc?G?BbdyUHIF~l z8l6!8^H4FF_MSZIDptSPOJc|9m1MR}-n-wYF&7{96FDxy;tdPImZx_hNv4x8JVT6| zU1fpUs^I8{?hmbXFQLS`$(q-M)H~0)h_drPOF+pywowbjF&gq1>?R-0(x@uU6!hr2 zwVULr%Vm7LeDnhFnK&Q+wHq!syqM4Z4rn4h+-MEy5Rz0;^u zL8b9Xwu4CD?mG;O3%=boJhEyR*Au@A(_*MKC(0C&t#rNrJPex-eN)AhSy#xUNhgka z$9X-#Z0|wU>m^B--HR~s_Pj)Wd(JX3U`Ue5pk-RXeG9}%G#qW+J?yYoNY8>l)f3s- ztMKCBAqO@TV1LqZ%ya$?X0wvSY%&IOi5K8)U8$c7f5;1)$?!Yh0&x;;)dA1$mOu+z zr!?TBvK#P0??mQP8WbuWi;b@JfjKbAo}uF(j;s2YF(KNrhnXGbbhz5ErI2U_Ci+t; zJL`>9&eA^|^~mJ;?QVfMiB|mLz_~2XyGA)p40jU;9+&=IEQq{y#dgv;6Lp*|c&rA62kA(|- zFfMz<%dzLoO{N7hEnwRM1`!p(Q|}rzg2F9Nfw4Zo0`48ulHCZeg)C~UTMA>tPB7jy zc*MReCcl%eO?I{g%tU5d;9J`Q+8&;S+Nr-Cc?!G<;@!X#a59gX7Ra + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + UIRequiredDeviceCapabilities + + arm64 + + MinimumOSVersion + 8.0 + + diff --git a/example/ios/Flutter/Debug.xcconfig b/example/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000..592ceee --- /dev/null +++ b/example/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/example/ios/Flutter/Release.xcconfig b/example/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000..592ceee --- /dev/null +++ b/example/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/example/ios/Podfile b/example/ios/Podfile new file mode 100644 index 0000000..74b3de0 --- /dev/null +++ b/example/ios/Podfile @@ -0,0 +1,38 @@ +# Uncomment this line to define a global platform for your project +# platform :ios, '9.0' + +if ENV['FLUTTER_FRAMEWORK_DIR'] == nil + abort('Please set FLUTTER_FRAMEWORK_DIR to the directory containing Flutter.framework') +end + +target 'Runner' do + use_frameworks! + + # Pods for Runner + + # Flutter Pods + pod 'Flutter', :path => ENV['FLUTTER_FRAMEWORK_DIR'] + + if File.exists? '../.flutter-plugins' + flutter_root = File.expand_path('..') + File.foreach('../.flutter-plugins') { |line| + plugin = line.split(pattern='=') + if plugin.length == 2 + name = plugin[0].strip() + path = plugin[1].strip() + resolved_path = File.expand_path("#{path}/ios", flutter_root) + pod name, :path => resolved_path + else + puts "Invalid plugin specification: #{line}" + end + } + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + target.build_configurations.each do |config| + config.build_settings['ENABLE_BITCODE'] = 'NO' + end + end +end diff --git a/example/ios/Runner.xcodeproj/project.pbxproj b/example/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..6e8073a --- /dev/null +++ b/example/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,424 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* PluginRegistry.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* PluginRegistry.m */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; + 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; + 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; }; + 9740EEB51CF90195004384FC /* Generated.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB31CF90195004384FC /* Generated.xcconfig */; }; + 9740EEBB1CF902C7004384FC /* app.flx in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB71CF902C7004384FC /* app.flx */; }; + 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; }; + 97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */, + 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* PluginRegistry.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PluginRegistry.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* PluginRegistry.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PluginRegistry.m; sourceTree = ""; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; 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 = ""; }; + 9740EEB71CF902C7004384FC /* app.flx */ = {isa = PBXFileReference; lastKnownFileType = file; name = app.flx; path = Flutter/app.flx; sourceTree = ""; }; + 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, + 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 9740EEB71CF902C7004384FC /* app.flx */, + 3B80C3931E831B6300D905FE /* App.framework */, + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEBA1CF902C7004384FC /* Flutter.framework */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + CF3B75C9A7D2FA2A4C99F110 /* Frameworks */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */, + 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */, + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 97C146F11CF9000F007C117D /* Supporting Files */, + 1498D2321E8E86230040F4C2 /* PluginRegistry.h */, + 1498D2331E8E89220040F4C2 /* PluginRegistry.m */, + ); + path = Runner; + sourceTree = ""; + }; + 97C146F11CF9000F007C117D /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 97C146F21CF9000F007C117D /* main.m */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0830; + ORGANIZATIONNAME = "The Chromium Authors"; + TargetAttributes = { + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9740EEBB1CF902C7004384FC /* app.flx in Resources */, + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 9740EEB51CF90195004384FC /* Generated.xcconfig in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */, + 97C146F31CF9000F007C117D /* main.m in Sources */, + 1498D2341E8E89220040F4C2 /* PluginRegistry.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 */ + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ARCHS = arm64; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.yourcompany.routerExample; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ARCHS = arm64; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.yourcompany.routerExample; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..1c95807 --- /dev/null +++ b/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/ios/Runner.xcworkspace/contents.xcworkspacedata b/example/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/example/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/example/ios/Runner/AppDelegate.h b/example/ios/Runner/AppDelegate.h new file mode 100644 index 0000000..cf210d2 --- /dev/null +++ b/example/ios/Runner/AppDelegate.h @@ -0,0 +1,6 @@ +#import +#import + +@interface AppDelegate : FlutterAppDelegate + +@end diff --git a/example/ios/Runner/AppDelegate.m b/example/ios/Runner/AppDelegate.m new file mode 100644 index 0000000..3b6ab51 --- /dev/null +++ b/example/ios/Runner/AppDelegate.m @@ -0,0 +1,38 @@ +#include "AppDelegate.h" +#include "PluginRegistry.h" + +@implementation AppDelegate { + PluginRegistry *plugins; +} + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + // Override point for customization after application launch. + FlutterViewController *flutterController = + (FlutterViewController *)self.window.rootViewController; + plugins = [[PluginRegistry alloc] initWithController:flutterController]; + return YES; +} + +- (void)applicationWillResignActive:(UIApplication *)application { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. +} + +- (void)applicationDidEnterBackground:(UIApplication *)application { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. +} + +- (void)applicationWillEnterForeground:(UIApplication *)application { + // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. +} + +- (void)applicationDidBecomeActive:(UIApplication *)application { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. +} + +- (void)applicationWillTerminate:(UIApplication *)application { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. +} + +@end diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d22f10b --- /dev/null +++ b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,116 @@ +{ + "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" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..28c6bf03016f6c994b70f38d1b7346e5831b531f GIT binary patch literal 564 zcmV-40?Yl0P)Px$?ny*JR5%f>l)FnDQ543{x%ZCiu33$Wg!pQFfT_}?5Q|_VSlIbLC`dpoMXL}9 zHfd9&47Mo(7D231gb+kjFxZHS4-m~7WurTH&doVX2KI5sU4v(sJ1@T9eCIKPjsqSr z)C01LsCxk=72-vXmX}CQD#BD;Cthymh&~=f$Q8nn0J<}ZrusBy4PvRNE}+1ceuj8u z0mW5k8fmgeLnTbWHGwfKA3@PdZxhn|PypR&^p?weGftrtCbjF#+zk_5BJh7;0`#Wr zgDpM_;Ax{jO##IrT`Oz;MvfwGfV$zD#c2xckpcXC6oou4ML~ezCc2EtnsQTB4tWNg z?4bkf;hG7IMfhgNI(FV5Gs4|*GyMTIY0$B=_*mso9Ityq$m^S>15>-?0(zQ<8Qy<_TjHE33(?_M8oaM zyc;NxzRVK@DL6RJnX%U^xW0Gpg(lXp(!uK1v0YgHjs^ZXSQ|m#lV7ip7{`C_J2TxPmfw%h$|%acrYHt)Re^PB%O&&=~a zhS(%I#+V>J-vjIib^<+s%ludY7y^C(P8nmqn9fp!i+?vr`bziDE=bx`%2W#Xyrj|i z!XQ4v1%L`m{7KT7q+LZNB^h8Ha2e=`Wp65^0;J00)_^G=au=8Yo;1b`CV&@#=jIBo zjN^JNVfYSs)+kDdGe7`1&8!?MQYKS?DuHZf3iogk_%#9E|5S zWeHrmAo>P;ejX7mwq#*}W25m^ZI+{(Z8fI?4jM_fffY0nok=+88^|*_DwcW>mR#e+ zX$F_KMdb6sRz!~7KkyN0G(3XQ+;z3X%PZ4gh;n-%62U<*VUKNv(D&Q->Na@Xb&u5Q3`3DGf+a8O5x7c#7+R+EAYl@R5us)CIw z7sT@_y~Ao@uL#&^LIh&QceqiT^+lb0YbFZt_SHOtWA%mgPEKVNvVgCsXy{5+zl*X8 zCJe)Q@y>wH^>l4;h1l^Y*9%-23TSmE>q5nI@?mt%n;Sj4Qq`Z+ib)a*a^cJc%E9^J zB;4s+K@rARbcBLT5P=@r;IVnBMKvT*)ew*R;&8vu%?Z&S>s?8?)3*YawM0P4!q$Kv zMmKh3lgE~&w&v%wVzH3Oe=jeNT=n@Y6J6TdHWTjXfX~-=1A1Bw`EW8rn}MqeI34nh zexFeA?&C3B2(E?0{drE@DA2pu(A#ElY&6el60Rn|Qpn-FkfQ8M93AfWIr)drgDFEU zghdWK)^71EWCP(@(=c4kfH1Y(4iugD4fve6;nSUpLT%!)MUHs1!zJYy4y||C+SwQ! z)KM&$7_tyM`sljP2fz6&Z;jxRn{Wup8IOUx8D4uh&(=O zx-7$a;U><*5L^!%xRlw)vAbh;sdlR||& ze}8_8%)c2Fwy=F&H|LM+p{pZB5DKTx>Y?F1N%BlZkXf!}JeGuMZk~LPi7{cidvUGB zAJ4LVeNV%XO>LTrklB#^-;8nb;}6l;1oW&WS=Mz*Az!4cqqQzbOSFq`$Q%PfD7srM zpKgP-D_0XPTRX*hAqeq0TDkJ;5HB1%$3Np)99#16c{ zJImlNL(npL!W|Gr_kxl1GVmF5&^$^YherS7+~q$p zt}{a=*RiD2Ikv6o=IM1kgc7zqpaZ;OB)P!1zz*i3{U()Dq#jG)egvK}@uFLa`oyWZ zf~=MV)|yJn`M^$N%ul5);JuQvaU1r2wt(}J_Qgyy`qWQI`hEeRX0uC@c1(dQ2}=U$ tNIIaX+dr)NRWXcxoR{>fqI{SF_dm1Ylv~=3YHI)h002ovPDHLkV1g(pWS;;4 literal 0 HcmV?d00001 diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..f091b6b0bca859a3f474b03065bef75ba58a9e4c GIT binary patch literal 1588 zcmV-42Fv-0P)C1SqPt}wig>|5Crh^=oyX$BK<}M8eLU3e2hGT;=G|!_SP)7zNI6fqUMB=)y zRAZ>eDe#*r`yDAVgB_R*LB*MAc)8(b{g{9McCXW!lq7r(btRoB9!8B-#AI6JMb~YFBEvdsV)`mEQO^&#eRKx@b&x- z5lZm*!WfD8oCLzfHGz#u7sT0^VLMI1MqGxF^v+`4YYnVYgk*=kU?HsSz{v({E3lb9 z>+xILjBN)t6`=g~IBOelGQ(O990@BfXf(DRI5I$qN$0Gkz-FSc$3a+2fX$AedL4u{ z4V+5Ong(9LiGcIKW?_352sR;LtDPmPJXI{YtT=O8=76o9;*n%_m|xo!i>7$IrZ-{l z-x3`7M}qzHsPV@$v#>H-TpjDh2UE$9g6sysUREDy_R(a)>=eHw-WAyfIN z*qb!_hW>G)Tu8nSw9yn#3wFMiLcfc4pY0ek1}8(NqkBR@t4{~oC>ryc-h_ByH(Cg5 z>ao-}771+xE3um9lWAY1FeQFxowa1(!J(;Jg*wrg!=6FdRX+t_<%z&d&?|Bn){>zm zZQj(aA_HeBY&OC^jj*)N`8fa^ePOU72VpInJoI1?`ty#lvlNzs(&MZX+R%2xS~5Kh zX*|AU4QE#~SgPzOXe9>tRj>hjU@c1k5Y_mW*Jp3fI;)1&g3j|zDgC+}2Q_v%YfDax z!?umcN^n}KYQ|a$Lr+51Nf9dkkYFSjZZjkma$0KOj+;aQ&721~t7QUKx61J3(P4P1 zstI~7-wOACnWP4=8oGOwz%vNDqD8w&Q`qcNGGrbbf&0s9L0De{4{mRS?o0MU+nR_! zrvshUau0G^DeMhM_v{5BuLjb#Hh@r23lDAk8oF(C+P0rsBpv85EP>4CVMx#04MOfG z;P%vktHcXwTj~+IE(~px)3*MY77e}p#|c>TD?sMatC0Tu4iKKJ0(X8jxQY*gYtxsC z(zYC$g|@+I+kY;dg_dE>scBf&bP1Nc@Hz<3R)V`=AGkc;8CXqdi=B4l2k|g;2%#m& z*jfX^%b!A8#bI!j9-0Fi0bOXl(-c^AB9|nQaE`*)Hw+o&jS9@7&Gov#HbD~#d{twV zXd^Tr^mWLfFh$@Dr$e;PBEz4(-2q1FF0}c;~B5sA}+Q>TOoP+t>wf)V9Iy=5ruQa;z)y zI9C9*oUga6=hxw6QasLPnee@3^Rr*M{CdaL5=R41nLs(AHk_=Y+A9$2&H(B7!_pURs&8aNw7?`&Z&xY_Ye z)~D5Bog^td-^QbUtkTirdyK^mTHAOuptDflut!#^lnKqU md>ggs(5nOWAqO?umG&QVYK#ibz}*4>0000U6E9hRK9^#O7(mu>ETqrXGsduA8$)?`v2seloOCza43C{NQ$$gAOH**MCn0Q?+L7dl7qnbRdqZ8LSVp1ItDxhxD?t@5_yHg6A8yI zC*%Wgg22K|8E#!~cTNYR~@Y9KepMPrrB8cABapAFa=`H+UGhkXUZV1GnwR1*lPyZ;*K(i~2gp|@bzp8}og7e*#% zEnr|^CWdVV!-4*Y_7rFvlww2Ze+>j*!Z!pQ?2l->4q#nqRu9`ELo6RMS5=br47g_X zRw}P9a7RRYQ%2Vsd0Me{_(EggTnuN6j=-?uFS6j^u69elMypu?t>op*wBx<=Wx8?( ztpe^(fwM6jJX7M-l*k3kEpWOl_Vk3@(_w4oc}4YF4|Rt=2V^XU?#Yz`8(e?aZ@#li0n*=g^qOcVpd-Wbok=@b#Yw zqn8u9a)z>l(1kEaPYZ6hwubN6i<8QHgsu0oE) ziJ(p;Wxm>sf!K+cw>R-(^Y2_bahB+&KI9y^);#0qt}t-$C|Bo71lHi{_+lg#f%RFy z0um=e3$K3i6K{U_4K!EX?F&rExl^W|G8Z8;`5z-k}OGNZ0#WVb$WCpQu-_YsiqKP?BB# vzVHS-CTUF4Ozn5G+mq_~Qqto~ahA+K`|lyv3(-e}00000NkvXXu0mjfd`9t{ literal 0 HcmV?d00001 diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d0ef06e7edb86cdfe0d15b4b0d98334a86163658 GIT binary patch literal 1716 zcmds$`#;kQ7{|XelZftyR5~xW7?MLxS4^|Hw3&P7^y)@A9Fj{Xm1~_CIV^XZ%SLBn zA;!r`GqGHg=7>xrB{?psZQs88ZaedDoagm^KF{a*>G|dJWRSe^I$DNW008I^+;Kjt z>9p3GNR^I;v>5_`+91i(*G;u5|L+Bu6M=(afLjtkya#yZ175|z$pU~>2#^Z_pCZ7o z1c6UNcv2B3?; zX%qdxCXQpdKRz=#b*q0P%b&o)5ZrNZt7$fiETSK_VaY=mb4GK`#~0K#~9^ zcY!`#Af+4h?UMR-gMKOmpuYeN5P*RKF!(tb`)oe0j2BH1l?=>y#S5pMqkx6i{*=V9JF%>N8`ewGhRE(|WohnD59R^$_36{4>S zDFlPC5|k?;SPsDo87!B{6*7eqmMdU|QZ84>6)Kd9wNfh90=y=TFQay-0__>=<4pk& zYDjgIhL-jQ9o>z32K)BgAH+HxamL{ZL~ozu)Qqe@a`FpH=oQRA8=L-m-1dam(Ix2V z?du;LdMO+ooBelr^_y4{|44tmgH^2hSzPFd;U^!1p>6d|o)(-01z{i&Kj@)z-yfWQ)V#3Uo!_U}q3u`(fOs`_f^ueFii1xBNUB z6MecwJN$CqV&vhc+)b(p4NzGGEgwWNs z@*lUV6LaduZH)4_g!cE<2G6#+hJrWd5(|p1Z;YJ7ifVHv+n49btR}dq?HHDjl{m$T z!jLZcGkb&XS2OG~u%&R$(X+Z`CWec%QKt>NGYvd5g20)PU(dOn^7%@6kQb}C(%=vr z{?RP(z~C9DPnL{q^@pVw@|Vx~@3v!9dCaBtbh2EdtoNHm4kGxp>i#ct)7p|$QJs+U z-a3qtcPvhihub?wnJqEt>zC@)2suY?%-96cYCm$Q8R%-8$PZYsx3~QOLMDf(piXMm zB=<63yQk1AdOz#-qsEDX>>c)EES%$owHKue;?B3)8aRd}m~_)>SL3h2(9X;|+2#7X z+#2)NpD%qJvCQ0a-uzZLmz*ms+l*N}w)3LRQ*6>|Ub-fyptY(keUxw+)jfwF5K{L9 z|Cl_w=`!l_o><384d&?)$6Nh(GAm=4p_;{qVn#hI8lqewW7~wUlyBM-4Z|)cZr?Rh z=xZ&Ol>4(CU85ea(CZ^aO@2N18K>ftl8>2MqetAR53_JA>Fal`^)1Y--Am~UDa4th zKfCYpcXky$XSFDWBMIl(q=Mxj$iMBX=|j9P)^fDmF(5(5$|?Cx}DKEJa&XZP%OyE`*GvvYQ4PV&!g2|L^Q z?YG}tx;sY@GzMmsY`7r$P+F_YLz)(e}% zyakqFB<6|x9R#TdoP{R$>o7y(-`$$p0NxJ6?2B8tH)4^yF(WhqGZlM3=9Ibs$%U1w zWzcss*_c0=v_+^bfb`kBFsI`d;ElwiU%frgRB%qBjn@!0U2zZehBn|{%uNIKBA7n= zzE`nnwTP85{g;8AkYxA68>#muXa!G>xH22D1I*SiD~7C?7Za+9y7j1SHiuSkKK*^O zsZ==KO(Ua#?YUpXl{ViynyT#Hzk=}5X$e04O@fsMQjb}EMuPWFO0e&8(2N(29$@Vd zn1h8Yd>6z(*p^E{c(L0Lg=wVdupg!z@WG;E0k|4a%s7Up5C0c)55XVK*|x9RQeZ1J@1v9MX;>n34(i>=YE@Iur`0Vah(inE3VUFZNqf~tSz{1fz3Fsn_x4F>o(Yo;kpqvBe-sbwH(*Y zu$JOl0b83zu$JMvy<#oH^Wl>aWL*?aDwnS0iEAwC?DK@aT)GHRLhnz2WCvf3Ba;o=aY7 z2{Asu5MEjGOY4O#Ggz@@J;q*0`kd2n8I3BeNuMmYZf{}pg=jTdTCrIIYuW~luKecn z+E-pHY%ohj@uS0%^ z&(OxwPFPD$+#~`H?fMvi9geVLci(`K?Kj|w{rZ9JgthFHV+=6vMbK~0)Ea<&WY-NC zy-PnZft_k2tfeQ*SuC=nUj4H%SQ&Y$gbH4#2sT0cU0SdFs=*W*4hKGpuR1{)mV;Qf5pw4? zfiQgy0w3fC*w&Bj#{&=7033qFR*<*61B4f9K%CQvxEn&bsWJ{&winp;FP!KBj=(P6 z4Z_n4L7cS;ao2)ax?Tm|I1pH|uLpDSRVghkA_UtFFuZ0b2#>!8;>-_0ELjQSD-DRd z4im;599VHDZYtnWZGAB25W-e(2VrzEh|etsv2YoP#VbIZ{aFkwPrzJ#JvCvA*mXS& z`}Q^v9(W4GiSs}#s7BaN!WA2bniM$0J(#;MR>uIJ^uvgD3GS^%*ikdW6-!VFUU?JV zZc2)4cMsX@j z5HQ^e3BUzOdm}yC-xA%SY``k$rbfk z;CHqifhU*jfGM@DkYCecD9vl*qr58l6x<8URB=&%{!Cu3RO*MrKZ4VO}V6R0a zZw3Eg^0iKWM1dcTYZ0>N899=r6?+adUiBKPciJw}L$=1f4cs^bio&cr9baLF>6#BM z(F}EXe-`F=f_@`A7+Q&|QaZ??Txp_dB#lg!NH=t3$G8&06MFhwR=Iu*Im0s_b2B@| znW>X}sy~m#EW)&6E&!*0%}8UAS)wjt+A(io#wGI@Z2S+Ms1Cxl%YVE800007ip7{`C_J2TxPmfw%h$|%acrYHt)Re^PB%O&&=~a zhS(%I#+V>J-vjIib^<+s%ludY7y^C(P8nmqn9fp!i+?vr`bziDE=bx`%2W#Xyrj|i z!XQ4v1%L`m{7KT7q+LZNB^h8Ha2e=`Wp65^0;J00)_^G=au=8Yo;1b`CV&@#=jIBo zjN^JNVfYSs)+kDdGe7`1&8!?MQYKS?DuHZf3iogk_%#9E|5S zWeHrmAo>P;ejX7mwq#*}W25m^ZI+{(Z8fI?4jM_fffY0nok=+88^|*_DwcW>mR#e+ zX$F_KMdb6sRz!~7KkyN0G(3XQ+;z3X%PZ4gh;n-%62U<*VUKNv(D&Q->Na@Xb&u5Q3`3DGf+a8O5x7c#7+R+EAYl@R5us)CIw z7sT@_y~Ao@uL#&^LIh&QceqiT^+lb0YbFZt_SHOtWA%mgPEKVNvVgCsXy{5+zl*X8 zCJe)Q@y>wH^>l4;h1l^Y*9%-23TSmE>q5nI@?mt%n;Sj4Qq`Z+ib)a*a^cJc%E9^J zB;4s+K@rARbcBLT5P=@r;IVnBMKvT*)ew*R;&8vu%?Z&S>s?8?)3*YawM0P4!q$Kv zMmKh3lgE~&w&v%wVzH3Oe=jeNT=n@Y6J6TdHWTjXfX~-=1A1Bw`EW8rn}MqeI34nh zexFeA?&C3B2(E?0{drE@DA2pu(A#ElY&6el60Rn|Qpn-FkfQ8M93AfWIr)drgDFEU zghdWK)^71EWCP(@(=c4kfH1Y(4iugD4fve6;nSUpLT%!)MUHs1!zJYy4y||C+SwQ! z)KM&$7_tyM`sljP2fz6&Z;jxRn{Wup8IOUx8D4uh&(=O zx-7$a;U><*5L^!%xRlw)vAbh;sdlR||& ze}8_8%)c2Fwy=F&H|LM+p{pZB5DKTx>Y?F1N%BlZkXf!}JeGuMZk~LPi7{cidvUGB zAJ4LVeNV%XO>LTrklB#^-;8nb;}6l;1oW&WS=Mz*Az!4cqqQzbOSFq`$Q%PfD7srM zpKgP-D_0XPTRX*hAqeq0TDkJ;5HB1%$3Np)99#16c{ zJImlNL(npL!W|Gr_kxl1GVmF5&^$^YherS7+~q$p zt}{a=*RiD2Ikv6o=IM1kgc7zqpaZ;OB)P!1zz*i3{U()Dq#jG)egvK}@uFLa`oyWZ zf~=MV)|yJn`M^$N%ul5);JuQvaU1r2wt(}J_Qgyy`qWQI`hEeRX0uC@c1(dQ2}=U$ tNIIaX+dr)NRWXcxoR{>fqI{SF_dm1Ylv~=3YHI)h002ovPDHLkV1g(pWS;;4 literal 0 HcmV?d00001 diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c8f9ed8f5cee1c98386d13b17e89f719e83555b2 GIT binary patch literal 1895 zcmV-t2blPYP)FQtfgmafE#=YDCq`qUBt#QpG%*H6QHY765~R=q zZ6iudfM}q!Pz#~9JgOi8QJ|DSu?1-*(kSi1K4#~5?#|rh?sS)(-JQqX*}ciXJ56_H zdw=^s_srbAdqxlvGyrgGet#6T7_|j;95sL%MtM;q86vOxKM$f#puR)Bjv9Zvz9-di zXOTSsZkM83)E9PYBXC<$6(|>lNLVBb&&6y{NByFCp%6+^ALR@NCTse_wqvNmSWI-m z!$%KlHFH2omF!>#%1l3LTZg(s7eof$7*xB)ZQ0h?ejh?Ta9fDv59+u#MokW+1t8Zb zgHv%K(u9G^Lv`lh#f3<6!JVTL3(dCpxHbnbA;kKqQyd1~^Xe0VIaYBSWm6nsr;dFj z4;G-RyL?cYgsN1{L4ZFFNa;8)Rv0fM0C(~Tkit94 zz#~A)59?QjD&pAPSEQ)p8gP|DS{ng)j=2ux)_EzzJ773GmQ_Cic%3JJhC0t2cx>|v zJcVusIB!%F90{+}8hG3QU4KNeKmK%T>mN57NnCZ^56=0?&3@!j>a>B43pi{!u z7JyDj7`6d)qVp^R=%j>UIY6f+3`+qzIc!Y_=+uN^3BYV|o+$vGo-j-Wm<10%A=(Yk^beI{t%ld@yhKjq0iNjqN4XMGgQtbKubPM$JWBz}YA65k%dm*awtC^+f;a-x4+ddbH^7iDWGg&N0n#MW{kA|=8iMUiFYvMoDY@sPC#t$55gn6ykUTPAr`a@!(;np824>2xJthS z*ZdmT`g5-`BuJs`0LVhz+D9NNa3<=6m;cQLaF?tCv8)zcRSh66*Z|vXhG@$I%U~2l z?`Q zykI#*+rQ=z6Jm=Bui-SfpDYLA=|vzGE(dYm=OC8XM&MDo7ux4UF1~0J1+i%aCUpRe zt3L_uNyQ*cE(38Uy03H%I*)*Bh=Lb^Xj3?I^Hnbeq72(EOK^Y93CNp*uAA{5Lc=ky zx=~RKa4{iTm{_>_vSCm?$Ej=i6@=m%@VvAITnigVg{&@!7CDgs908761meDK5azA} z4?=NOH|PdvabgJ&fW2{Mo$Q0CcD8Qc84%{JPYt5EiG{MdLIAeX%T=D7NIP4%Hw}p9 zg)==!2Lbp#j{u_}hMiao9=!VSyx0gHbeCS`;q&vzeq|fs`y&^X-lso(Ls@-706qmA z7u*T5PMo_w3{se1t2`zWeO^hOvTsohG_;>J0wVqVe+n)AbQCx)yh9;w+J6?NF5Lmo zecS@ieAKL8%bVd@+-KT{yI|S}O>pYckUFs;ry9Ow$CD@ztz5K-*D$^{i(_1llhSh^ zEkL$}tsQt5>QA^;QgjgIfBDmcOgi5YDyu?t6vSnbp=1+@6D& z5MJ}B8q;bRlVoxasyhcUF1+)o`&3r0colr}QJ3hcSdLu;9;td>kf@Tcn<@9sIx&=m z;AD;SCh95=&p;$r{Xz3iWCO^MX83AGJ(yH&eTXgv|0=34#-&WAmw{)U7OU9!Wz^!7 zZ%jZFi@JR;>Mhi7S>V7wQ176|FdW2m?&`qa(ScO^CFPR80HucLHOTy%5s*HR0^8)i h0WYBP*#0Ks^FNSabJA*5${_#%002ovPDHLkV1oKhTl@e3 literal 0 HcmV?d00001 diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d6b8609df07bf62e5100a53a01510388bd2b22 GIT binary patch literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ literal 0 HcmV?d00001 diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d6b8609df07bf62e5100a53a01510388bd2b22 GIT binary patch literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ literal 0 HcmV?d00001 diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..75b2d164a5a98e212cca15ea7bf2ab5de5108680 GIT binary patch literal 3831 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 literal 0 HcmV?d00001 diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..c4df70d39da7941ef3f6dcb7f06a192d8dcb308d GIT binary patch literal 1888 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 iW8 + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/ios/Runner/Base.lproj/Main.storyboard b/example/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f3c2851 --- /dev/null +++ b/example/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/ios/Runner/GeneratedPluginRegistrant.h b/example/ios/Runner/GeneratedPluginRegistrant.h new file mode 100644 index 0000000..5ec6a8f --- /dev/null +++ b/example/ios/Runner/GeneratedPluginRegistrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +#ifndef GeneratedPluginRegistrant_h +#define GeneratedPluginRegistrant_h + +#import + + +@interface GeneratedPluginRegistrant : NSObject ++ (void)registerWithRegistry:(NSObject*)registry; +@end + +#endif /* GeneratedPluginRegistrant_h */ diff --git a/example/ios/Runner/GeneratedPluginRegistrant.m b/example/ios/Runner/GeneratedPluginRegistrant.m new file mode 100644 index 0000000..60dfa42 --- /dev/null +++ b/example/ios/Runner/GeneratedPluginRegistrant.m @@ -0,0 +1,12 @@ +// +// Generated file. Do not edit. +// + +#import "GeneratedPluginRegistrant.h" + +@implementation GeneratedPluginRegistrant + ++ (void)registerWithRegistry:(NSObject*)registry { +} + +@end diff --git a/example/ios/Runner/Info.plist b/example/ios/Runner/Info.plist new file mode 100644 index 0000000..e04e37b --- /dev/null +++ b/example/ios/Runner/Info.plist @@ -0,0 +1,49 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + router_example + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + arm64 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + + diff --git a/example/ios/Runner/main.m b/example/ios/Runner/main.m new file mode 100644 index 0000000..1bdb8e2 --- /dev/null +++ b/example/ios/Runner/main.m @@ -0,0 +1,10 @@ +#import +#import +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, + NSStringFromClass([AppDelegate class])); + } +} diff --git a/example/lib/app.dart b/example/lib/app.dart new file mode 100644 index 0000000..0385b4a --- /dev/null +++ b/example/lib/app.dart @@ -0,0 +1,49 @@ +/* + * router + * A Posse Production + * http://goposse.com + * Copyright (c) 2017 Posse Productions LLC. All rights reserved. + * See LICENSE for distribution and usage details. + */ +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:router/router.dart'; +import 'package:router_example/config/application.dart'; +import 'package:router_example/config/route_handlers.dart'; +import 'package:router_example/screens/home_screen.dart'; + +class App extends StatelessWidget { + + static const platform = const MethodChannel('channel:com.goposse.routerdemo/deeplink'); + + App() { + Router router = new Router(); + router.define("/demo", handler: showDemoHandler); + Application.router = router; + configureDeepLinker(); + } + + @override + Widget build(BuildContext context) { + return new MaterialApp( + title: 'Flutter Demo', + theme: new ThemeData( + primarySwatch: Colors.blue, + ), + home: new HomeScreen(), + ); + } + + void configureDeepLinker() { + platform.setMethodCallHandler((MethodCall call) async { + if (call.method == "linkReceived") { + String path = call.arguments; + if (path != null) { + print("got path: $path"); + } + } + }); + } + +} + diff --git a/example/lib/config/application.dart b/example/lib/config/application.dart new file mode 100644 index 0000000..3bf5e57 --- /dev/null +++ b/example/lib/config/application.dart @@ -0,0 +1,5 @@ +import 'package:router/router.dart'; + +class Application { + static Router router; +} \ No newline at end of file diff --git a/example/lib/config/route_handlers.dart b/example/lib/config/route_handlers.dart new file mode 100644 index 0000000..fd4c8eb --- /dev/null +++ b/example/lib/config/route_handlers.dart @@ -0,0 +1,21 @@ +/* + * router + * A Posse Production + * http://goposse.com + * Copyright (c) 2017 Posse Productions LLC. All rights reserved. + * See LICENSE for distribution and usage details. + */ +import 'package:flutter/painting.dart'; +import 'package:router/router.dart'; +import 'package:router_example/helpers/color_helpers.dart'; +import 'package:router_example/screens/test_screen_01.dart'; + +RouteHandler showDemoHandler = (Map params) { + String message = params["message"]; + String colorHex = params["color_hex"]; + Color color = new Color(0xFFFFFFFF); + if (colorHex != null && colorHex.length > 0) { + color = new Color(ColorHelpers.fromHexString(colorHex)); + } + return new TestScreen01(message: message, color: color); +}; \ No newline at end of file diff --git a/example/lib/helpers/color_helpers.dart b/example/lib/helpers/color_helpers.dart new file mode 100644 index 0000000..61dc25c --- /dev/null +++ b/example/lib/helpers/color_helpers.dart @@ -0,0 +1,51 @@ +/* + * router + * A Posse Production + * http://goposse.com + * Copyright (c) 2017 Posse Productions LLC. All rights reserved. + * See LICENSE for distribution and usage details. + */ +import 'package:flutter/material.dart'; + +enum ContrastPreference { + none, + light, + dark, +} + +class ColorHelpers { + + static int fromHexString(String argbHexString) { + String useString = argbHexString; + if (useString.startsWith("#")) { + useString = useString.substring(1); // trim the starting '#' + } + if (useString.length < 8) { + useString = "FF" + useString; + } + if (!useString.startsWith("0x")) { + useString = "0x" + useString; + } + return int.parse(useString); + } + + static final double _kMinContrastModifierRange = 0.35; + static final double _kMaxContrastModifierRange = 0.65; + + /// Returns black or white depending on whether the source color is darker + /// or lighter. If darker, will return white. If lighter, will return + /// black. If the color is within 35-65% of the spectrum and a prefer + /// value is specified, then white or black will be preferred. + static Color blackOrWhiteContrastColor(Color sourceColor, {ContrastPreference prefer = ContrastPreference.none}) { + // Will return a value between 0.0 (black) and 1.0 (white) + double value = (((sourceColor.red * 299.0) + (sourceColor.green * 587.0) + + (sourceColor.blue * 114.0)) / 1000.0) / 255.0; + if (prefer != ContrastPreference.none) { + if (value >= _kMinContrastModifierRange && value <= _kMaxContrastModifierRange) { + return prefer == ContrastPreference.light ? new Color(0xFFFFFFFF) : new Color(0xFF000000); + } + } + return value > 0.6 ? new Color(0xFF000000) : new Color(0xFFFFFFFF); + } + +} \ No newline at end of file diff --git a/example/lib/main.dart b/example/lib/main.dart new file mode 100644 index 0000000..aca2ed4 --- /dev/null +++ b/example/lib/main.dart @@ -0,0 +1,13 @@ +/* + * router + * A Posse Production + * http://goposse.com + * Copyright (c) 2017 Posse Productions LLC. All rights reserved. + * See LICENSE for distribution and usage details. + */ +import 'package:flutter/material.dart'; +import 'package:router_example/app.dart'; + +void main() { + runApp(new App()); +} \ No newline at end of file diff --git a/example/lib/screens/home_screen.dart b/example/lib/screens/home_screen.dart new file mode 100644 index 0000000..21cefda --- /dev/null +++ b/example/lib/screens/home_screen.dart @@ -0,0 +1,98 @@ +/* + * router + * A Posse Production + * http://goposse.com + * Copyright (c) 2017 Posse Productions LLC. All rights reserved. + * See LICENSE for distribution and usage details. + */ +import 'package:flutter/material.dart'; +import 'package:router/router.dart'; +import 'package:router_example/config/application.dart'; + +class HomeScreen extends StatelessWidget { + + BuildContext context; + + @override + Widget build(BuildContext context) { + this.context = context; + var menuWidgets = [ + new Padding( + padding: new EdgeInsets.only(bottom: 15.0), + child: new Image(image: new AssetImage("assets/images/logo_fluro.png"), width: 200.0), + ), + menuButton("Native Animation", "native"), + menuButton("Preset (In from Left)", "preset-from-left"), + menuButton("Preset (Fade In)", "preset-fade"), + menuButton("Custom", "custom"), + ]; + return new Material( + color: new Color(0xFF00D6F7), + child: new Column( + mainAxisAlignment: MainAxisAlignment.center, + children: menuWidgets, + ), + ); + } + + // helpers + Widget menuButton(String title, String key) { + return new Padding( + padding: new EdgeInsets.all(4.0), + child: new ConstrainedBox( + constraints: new BoxConstraints(minHeight: 42.0), + child: new FlatButton( + child: new Text( + title, + style: new TextStyle( + color: new Color(0xFF004F8F), + ), + ), + onPressed: () { + tappedMenuButton(key); + }, + ), + ), + ); + } + + // actions + void tappedMenuButton(String key) { + String message = ""; + String hexCode = "#FFFFFF"; + TransitionType transitionType = TransitionType.native; + if (key != "custom") { + if (key == "native") { + hexCode = "#F76F00"; + message = "This screen should have appeared using the default flutter animation for the current OS"; + } else if (key == "preset-from-left") { + hexCode = "#5BF700"; + message = "This screen should have appeared with a slide in from left transition"; + transitionType = TransitionType.inFromLeft; + } else if (key == "preset-fade") { + hexCode = "#F700D2"; + message = "This screen should have appeared with a fade in transition"; + transitionType = TransitionType.fadeIn; + } + Application.router.navigateTo(this.context, "/demo?message=$message&color_hex=$hexCode", + transition: transitionType); + } else { + hexCode = "#DFF700"; + message = "This screen should have appeared with a crazy custom transition"; + var transition = (BuildContext context, Animation animation, Animation secondaryAnimation, + Widget child) { + return new ScaleTransition( + scale: animation, + child: new RotationTransition( + turns: animation, + child: child, + ), + ); + }; + Application.router.navigateTo(this.context, "/demo?message=$message&color_hex=$hexCode", + transition: TransitionType.fadeIn, transitionBuilder: transition, + transitionDuration: const Duration(milliseconds: 600), + ); + } + } +} \ No newline at end of file diff --git a/example/lib/screens/test_screen_01.dart b/example/lib/screens/test_screen_01.dart new file mode 100644 index 0000000..fecb498 --- /dev/null +++ b/example/lib/screens/test_screen_01.dart @@ -0,0 +1,62 @@ +/* + * router + * A Posse Production + * http://goposse.com + * Copyright (c) 2017 Posse Productions LLC. All rights reserved. + * See LICENSE for distribution and usage details. + */ +import 'package:flutter/material.dart'; +import 'package:router_example/helpers/color_helpers.dart'; + +class TestScreen01 extends StatelessWidget { + + TestScreen01({String message = "Testing", Color color = const Color(0xFFFFFFFF)}) + : this.message = message, + this.color = color; + + final String message; + final Color color; + + @override + Widget build(BuildContext context) { + return new Material( + color: color, + child: new Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + new Image( + image: new AssetImage("assets/images/acc_boom.png"), + color: ColorHelpers.blackOrWhiteContrastColor(color), + width: 350.0, + ), + new Padding( + padding: new EdgeInsets.only(left: 50.0, right: 50.0, top: 15.0), + child: new Text( + message, + textAlign: TextAlign.center, + style: new TextStyle( + color: ColorHelpers.blackOrWhiteContrastColor(color), + height: 2.0, + ), + ), + ), + new Padding( + padding: new EdgeInsets.only(top: 15.0), + child: new FlatButton( + onPressed: () { + Navigator.pop(context); + }, + child: new Text( + "OK", + style: new TextStyle( + fontSize: 18.0, + color: ColorHelpers.blackOrWhiteContrastColor(color), + ), + ), + ), + ), + ], + ), + ); + } +} \ No newline at end of file diff --git a/example/pubspec.yaml b/example/pubspec.yaml new file mode 100644 index 0000000..7c2e762 --- /dev/null +++ b/example/pubspec.yaml @@ -0,0 +1,13 @@ +name: router_example +description: An example project for the flutter router. + +dependencies: + flutter: + sdk: flutter + router: + path: ../ +flutter: + uses-material-design: false + assets: + - assets/images/logo_fluro.png + - assets/images/acc_boom.png \ No newline at end of file diff --git a/example/router_example.iml b/example/router_example.iml new file mode 100644 index 0000000..9d5dae1 --- /dev/null +++ b/example/router_example.iml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lib/router.dart b/lib/router.dart index e9551eb..9039385 100644 --- a/lib/router.dart +++ b/lib/router.dart @@ -5,10 +5,10 @@ * Copyright (c) 2017 Posse Productions LLC. All rights reserved. * See LICENSE for distribution and usage details. */ -library router; +library fluro; import 'package:flutter/foundation.dart'; -import 'package:flutter/src/material/page.dart'; +import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; part 'src/common.dart'; diff --git a/lib/src/common.dart b/lib/src/common.dart index 9b4f1fd..b57d2d4 100644 --- a/lib/src/common.dart +++ b/lib/src/common.dart @@ -5,7 +5,7 @@ * Copyright (c) 2017 Posse Productions LLC. All rights reserved. * See LICENSE for distribution and usage details. */ -part of router; +part of fluro; /// typedef Route RouteCreator(RouteSettings route, Map parameters); diff --git a/lib/src/router.dart b/lib/src/router.dart index 8bee613..3580989 100644 --- a/lib/src/router.dart +++ b/lib/src/router.dart @@ -5,7 +5,7 @@ * Copyright (c) 2017 Posse Productions LLC. All rights reserved. * See LICENSE for distribution and usage details. */ -part of router; +part of fluro; enum TransitionType { native, diff --git a/lib/src/tree.dart b/lib/src/tree.dart index 578f658..724a6c3 100644 --- a/lib/src/tree.dart +++ b/lib/src/tree.dart @@ -5,7 +5,7 @@ * Copyright (c) 2017 Posse Productions LLC. All rights reserved. * See LICENSE for distribution and usage details. */ -part of router; +part of fluro; enum RouteTreeNodeType { component,