Skip to content
Snippets Groups Projects
app.dart 1.87 KiB
Newer Older
  • Learn to ignore specific revisions
  • igorwork's avatar
    igorwork committed
    // 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 = "";
    
      // 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) {
    
    igorwork's avatar
    igorwork committed
        log("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) {
        return MaterialApp(
    
          title: 'Vereign',
    
    igorwork's avatar
    igorwork committed
          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,
              setMode: setMode
    
    igorwork's avatar
    igorwork committed
        );
      }
    }