// app.dart import 'package:flutter/material.dart'; import 'screens/home.dart'; import 'package:flutter/services.dart'; import 'dart:async'; import 'dart:developer'; import 'package:uni_links/uni_links.dart'; class App extends StatefulWidget { @override _AppState createState() => _AppState(); } class _AppState extends State<App> { StreamSubscription _sub; String _appMode = "app"; // Url of the app which invoked OAuth String _invokerURL; @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 uri) { log("Uri ${uri}"); if (uri?.path == "/oauth2") { setState(() { _appMode = "oauth"; _invokerURL = uri.queryParameters["callbackUrl"]; }); } else { setState(() { _appMode = "app"; }); } } @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Web Views', theme: ThemeData( primarySwatch: Colors.blue, fontFamily: "Arial", textTheme: TextTheme( button: TextStyle(color: Colors.white, fontSize: 18.0), title: TextStyle(color: Colors.red))), home: new Scaffold( appBar: new AppBar(), body: Home( mode: _appMode, invokerURL: _invokerURL ) ), ); } }