Skip to content
Snippets Groups Projects
home.dart 5.78 KiB
import 'package:flutter/material.dart';
import 'package:flutter_web_browser/flutter_web_browser.dart';
import 'package:flutter_app_auth_wrapper/flutter_app_auth_wrapper.dart';
import 'package:url_launcher/url_launcher.dart';
import 'dart:developer';
import 'dart:convert';
import 'dart:async';
import 'package:shared_preferences/shared_preferences.dart';

import '../../config.dart';
import '../app.dart';

class Home extends StatefulWidget {
  Home({
    @required this.mode,
    @required this.invokerURL,
    @required this.host,
  });

  final AppMode mode;
  final String invokerURL;
  final String host;

  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
  String _host = Config.appFlavor == Flavor.DEVELOPMENT ? Config.HOSTS[0] : Config.DEFAULT_APP_HOST;
  bool _hidden = true;

  Screen _currentScreen = Screen.App;

  @override
  initState() {
    super.initState();

    // Set up initial host
    if (widget.host != null) {
      setState(() {
        _host = widget.host;
      });
    }

    setScreenByMode(widget.mode);

    FlutterAppAuthWrapper.eventStream().listen((data) {
      var token = json.decode(data.toString())["access_token"];
      _showAlert(token);
      setScreen(Screen.App);
    }, onError: (error) {
      log("Err $error");
      setScreen(Screen.App);
    });

    Timer(
        Duration(seconds: 3),
        () {
          setState(() {
            _hidden = false;
          });
        }
    );
  }

  setScreen(Screen screen) {
    if (
      _currentScreen == screen &&
      screen != Screen.Dashboard // ATM we can not determine whether dashboard was closed or not, so we avoid this case
    ) {