// app.dart import 'screens/splashscreen.dart'; import 'package:flutter/material.dart'; import 'screens/home.dart'; import 'package:flutter/services.dart'; import 'dart:async'; import 'dart:developer'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:uni_links/uni_links.dart'; class App extends StatelessWidget { Future<Widget> initApplication() async { Uri initialUri; try { initialUri = await getInitialUri(); } on PlatformException { initialUri = null; } on FormatException { initialUri = null; } final prefs = await SharedPreferences.getInstance(); final host = prefs.getString('host'); return new MainApp(initialUri: initialUri, initialHost: host); } @override Widget build(BuildContext context) { return MaterialApp( title: 'Vereign', theme: ThemeData( primaryColor: Color(0xFFd51d32), fontFamily: "Arial", textTheme: TextTheme( button: TextStyle(color: Colors.white, fontSize: 18.0), title: TextStyle(color: Colors.red))), home: new SplashScreen( navigateAfterFuture: initApplication, ) ); } } class MainApp extends StatefulWidget { MainApp({ @required this.initialUri, this.initialHost }); final Uri initialUri; final String initialHost; @override _MainAppState createState() => _MainAppState(); } class _MainAppState extends State<MainApp> { StreamSubscription _sub; String _appMode = ""; // Url of the app which invoked OAuth String _invokerURL; String _host; @override initState() { super.initState(); initUniLinks(); } @override dispose() { if (_sub != null) _sub.cancel(); super.dispose(); } Future<Null> initUniLinks() async { updateAppMode(widget.initialUri); _sub = getUriLinksStream().listen((Uri uri) { updateAppMode(uri); }, onError: (err) { log('got err: $err'); }); } updateAppMode(Uri uri) { if (uri?.path == "/authorize") { setState(() { _appMode = "oauth"; _invokerURL = uri.queryParameters["invokerUrl"]; }); } else { setState(() { _appMode = "app"; }); } } setMode(String mode) { setState(() { _appMode = mode; }); } @override Widget build(BuildContext context) { return new Scaffold( appBar: new AppBar(title: Text("Vereign")), body: Home( mode: _appMode, invokerURL: _invokerURL, setMode: setMode, host: widget.initialHost ) ); } }