updates to the example project
This commit is contained in:
parent
12cb5317db
commit
a0776a51ce
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Flutter",
|
||||
"request": "launch",
|
||||
"type": "dart",
|
||||
"cwd" : "${workspaceRoot}/example",
|
||||
"program": "${workspaceRoot}/example/lib/main.dart"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Flutter",
|
||||
"request": "launch",
|
||||
"type": "dart"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -1,101 +1,42 @@
|
|||
// 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 plugin: 'kotlin-android'
|
||||
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'
|
||||
}
|
||||
apply from: "../config.gradle"
|
||||
apply from: "../flutter.gradle"
|
||||
|
||||
android {
|
||||
compileSdkVersion 25
|
||||
buildToolsVersion "$build_tools_ver"
|
||||
compileSdkVersion versions.targetSDK
|
||||
buildToolsVersion "${versions.buildTools}"
|
||||
|
||||
defaultConfig {
|
||||
minSdkVersion 19
|
||||
targetSdkVersion 25
|
||||
applicationId "com.goposse.routersample"
|
||||
versionCode currentVersionCode()
|
||||
versionName "$app_ver_name"
|
||||
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
lintOptions {
|
||||
disable 'InvalidPackage'
|
||||
}
|
||||
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
|
||||
}
|
||||
}
|
||||
defaultConfig {
|
||||
minSdkVersion versions.minSDK
|
||||
targetSdkVersion versions.targetSDK
|
||||
applicationId "$appInfo.applicationID"
|
||||
versionCode appInfo.build
|
||||
versionName "${appInfo.version}"
|
||||
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
lintOptions {
|
||||
disable 'InvalidPackage'
|
||||
}
|
||||
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'
|
||||
compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
|
||||
compile fileTree(dir: 'libs', include: ['*.jar'])
|
||||
// kotlin
|
||||
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${versions.kotlin}"
|
||||
// google
|
||||
compile "com.android.support:appcompat-v7:${versions.googleSupport}"
|
||||
compile "com.android.support:support-v13:${versions.googleSupport}"
|
||||
compile "com.android.support:support-v4:${versions.googleSupport}"
|
||||
// testing
|
||||
androidTestCompile "com.android.support:support-annotations:${versions.googleSupport}"
|
||||
androidTestCompile 'com.android.support.test:runner:1.0.1'
|
||||
androidTestCompile 'com.android.support.test:rules:1.0.1'
|
||||
}
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.goposse.routersample">
|
||||
package="com.goposse.fluro">
|
||||
|
||||
<!-- needed for flutter development tools -->
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
|
||||
<application
|
||||
android:name=".App"
|
||||
android:name="com.goposse.fluro.App"
|
||||
android:allowBackup="false"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/appName">
|
||||
<activity
|
||||
android:name=".activities.MainActivity"
|
||||
android:name="com.goposse.fluro.activities.MainActivity"
|
||||
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection"
|
||||
android:hardwareAccelerated="true"
|
||||
android:theme="@android:style/Theme.Black.NoTitleBar"
|
||||
|
@ -23,7 +23,7 @@
|
|||
<action android:name="android.intent.action.VIEW" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
<data android:host="link" android:scheme="fluro" />
|
||||
<data android:host="deeplink" android:scheme="fluro" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
</application>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package com.goposse.routersample
|
||||
package com.goposse.fluro
|
||||
|
||||
import io.flutter.app.FlutterApplication
|
||||
|
|
@ -1,43 +1,33 @@
|
|||
package com.goposse.routersample.activities
|
||||
package com.goposse.fluro.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.GeneratedPluginRegistrant
|
||||
|
||||
class MainActivity : FlutterActivity() {
|
||||
|
||||
private val LOG_TAG = "A:Main"
|
||||
private var deepLinkChannel: MethodChannel? = null
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
GeneratedPluginRegistrant.registerWith(this)
|
||||
deepLinkChannel = MethodChannel(flutterView, Channels.DEEP_LINK_RECEIVED)
|
||||
checkForLinkEvent(intent)
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
checkForLinkEvent(intent)
|
||||
}
|
||||
|
||||
private fun checkForLinkEvent(intent: Intent) {
|
||||
if (intent.action == Intent.ACTION_VIEW && intent.data != null) {
|
||||
val path = intent.data.getQueryParameter("path")
|
||||
val query = intent.data.getQueryParameter("query")
|
||||
val text = intent.data.getQueryParameter("message") ?: "Why you don't enter text?"
|
||||
if (path != null) {
|
||||
val passedObjs = mutableMapOf<String, Any>("path" to path)
|
||||
if (query != null) {
|
||||
passedObjs["query"] = query
|
||||
}
|
||||
deepLinkChannel?.invokeMethod("linkReceived", passedObjs)
|
||||
Log.d(LOG_TAG, "Sent message to flutter: linkReceived=$path")
|
||||
Log.d(LOG_TAG, "Setting initial route to: $path?message=$text")
|
||||
flutterView.setInitialRoute("$path?message=$text")
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package com.goposse.routersample.constants
|
||||
package com.goposse.fluro.constants
|
||||
|
||||
object Channels {
|
||||
private val CHANNEL_PREFIX = "channel:com.goposse.routersample"
|
|
@ -1,21 +1,20 @@
|
|||
buildscript {
|
||||
ext.kotlin_version = '1.1.3-2'
|
||||
ext.kotlin_version = '1.2.30'
|
||||
repositories {
|
||||
google()
|
||||
jcenter()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:2.3.3'
|
||||
classpath 'com.android.tools.build:gradle:3.0.1'
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
}
|
||||
}
|
||||
|
||||
allprojects {
|
||||
repositories {
|
||||
google()
|
||||
jcenter()
|
||||
maven {
|
||||
url "https://maven.google.com"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
ext.appInfo = [
|
||||
version: '1.3.0',
|
||||
build: 1,
|
||||
applicationID: "com.goposse.fluro"
|
||||
]
|
||||
|
||||
ext.versions = [
|
||||
minSDK: 21,
|
||||
targetSDK: 27,
|
||||
buildTools: '27.0.3',
|
||||
kotlin: '1.2.30',
|
||||
googleSupport: '27.1.0'
|
||||
]
|
|
@ -0,0 +1,22 @@
|
|||
// Flutter root path helper
|
||||
ext.flutterRoot = {
|
||||
def flutterProperties = new Properties()
|
||||
def flutterPropertiesFile = rootProject.file('local.properties')
|
||||
if (!flutterPropertiesFile.exists()) {
|
||||
throw new GradleException("Flutter properties file not found. Define a flutter.properties file in your project root.")
|
||||
}
|
||||
flutterPropertiesFile.withInputStream { stream ->
|
||||
flutterProperties.load(stream)
|
||||
}
|
||||
def flutterRoot = flutterProperties.getProperty('flutter.sdk')
|
||||
if (flutterRoot == null) {
|
||||
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the flutter.properties file.")
|
||||
}
|
||||
return flutterRoot
|
||||
}
|
||||
|
||||
apply from: "${flutterRoot()}/packages/flutter_tools/gradle/flutter.gradle"
|
||||
|
||||
flutter {
|
||||
source '../..'
|
||||
}
|
|
@ -7,7 +7,6 @@
|
|||
*/
|
||||
import '../../config/application.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:fluro/fluro.dart';
|
||||
import '../../config/routes.dart';
|
||||
import '../home/home_component.dart';
|
||||
|
@ -22,38 +21,24 @@ class AppComponent extends StatefulWidget {
|
|||
|
||||
class AppComponentState extends State<AppComponent> {
|
||||
|
||||
static MethodChannel platform = const MethodChannel('channel:com.goposse.routersample/deeplink');
|
||||
|
||||
AppComponentState() {
|
||||
final router = new Router();
|
||||
Routes.configureRoutes(router);
|
||||
Application.router = router;
|
||||
configureDeepLinker();
|
||||
print("Configured channel receiver in flutter ..");
|
||||
}
|
||||
|
||||
|
||||
void configureDeepLinker() {
|
||||
platform.setMethodCallHandler((MethodCall call) async {
|
||||
if (call.method == "linkReceived") {
|
||||
Map<String, dynamic> passedObjs = call.arguments;
|
||||
if (passedObjs != null) {
|
||||
var path = passedObjs["path"];
|
||||
Application.router.navigateTo(context, path);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return new MaterialApp(
|
||||
title: 'Flutter Demo',
|
||||
final app = new MaterialApp(
|
||||
title: 'Fluro',
|
||||
theme: new ThemeData(
|
||||
primarySwatch: Colors.blue,
|
||||
),
|
||||
home: new HomeComponent(),
|
||||
onGenerateRoute: Application.router.generator
|
||||
);
|
||||
print("initial route = ${app.initialRoute}");
|
||||
return app;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
class DemoResultComponent extends StatefulWidget {
|
||||
@override
|
||||
_DemoResultComponentState createState() => new _DemoResultComponentState();
|
||||
}
|
||||
|
||||
class _DemoResultComponentState extends State<DemoResultComponent> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return new Container(
|
||||
|
||||
);
|
||||
}
|
||||
}
|
|
@ -21,7 +21,7 @@ class HomeComponent extends StatefulWidget {
|
|||
class HomeComponentState extends State<HomeComponent> {
|
||||
|
||||
var _deepLinkOpacity = 1.0;
|
||||
final _deepLinkURL = "fluro://deeplink?path=/message&text=fluro%20rocks%21%21";
|
||||
final _deepLinkURL = "fluro://deeplink?path=/message&mesage=fluro%20rocks%21%21";
|
||||
final _daysOfWeek = const [
|
||||
"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
|
||||
];
|
||||
|
|
|
@ -7,10 +7,15 @@
|
|||
*/
|
||||
import '../helpers/color_helpers.dart';
|
||||
import '../components/demo/demo_simple_component.dart';
|
||||
import '../components/home/home_component.dart';
|
||||
import 'package:flutter/painting.dart';
|
||||
import 'package:fluro/fluro.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
var rootHandler = new Handler(handlerFunc: (BuildContext context, Map<String, List<String>> params) {
|
||||
return new HomeComponent();
|
||||
});
|
||||
|
||||
var demoRouteHandler = new Handler(handlerFunc: (BuildContext context, Map<String, List<String>> params) {
|
||||
String message = params["message"]?.first;
|
||||
String colorHex = params["color_hex"]?.first;
|
||||
|
@ -53,4 +58,17 @@ var demoFunctionHandler = new Handler(
|
|||
);
|
||||
});
|
||||
|
||||
var deepLinkHandler = new Handler(handlerFunc: (BuildContext context, Map<String, List<String>> params) {});
|
||||
/// Handles deep links into the app
|
||||
/// To test on Android:
|
||||
///
|
||||
/// `adb shell am start -W -a android.intent.action.VIEW -d "fluro://deeplink?path=/message&mesage=fluro%20rocks%21%21" com.goposse.fluro`
|
||||
var deepLinkHandler = new Handler(handlerFunc: (BuildContext context, Map<String, List<String>> params) {
|
||||
String message = params["message"]?.first;
|
||||
String colorHex = params["color_hex"]?.first;
|
||||
String result = params["result"]?.first;
|
||||
Color color = new Color(0xFFFFFFFF);
|
||||
if (colorHex != null && colorHex.length > 0) {
|
||||
color = new Color(ColorHelpers.fromHexString(colorHex));
|
||||
}
|
||||
return new DemoSimpleComponent(message: "DEEEEEP LINK!!!", color: color, result: result);
|
||||
});
|
||||
|
|
|
@ -6,15 +6,21 @@
|
|||
* See LICENSE for distribution and usage details.
|
||||
*/
|
||||
import 'package:fluro/fluro.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import './route_handlers.dart';
|
||||
|
||||
class Routes {
|
||||
|
||||
static String root = "/";
|
||||
static String demoSimple = "/demo";
|
||||
static String demoFunc = "/demo/func";
|
||||
static String deepLink = "/message";
|
||||
|
||||
static void configureRoutes(Router router) {
|
||||
router.notFoundHandler = new Handler(handlerFunc: (BuildContext context, Map<String, List<String>> params) {
|
||||
print("ROUTE WAS NOT FOUND !!!");
|
||||
});
|
||||
router.define(root, handler: rootHandler);
|
||||
router.define(demoSimple, handler: demoRouteHandler);
|
||||
router.define(demoFunc, handler: demoFunctionHandler);
|
||||
router.define(deepLink, handler: deepLinkHandler);
|
||||
|
|
Loading…
Reference in New Issue