Skip to content
Snippets Groups Projects
app.dart 1.78 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;
    
    
    igorwork's avatar
    igorwork committed
      String _appMode = "app";
    
      // 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) {
        log("Uri ${uri}");
    
        if (uri?.path == "/oauth2") {
          setState(() {
            _appMode = "oauth";
    
            _invokerURL = uri.queryParameters["callbackUrl"];
    
          });
        } else {
          setState(() {
            _appMode = "app";
          });
        }
      }
    
    
    igorwork's avatar
    igorwork committed
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Web Views',
          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
    
    igorwork's avatar
    igorwork committed
        );
      }
    }