Skip to content
Snippets Groups Projects
app.dart 2.36 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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';
    
    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;
        }
    
        return new MainApp(initialUri: initialUri);
      }
    
    
      @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 });
      final Uri initialUri;
    
    
    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"];
    
            _host = uri.queryParameters["host"];
    
          });
        } 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,
            host: _host
          )
    
    igorwork's avatar
    igorwork committed
        );
      }
    }