From d77d7b4893cd76728453bd040554699ad35fe8e9 Mon Sep 17 00:00:00 2001 From: Collin Jackson Date: Thu, 20 Aug 2015 11:45:31 -0700 Subject: [PATCH] Add goal weight indicator line to fitness chart --- examples/fitness/lib/feed.dart | 19 +++++++++++++------ examples/fitness/lib/main.dart | 5 +++-- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/examples/fitness/lib/feed.dart b/examples/fitness/lib/feed.dart index b39b7d1850..d9ae736183 100644 --- a/examples/fitness/lib/feed.dart +++ b/examples/fitness/lib/feed.dart @@ -61,7 +61,7 @@ class FeedFragment extends StatefulComponent { FeedFragment({ this.navigator, this.userData, this.onItemCreated, this.onItemDeleted }); Navigator navigator; - List userData; + UserData userData; FitnessItemHandler onItemCreated; FitnessItemHandler onItemDeleted; @@ -179,12 +179,13 @@ class FeedFragment extends StatefulComponent { double startY; double endY; List dataSet = new List(); - for (FitnessItem item in userData) { + for (FitnessItem item in userData.items) { if (item is Measurement) { double x = item.when.millisecondsSinceEpoch.toDouble(); double y = item.weight; - if (startX == null) + if (startX == null || startX > x) startX = x; + if (endX == null || endX < x) endX = x; if (startY == null || startY > y) startY = y; @@ -193,6 +194,10 @@ class FeedFragment extends StatefulComponent { dataSet.add(new Point(x, y)); } } + if (userData.goalWeight > 0.0) { + startY = math.min(startY, userData.goalWeight); + endY = math.max(endY, userData.goalWeight); + } playfair.ChartData data = new playfair.ChartData( startX: startX, startY: startY, @@ -200,14 +205,16 @@ class FeedFragment extends StatefulComponent { endY: endY, dataSet: dataSet, numHorizontalGridlines: 5, - roundToPlaces: 1 + roundToPlaces: 1, + indicatorLine: userData.goalWeight, + indicatorText: "GOAL WEIGHT" ); return new playfair.Chart(data: data); } Widget buildBody() { TextStyle style = Theme.of(this).text.title; - if (userData.length == 0) + if (userData.items.length == 0) return new Material( type: MaterialType.canvas, child: new Flex( @@ -218,7 +225,7 @@ class FeedFragment extends StatefulComponent { switch (_fitnessMode) { case FitnessMode.feed: return new FitnessItemList( - items: userData, + items: userData.items.reversed.toList(), onDismissed: _handleItemDismissed ); case FitnessMode.chart: diff --git a/examples/fitness/lib/main.dart b/examples/fitness/lib/main.dart index 7450b71205..0755d56559 100644 --- a/examples/fitness/lib/main.dart +++ b/examples/fitness/lib/main.dart @@ -12,6 +12,7 @@ import 'package:sky/widgets.dart'; import 'user_data.dart'; import 'date_utils.dart'; import 'dart:async'; +import 'dart:math' as math; part 'feed.dart'; part 'fitness_item.dart'; @@ -46,7 +47,7 @@ class UserDataImpl extends UserData { List get items => _items; void sort() { - _items.sort((a, b) => -a.when.compareTo(b.when)); + _items.sort((a, b) => a.when.compareTo(b.when)); } void add(FitnessItem item) { @@ -100,7 +101,7 @@ class FitnessApp extends App { name: '/', builder: (navigator, route) => new FeedFragment( navigator: navigator, - userData: _userData.items, + userData: _userData, onItemCreated: _handleItemCreated, onItemDeleted: _handleItemDeleted )