blob: a70739b93eac3df8506d440629d398b1d75d624f [file] [log] [blame]
Collin Jackson633b6502015-07-16 11:54:25 -07001// Copyright 2015 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Jim Simon30896862015-07-24 10:53:34 -07005library stocks;
6
Hixiea3ae46b2015-09-14 13:35:05 -07007import 'dart:async';
Jim Simon30896862015-07-24 10:53:34 -07008import 'dart:math' as math;
9import 'dart:sky' as sky;
10
Adam Barthb356d142015-09-06 15:38:26 -070011import 'package:sky/animation.dart';
Adam Barth4467a262015-09-18 09:49:20 -070012import 'package:sky/material.dart';
Adam Barthe7bd46b2015-08-03 15:09:49 -070013import 'package:sky/widgets.dart';
Jim Simon30896862015-07-24 10:53:34 -070014
Hixiedb638502015-07-24 14:42:36 -070015import 'stock_data.dart';
16
Jim Simon30896862015-07-24 10:53:34 -070017part 'stock_arrow.dart';
Jim Simon30896862015-07-24 10:53:34 -070018part 'stock_home.dart';
19part 'stock_list.dart';
20part 'stock_menu.dart';
21part 'stock_row.dart';
22part 'stock_settings.dart';
23part 'stock_types.dart';
Collin Jackson633b6502015-07-16 11:54:25 -070024
25class StocksApp extends App {
26
27 NavigationState _navigationState;
28
29 void initState() {
30 _navigationState = new NavigationState([
31 new Route(
32 name: '/',
33 builder: (navigator, route) => new StockHome(navigator, _stocks, optimismSetting, modeUpdater)
34 ),
35 new Route(
36 name: '/settings',
37 builder: (navigator, route) => new StockSettings(navigator, optimismSetting, backupSetting, settingsUpdater)
38 ),
39 ]);
40 super.initState();
41 }
42
43 void onBack() {
44 if (_navigationState.hasPrevious()) {
45 setState(() {
46 _navigationState.pop();
47 });
48 } else {
49 super.onBack();
50 }
51 }
52
53 StockMode optimismSetting = StockMode.optimistic;
54 BackupMode backupSetting = BackupMode.disabled;
55 void modeUpdater(StockMode optimism) {
56 setState(() {
57 optimismSetting = optimism;
58 });
59 }
60 void settingsUpdater({ StockMode optimism, BackupMode backup }) {
61 setState(() {
62 if (optimism != null)
63 optimismSetting = optimism;
64 if (backup != null)
65 backupSetting = backup;
66 });
67 }
68
69 final List<Stock> _stocks = [];
70 void didMount() {
71 super.didMount();
72 new StockDataFetcher((StockData data) {
73 setState(() {
74 data.appendTo(_stocks);
75 });
76 });
77 }
78
79 Widget build() {
80
81 ThemeData theme;
82 if (optimismSetting == StockMode.optimistic) {
83 theme = new ThemeData(
84 brightness: ThemeBrightness.light,
Adam Barth4467a262015-09-18 09:49:20 -070085 primarySwatch: Colors.purple
Collin Jackson633b6502015-07-16 11:54:25 -070086 );
87 } else {
88 theme = new ThemeData(
89 brightness: ThemeBrightness.dark,
Adam Barth4467a262015-09-18 09:49:20 -070090 accentColor: Colors.redAccent[200]
Collin Jackson633b6502015-07-16 11:54:25 -070091 );
92 }
93
94 return new Theme(
95 data: theme,
96 child: new DefaultTextStyle(
Adam Barth4467a262015-09-18 09:49:20 -070097 style: Typography.error, // if you see this, you've forgotten to correctly configure the text style!
Adam Barth51c71942015-08-21 11:27:17 -070098 child: new Title(
99 title: 'Stocks',
Collin Jackson633b6502015-07-16 11:54:25 -0700100 child: new Navigator(_navigationState)
101 )
102 )
103 );
104 }
105}
106
107void main() {
108 runApp(new StocksApp());
109}