Skip to content
Snippets Groups Projects
app.dart 2.55 KiB
Newer Older
igorwork's avatar
igorwork committed
// app.dart
Markin Igor's avatar
Markin Igor committed
import 'screens/splashscreen.dart';
igorwork's avatar
igorwork committed
import 'package:flutter/material.dart';
import 'screens/home.dart';
import 'package:flutter/services.dart';
import 'dart:async';
import 'dart:developer';
Markin Igor's avatar
Markin Igor committed
import 'package:shared_preferences/shared_preferences.dart';

import 'package:uni_links/uni_links.dart';

Markin Igor's avatar
Markin Igor committed
class App extends StatelessWidget {
Markin Igor's avatar
Markin Igor committed
  Future<Widget> initApplication() async {
    Uri initialUri;

    try {
      initialUri = await getInitialUri();
    } on PlatformException {
      initialUri = null;
    } on FormatException {
      initialUri = null;
    }

Markin Igor's avatar
Markin Igor committed
    final prefs = await SharedPreferences.getInstance();
    final host = prefs.getString('host');

    return new MainApp(initialUri: initialUri, initialHost: host);
  @override
Markin Igor's avatar
Markin Igor committed
  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(
Markin Igor's avatar
Markin Igor committed
          navigateAfterFuture: initApplication,
Markin Igor's avatar
Markin Igor committed
        )
    );


  }
}

class MainApp extends StatefulWidget {
Markin Igor's avatar
Markin Igor committed
  MainApp({ @required this.initialUri, this.initialHost });
Markin Igor's avatar
Markin Igor committed
  final Uri initialUri;
Markin Igor's avatar
Markin Igor committed
  final String initialHost;
Markin Igor's avatar
Markin Igor committed
  @override
  _MainAppState createState() => _MainAppState();
Markin Igor's avatar
Markin Igor committed
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 {
Markin Igor's avatar
Markin Igor committed
    updateAppMode(widget.initialUri);

    _sub = getUriLinksStream().listen((Uri uri) {
      updateAppMode(uri);
    }, onError: (err) {
      log('got err: $err');
    });
  }

  updateAppMode(Uri uri) {
igorwork's avatar
igorwork committed
    if (uri?.path == "/authorize") {
      setState(() {
        _appMode = "oauth";
igorwork's avatar
igorwork committed
        _invokerURL = uri.queryParameters["invokerUrl"];
      });
    } else {
      setState(() {
        _appMode = "app";
      });
    }
  }

  setMode(String mode) {
    setState(() {
      _appMode = mode;
    });
  }

igorwork's avatar
igorwork committed
  @override
  Widget build(BuildContext context) {
Markin Igor's avatar
Markin Igor committed
    return new Scaffold(
      appBar: new AppBar(title: Text("Vereign")),
      body: Home(
        mode: _appMode,
        invokerURL: _invokerURL,
        setMode: setMode,
Markin Igor's avatar
Markin Igor committed
        host: widget.initialHost
Markin Igor's avatar
Markin Igor committed
      )
igorwork's avatar
igorwork committed
    );
  }
}