Skip to content
Snippets Groups Projects
app.dart 2.64 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';
    
    Markin Igor's avatar
    Markin Igor committed
    import 'package:shared_preferences/shared_preferences.dart';
    
    
    import 'package:uni_links/uni_links.dart';
    
    
    enum AppMode {
      Default,
      Authorization,
    }
    
    enum Screen {
      App,
      OAuth,
      Dashboard
    }
    
    
    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;
    
    
      /// "Default" when you open app, "Authorization" when app initiated
      /// from third party app
      AppMode _appMode;
    
      // 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 {
    
    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(() {
    
    igorwork's avatar
    igorwork committed
            _invokerURL = uri.queryParameters["invokerUrl"];
    
          });
        } else {
          setState(() {
    
    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,
    
    Markin Igor's avatar
    Markin Igor committed
            host: widget.initialHost
    
    Markin Igor's avatar
    Markin Igor committed
          )
    
    igorwork's avatar
    igorwork committed
        );
      }
    }