blob: 4f271c2e7608a585f8e8ceabcfa7f01fa6ff8b03 [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library stocks;
import 'dart:math' as math;
import 'dart:sky' as sky;
import 'package:sky/editing/input.dart';
import 'package:sky/theme/colors.dart' as colors;
import 'package:sky/theme/typography.dart' as typography;
import 'package:sky/widgets.dart';
import 'stock_data.dart';
part 'stock_arrow.dart';
part 'stock_home.dart';
part 'stock_list.dart';
part 'stock_menu.dart';
part 'stock_row.dart';
part 'stock_settings.dart';
part 'stock_types.dart';
class StocksApp extends App {
NavigationState _navigationState;
void initState() {
_navigationState = new NavigationState([
new Route(
name: '/',
builder: (navigator, route) => new StockHome(navigator, _stocks, optimismSetting, modeUpdater)
),
new Route(
name: '/settings',
builder: (navigator, route) => new StockSettings(navigator, optimismSetting, backupSetting, settingsUpdater)
),
]);
super.initState();
}
void onBack() {
if (_navigationState.hasPrevious()) {
setState(() {
_navigationState.pop();
});
} else {
super.onBack();
}
}
StockMode optimismSetting = StockMode.optimistic;
BackupMode backupSetting = BackupMode.disabled;
void modeUpdater(StockMode optimism) {
setState(() {
optimismSetting = optimism;
});
}
void settingsUpdater({ StockMode optimism, BackupMode backup }) {
setState(() {
if (optimism != null)
optimismSetting = optimism;
if (backup != null)
backupSetting = backup;
});
}
final List<Stock> _stocks = [];
void didMount() {
super.didMount();
new StockDataFetcher((StockData data) {
setState(() {
data.appendTo(_stocks);
});
});
}
Widget build() {
ThemeData theme;
if (optimismSetting == StockMode.optimistic) {
theme = new ThemeData(
brightness: ThemeBrightness.light,
primarySwatch: colors.Purple
);
} else {
theme = new ThemeData(
brightness: ThemeBrightness.dark,
accentColor: colors.RedAccent[200]
);
}
return new Theme(
data: theme,
child: new DefaultTextStyle(
style: typography.error, // if you see this, you've forgotten to correctly configure the text style!
child: new Title(
title: 'Stocks',
child: new Navigator(_navigationState)
)
)
);
}
}
void main() {
runApp(new StocksApp());
}