| // 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:flutter/services.dart'; |
| |
| import 'components/main_route.dart' show MainRoute; |
| import 'components/settings_route.dart' show SettingsRoute; |
| import 'logic/croupier.dart' show Croupier; |
| import 'settings/client.dart' as settings_client; |
| import 'sound/sound_assets.dart'; |
| import 'styles/common.dart' as style; |
| |
| class CroupierApp extends StatefulComponent { |
| settings_client.AppSettings appSettings; |
| SoundAssets sounds; |
| CroupierApp(this.appSettings, this.sounds); |
| |
| CroupierAppState createState() => new CroupierAppState(); |
| } |
| |
| class CroupierAppState extends State<CroupierApp> { |
| Croupier croupier; |
| |
| void initState() { |
| super.initState(); |
| this.croupier = new Croupier(config.appSettings); |
| } |
| |
| Widget build(BuildContext context) { |
| return new MaterialApp( |
| title: 'Croupier', |
| routes: <String, RouteBuilder>{ |
| "/": (RouteArguments args) => new MainRoute(croupier, config.sounds), |
| "/settings": (RouteArguments args) => new SettingsRoute(croupier) |
| }, |
| theme: style.theme); |
| } |
| } |
| |
| AssetBundle _initBundle() { |
| // Note: Code was copied from parts of Flutter that load assets like sound. |
| // rootBundle comes from flutter/services.dart |
| if (rootBundle != null) return rootBundle; |
| return new NetworkAssetBundle(new Uri.directory(Uri.base.origin)); |
| } |
| |
| Future<SoundAssets> loadAudio() async { |
| final AssetBundle _bundle = _initBundle(); |
| SoundAssets _sounds = new SoundAssets(_bundle); |
| |
| // Load sounds in parallel. |
| await Future.wait([_sounds.load("whooshIn"), _sounds.load("whooshOut")]); |
| return _sounds; |
| } |
| |
| void main() { |
| // TODO(alexfandrianto): Perhaps my app will run better if I initialize more |
| // things here instead of in Croupier. I added this 500 ms delay because the |
| // tablet was sometimes not rendering without it (repainting too early?). |
| new Future.delayed(const Duration(milliseconds: 500), () async { |
| runApp(new CroupierApp( |
| await settings_client.getSettings(), await loadAudio())); |
| }); |
| } |