Chromium Code Reviews| Index: sky/sdk/example/fitness/lib/settings.dart |
| diff --git a/sky/sdk/example/fitness/lib/settings.dart b/sky/sdk/example/fitness/lib/settings.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..64a968a269e6a445144fb67d5fa58fc03a7915ca |
| --- /dev/null |
| +++ b/sky/sdk/example/fitness/lib/settings.dart |
| @@ -0,0 +1,92 @@ |
| +// 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. |
| + |
| +import 'package:sky/widgets/basic.dart'; |
| +import 'package:sky/widgets/switch.dart'; |
| +import 'package:sky/widgets/icon_button.dart'; |
| +import 'package:sky/widgets/material.dart'; |
| +import 'package:sky/widgets/menu_item.dart'; |
| +import 'package:sky/widgets/navigator.dart'; |
| +import 'package:sky/widgets/scaffold.dart'; |
| +import 'package:sky/widgets/tool_bar.dart'; |
| +import 'package:sky/widgets/theme.dart'; |
| + |
| +import 'fitness_types.dart'; |
| + |
| +typedef void SettingsUpdater({ |
| + BackupMode backup |
| +}); |
| + |
| +class SettingsFragment extends StatefulComponent { |
|
abarth-chromium
2015/07/08 00:05:31
Can we try making this a stateless component?
|
| + |
| + SettingsFragment(this.navigator, this.backup, this.updater); |
| + |
| + Navigator navigator; |
| + BackupMode backup; |
| + SettingsUpdater updater; |
| + |
| + bool showModeDialog = false; |
| + |
| + void syncFields(SettingsFragment source) { |
| + navigator = source.navigator; |
| + backup = source.backup; |
| + updater = source.updater; |
| + } |
| + |
| + void _handleBackupChanged(bool value) { |
| + setState(() { |
| + backup = value ? BackupMode.enabled : BackupMode.disabled; |
| + }); |
|
abarth-chromium
2015/07/08 00:05:31
Rather than calling setState, we should just updat
|
| + sendUpdates(); |
| + } |
| + |
| + void sendUpdates() { |
| + if (updater != null) |
| + updater( |
| + backup: backup |
| + ); |
| + } |
| + |
| + Widget buildToolBar() { |
| + return new ToolBar( |
| + left: new IconButton( |
| + icon: 'navigation/arrow_back_white', |
| + onPressed: navigator.pop), |
| + center: new Text('Settings') |
| + ); |
| + } |
| + |
| + Widget buildSettingsPane() { |
| + return new Material( |
| + type: MaterialType.canvas, |
| + child: new Container( |
| + padding: const EdgeDims.symmetric(vertical: 20.0), |
| + child: new Block([ |
| + new MenuItem( |
| + onPressed: () { _handleBackupChanged(!(backup == BackupMode.enabled)); }, |
| + children: [ |
| + new Flexible(child: new Text('Back up data to the cloud')), |
| + new Switch(value: backup == BackupMode.enabled, onChanged: _handleBackupChanged) |
| + ] |
| + ), |
| + new MenuItem( |
| + children: [ |
| + new Block([ |
| + new Text('Height'), |
| + new Text("6'2\"", style: Theme.of(this).text.caption), |
| + ]) |
| + ] |
| + ), |
| + ]) |
| + ) |
| + ); |
| + } |
| + |
| + Widget build() { |
| + return new Scaffold( |
| + toolbar: buildToolBar(), |
| + body: buildSettingsPane() |
| + ); |
| + } |
| +} |