| // Copyright 2015 The Vanadium 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 'dart:async'; |
| |
| import 'package:flutter/material.dart'; |
| import 'package:logging/logging.dart'; |
| |
| import 'components/deckgrid.dart'; |
| import 'stores/store.dart'; |
| import 'styles/common.dart' as style; |
| import 'utils/back_button.dart' as backButtonUtil; |
| import 'utils/image_provider.dart' as imageProvider; |
| |
| NavigatorState _navigator; |
| final Completer storeStatus = new Completer(); |
| |
| void main() { |
| Store store = new Store.singleton(); |
| store.init().then((_) { |
| storeStatus.complete(); |
| }); |
| _initLogging(); |
| _initBackButtonHandler(); |
| |
| runApp(new MaterialApp( |
| theme: style.theme, |
| title: 'SyncSlides', |
| routes: {'/': (RouteArguments args) => new LandingPage()})); |
| } |
| |
| class LandingPage extends StatefulComponent { |
| _LandingPage createState() => new _LandingPage(); |
| } |
| |
| class _LandingPage extends State<LandingPage> { |
| bool _initialized = false; |
| |
| @override |
| void initState() { |
| if (storeStatus.isCompleted) { |
| _initialized = true; |
| } else { |
| storeStatus.future.then((_) { |
| setState(() { |
| _initialized = true; |
| }); |
| }); |
| } |
| } |
| |
| Widget build(BuildContext context) { |
| if (!_initialized) { |
| return _buildSplashScreen(); |
| } |
| _navigator = context.ancestorStateOfType(NavigatorState); |
| return new DeckGridPage(); |
| } |
| |
| Widget _buildSplashScreen() { |
| var stack = new Stack([ |
| new AsyncImage( |
| provider: imageProvider.splashBackgroundImageProvider, |
| fit: ImageFit.cover), |
| new Row([ |
| new AsyncImage( |
| provider: imageProvider.splashFlutterImageProvider, |
| width: style.Size.splashLogo), |
| new AsyncImage( |
| provider: imageProvider.splashVanadiumImageProvider, |
| width: style.Size.splashLogo) |
| ], justifyContent: FlexJustifyContent.center), |
| new Container( |
| child: new Row( |
| [new Text('Loading SyncSlides...', style: style.Text.splash)], |
| alignItems: FlexAlignItems.end, |
| justifyContent: FlexJustifyContent.center), |
| padding: style.Spacing.normalPadding) |
| ]); |
| return stack; |
| } |
| } |
| |
| void _initLogging() { |
| Logger.root.level = Level.ALL; |
| Logger.root.onRecord.listen((LogRecord rec) { |
| print('\nSyncSlides: ${rec.time}: ${rec.message}'); |
| }); |
| } |
| |
| void _initBackButtonHandler() { |
| backButtonUtil.onBackButton(() { |
| if (_navigator != null && _navigator.canPop()) { |
| bool returnValue; |
| _navigator.openTransaction((NavigatorTransaction transaction) { |
| returnValue = transaction.pop(null); |
| }); |
| return returnValue; |
| } |
| |
| // Tell the app to exit. |
| return false; |
| }); |
| } |