// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'package:flutter/material.dart';
import 'package:fuchsia_services/services.dart';
import 'package:fuchsia_scenic_flutter/child_view.dart' show ChildView;
import 'package:webview/webview.dart';
import 'src/blocs/browser_bloc.dart';
import 'src/widgets/navigation_bar.dart';

class App extends StatefulWidget {
  @override
  State<App> createState() => AppState();
}

class AppState extends State<App> {
  BrowserBloc _browserBloc;
  ChromiumWebView _webView;

  AppState() {
    _webView = ChromiumWebView(
      StartupContext.fromStartupInfo().environmentServices,
    );
    _browserBloc = BrowserBloc(webView: _webView);
  }

  @override
  void dispose() {
    _browserBloc.dispose();
    _webView.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Browser',
      home: Scaffold(
        backgroundColor: Colors.grey,
        body: Container(
          child: Column(
            children: <Widget>[
              NavigationBar(bloc: _browserBloc),
              Expanded(
                child: ChildView(
                  connection: _webView.childViewConnection,
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
