| // Copyright 2014 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. |
| |
| part of fitness; |
| |
| class Meal extends FitnessItem { |
| Meal({ DateTime when, this.description }) : super(when: when); |
| |
| final String description; |
| |
| FitnessItemRow toRow({ FitnessItemHandler onDismissed }) { |
| return new MealRow(meal: this, onDismissed: onDismissed); |
| } |
| } |
| |
| class MealRow extends FitnessItemRow { |
| MealRow({ Meal meal, FitnessItemHandler onDismissed }) |
| : super(item: meal, onDismissed: onDismissed); |
| |
| Widget buildContent() { |
| Meal meal = item; |
| List<Widget> children = [ |
| new Flexible( |
| child: new Text( |
| meal.description, |
| style: const TextStyle(textAlign: TextAlign.right) |
| ) |
| ), |
| new Flexible( |
| child: new Text( |
| meal.displayDate, |
| style: Theme.of(this).text.caption.copyWith(textAlign: TextAlign.right) |
| ) |
| ) |
| ]; |
| return new Flex( |
| children, |
| alignItems: FlexAlignItems.baseline, |
| textBaseline: DefaultTextStyle.of(this).textBaseline |
| ); |
| } |
| } |
| |
| class MealFragment extends StatefulComponent { |
| |
| MealFragment({ this.navigator, this.onCreated }); |
| |
| Navigator navigator; |
| FitnessItemHandler onCreated; |
| |
| void syncConstructorArguments(MealFragment source) { |
| navigator = source.navigator; |
| onCreated = source.onCreated; |
| } |
| |
| String _description = ""; |
| |
| EventDisposition _handleSave() { |
| onCreated(new Meal(when: new DateTime.now(), description: _description)); |
| navigator.pop(); |
| return EventDisposition.processed; |
| } |
| |
| Widget buildToolBar() { |
| return new ToolBar( |
| left: new IconButton( |
| icon: "navigation/close", |
| onPressed: navigator.pop), |
| center: new Text('New Meal'), |
| right: [new InkWell( |
| child: new Listener( |
| onGestureTap: (_) => _handleSave(), |
| child: new Text('SAVE') |
| ) |
| )] |
| ); |
| } |
| |
| void _handleDescriptionChanged(String description) { |
| setState(() { |
| _description = description; |
| }); |
| } |
| |
| static final GlobalKey descriptionKey = new GlobalKey(); |
| |
| Widget buildBody() { |
| Meal meal = new Meal(when: new DateTime.now()); |
| return new Material( |
| type: MaterialType.canvas, |
| child: new ScrollableViewport( |
| child: new Container( |
| padding: const EdgeDims.all(20.0), |
| child: new BlockBody([ |
| new Text(meal.displayDate), |
| new Input( |
| key: descriptionKey, |
| placeholder: 'Describe meal', |
| onChanged: _handleDescriptionChanged |
| ), |
| ]) |
| ) |
| ) |
| ); |
| } |
| |
| Widget build() { |
| return new Scaffold( |
| toolbar: buildToolBar(), |
| body: buildBody() |
| ); |
| } |
| } |