
This required me wrapping the new Activity APIs as well as adding the missing pubspec.yaml @abarth
124 lines
2.9 KiB
Dart
124 lines
2.9 KiB
Dart
// 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<FitnessItem> _userData = [];
|
|
|
|
void didMount() {
|
|
super.didMount();
|
|
loadFitnessData().then((List<Measurement> 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());
|
|
}
|