// 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 fitness; import 'package:sky/editing/input.dart'; import 'package:sky/painting/text_style.dart'; import 'package:sky/theme/colors.dart' as colors; import 'package:sky/widgets.dart'; import 'user_data.dart'; part 'feed.dart'; part 'fitness_item.dart'; part 'fitness_types.dart'; part 'meal.dart'; part 'measurement.dart'; part 'settings.dart'; class FitnessApp extends App { NavigationState _navigationState; final List _userData = []; void didMount() { super.didMount(); loadFitnessData().then((List list) { setState(() { _userData.addAll(list); }); }).catchError((e) => print("Failed to load data: $e")); } void save() { saveFitnessData(_userData) .catchError((e) => print("Failed to load data: $e")); } void initState() { _navigationState = new NavigationState([ new Route( name: '/', builder: (navigator, route) => new FeedFragment( navigator: navigator, userData: _userData, onItemCreated: _handleItemCreated, onItemDeleted: _handleItemDeleted ) ), new Route( name: '/meals/new', builder: (navigator, route) => new MealFragment( navigator: navigator, onCreated: _handleItemCreated ) ), new Route( name: '/measurements/new', builder: (navigator, route) => new MeasurementFragment( navigator: navigator, onCreated: _handleItemCreated ) ), new Route( name: '/settings', builder: (navigator, route) => new SettingsFragment(navigator, backupSetting, settingsUpdater) ), ]); super.initState(); } void onBack() { if (_navigationState.hasPrevious()) { setState(() { _navigationState.pop(); }); } else { super.onBack(); } } void _handleItemCreated(FitnessItem item) { setState(() { _userData.add(item); _userData.sort((a, b) => a.when.compareTo(b.when)); save(); }); } void _handleItemDeleted(FitnessItem item) { setState(() { _userData.remove(item); saveFitnessData(_userData); }); } BackupMode backupSetting = BackupMode.disabled; void settingsUpdater({ BackupMode backup }) { setState(() { if (backup != null) backupSetting = backup; }); } Widget build() { return new Theme( data: new ThemeData( brightness: ThemeBrightness.light, primarySwatch: colors.Indigo, accentColor: colors.PinkAccent[200] ), child: new TaskDescription( label: 'Fitness', child: new Navigator(_navigationState) ) ); } } void main() { runApp(new FitnessApp()); }