diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 79e400fefe3d0cf9b2093aa967de010e8656bbbe..3029b69607c3bf19b6906f35f6dd4c8fa1996a01 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -28,6 +28,15 @@ <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> + + <intent-filter> + <action android:name="android.intent.action.VIEW" /> + <category android:name="android.intent.category.DEFAULT" /> + <category android:name="android.intent.category.BROWSABLE" /> + <data + android:scheme="vereign" + android:host="app.vereign.com" /> + </intent-filter> </activity> </application> </manifest> diff --git a/deps/flutter_web_browser b/deps/flutter_web_browser index ff8f72e84690d36c0e2dd95e3463a30bf8a1e4cd..4a4ca60794496b2dbf5bf7eb1f345038619b7855 160000 --- a/deps/flutter_web_browser +++ b/deps/flutter_web_browser @@ -1 +1 @@ -Subproject commit ff8f72e84690d36c0e2dd95e3463a30bf8a1e4cd +Subproject commit 4a4ca60794496b2dbf5bf7eb1f345038619b7855 diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 76a36accece6d93afbc051d1ab02dd5114ecf2f2..8f153a0193f9fd66ec99cc1773a2776c0a928663 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -2,20 +2,26 @@ PODS: - Flutter (1.0.0) - flutter_web_browser (0.11.0): - Flutter + - uni_links (0.0.1): + - Flutter DEPENDENCIES: - Flutter (from `.symlinks/flutter/ios`) - flutter_web_browser (from `.symlinks/plugins/flutter_web_browser/ios`) + - uni_links (from `.symlinks/plugins/uni_links/ios`) EXTERNAL SOURCES: Flutter: :path: ".symlinks/flutter/ios" flutter_web_browser: :path: ".symlinks/plugins/flutter_web_browser/ios" + uni_links: + :path: ".symlinks/plugins/uni_links/ios" SPEC CHECKSUMS: Flutter: 58dd7d1b27887414a370fcccb9e645c08ffd7a6a flutter_web_browser: bdea232160dec44dec86540bee05168cc844ef7c + uni_links: d97da20c7701486ba192624d99bffaaffcfc298a PODFILE CHECKSUM: 7fb83752f59ead6285236625b82473f90b1cb932 diff --git a/lib/app.dart b/lib/app.dart index 2a26a43b82a46f0f7ba0ecb43f5d4a85138a26ca..e30e685a6029905a821569a055989ce7f651b9b4 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -1,7 +1,68 @@ // app.dart import 'package:flutter/material.dart'; import 'screens/home.dart'; -class App extends StatelessWidget { +import 'package:flutter/services.dart'; + +import 'dart:async'; +import 'dart:developer'; + +import 'package:uni_links/uni_links.dart'; +import 'package:flutter_web_browser/flutter_web_browser.dart'; + +class App extends StatefulWidget { + @override + _AppState createState() => _AppState(); +} + +class _AppState extends State<App> { + StreamSubscription _sub; + + String _appMode = "oauth"; + + @override + initState() { + super.initState(); + initUniLinks(); + } + + @override + dispose() { + if (_sub != null) _sub.cancel(); + super.dispose(); + } + + Future<Null> initUniLinks() async { + Uri initialUri; + + try { + initialUri = await getInitialUri(); + } on PlatformException { + initialUri = null; + } on FormatException { + initialUri = null; + } + updateAppMode(initialUri); + + _sub = getUriLinksStream().listen((Uri uri) { + updateAppMode(uri); + }, onError: (err) { + log('got err: $err'); + }); + } + + updateAppMode(uri) { + + if (uri?.path == "/oauth2") { + setState(() { + _appMode = "oauth"; + }); + } else { + setState(() { + _appMode = "app"; + }); + } + } + @override Widget build(BuildContext context) { return MaterialApp( @@ -12,7 +73,12 @@ class App extends StatelessWidget { textTheme: TextTheme( button: TextStyle(color: Colors.white, fontSize: 18.0), title: TextStyle(color: Colors.red))), - home: Home(), + home: new Scaffold( + appBar: new AppBar(), + body: Home( + mode: _appMode + ) + ), ); } } \ No newline at end of file diff --git a/lib/screens/home.dart b/lib/screens/home.dart index 968442053ebb5c3060e5a2559a71bf9a3f95ece7..03a2e4c0951faceff5f4ad24cad0aca4a2cb050f 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -1,8 +1,43 @@ import 'package:flutter/material.dart'; import 'package:flutter_web_browser/flutter_web_browser.dart'; +import 'dart:developer'; + +class Home extends StatefulWidget { + Home({@required this.mode}); + final String mode; + + @override + _HomeState createState() => _HomeState(); +} + +class _HomeState extends State<Home> { + final _links = ['vereign://app.vereign.com', 'vereign://app.vereign.com/oauth2', 'https://rosengeorgiev.dev.vereign.com', 'https://igormarkin.dev.vereign.com', 'https://gospodinbodurov.dev.vereign.com']; + + @override + initState() { + super.initState(); + showMode(widget.mode); + } + + @override + void didUpdateWidget(Home oldWidget) { + // this method IS called when parent widget passes new "props" + // unlike React, this method IS called _before_ the build + // unlike React, this method ISN'T called after setState() + if (widget.mode != oldWidget.mode) { + showMode(widget.mode); + } + super.didUpdateWidget(oldWidget); + } + + showMode(mode) { + if (mode == "app") { + FlutterWebBrowser.openWebPage(url: 'https://app.vereign.com', androidToolbarColor: Colors.deepPurple); + } else if (mode == "oauth") { + FlutterWebBrowser.openWebPage(url: 'https://app.vereign.com/oauth2', androidToolbarColor: Colors.deepPurple); + } + } -class Home extends StatelessWidget { - final _links = ['https://app.vereign.com', 'https://integration.vereign.com', 'https://rosengeorgiev.dev.vereign.com', 'https://igormarkin.dev.vereign.com', 'https://gospodinbodurov.dev.vereign.com']; @override Widget build(BuildContext context) { return Scaffold( diff --git a/pubspec.lock b/pubspec.lock index e1081eb5c9f15c5024ef98e05156c89876f2343c..a1284b9ce4008fc518063b21d3c2738ee3e3fdb8 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -142,6 +142,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.1.6" + uni_links: + dependency: "direct main" + description: + name: uni_links + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.0" vector_math: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index fa896f6eb45a8fb0d684516f2022f61bce6cdfc8..4dd4aa04e7c7a030e1771e3a0ac76903654357d1 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -25,6 +25,7 @@ dependencies: flutter_web_browser: # Use path: ./deps/flutter_web_browser + uni_links: 0.2.0 dev_dependencies: flutter_test: