diff --git a/examples/fitness/lib/main.dart b/examples/fitness/lib/main.dart index 7dda3cd90df..8881905597e 100644 --- a/examples/fitness/lib/main.dart +++ b/examples/fitness/lib/main.dart @@ -20,15 +20,20 @@ part 'meal.dart'; part 'measurement.dart'; part 'settings.dart'; -class UserData { - UserData(); +abstract class UserData { + BackupMode get backupMode; + List get items; +} + +class UserDataImpl extends UserData { + UserDataImpl(); List _items = []; - BackupMode _backupSetting; - BackupMode get backupSetting => _backupSetting; + BackupMode _backupMode; + BackupMode get backupMode => _backupMode; void setBackupModeAndSave(BackupMode value) { - _backupSetting = value; + _backupMode = value; save(); } @@ -56,12 +61,12 @@ class UserData { Future save() => saveFitnessData(this); - UserData.fromJson(Map json) { + UserDataImpl.fromJson(Map json) { json['items'].forEach((item) { _items.add(new Measurement.fromJson(item)); }); try { - _backupSetting = BackupMode.values.firstWhere((BackupMode mode) { + _backupMode = BackupMode.values.firstWhere((BackupMode mode) { return mode.toString() == json['backupMode']; }); } catch(e) { @@ -72,14 +77,14 @@ class UserData { Map toJson() { Map json = new Map(); json['items'] = _items.map((item) => item.toJson()).toList(); - json['backupMode'] = _backupSetting.toString(); + json['backupMode'] = _backupMode.toString(); return json; } } class FitnessApp extends App { NavigationState _navigationState; - UserData _userData = new UserData(); + UserDataImpl _userData = new UserDataImpl(); void didMount() { super.didMount(); @@ -88,10 +93,6 @@ class FitnessApp extends App { }).catchError((e) => print("Failed to load data: $e")); } - void save() { - _userData.save().catchError((e) => print("Failed to load data: $e")); - } - void initState() { _navigationState = new NavigationState([ new Route( @@ -120,9 +121,9 @@ class FitnessApp extends App { new Route( name: '/settings', builder: (navigator, route) => new SettingsFragment( - navigator, - _userData.backupSetting, - settingsUpdater + navigator: navigator, + userData: _userData as UserData, + updater: settingsUpdater ) ), ]); diff --git a/examples/fitness/lib/settings.dart b/examples/fitness/lib/settings.dart index b7a1724fe1a..39f81d9dfc9 100644 --- a/examples/fitness/lib/settings.dart +++ b/examples/fitness/lib/settings.dart @@ -10,10 +10,10 @@ typedef void SettingsUpdater({ class SettingsFragment extends Component { - SettingsFragment(this.navigator, this.backup, this.updater); + SettingsFragment({ this.navigator, this.userData, this.updater }); final Navigator navigator; - final BackupMode backup; + final UserData userData; final SettingsUpdater updater; void _handleBackupChanged(bool value) { @@ -38,10 +38,10 @@ class SettingsFragment extends Component { padding: const EdgeDims.symmetric(vertical: 20.0), child: new Block([ new DrawerItem( - onPressed: () { _handleBackupChanged(!(backup == BackupMode.enabled)); }, + onPressed: () { _handleBackupChanged(!(userData.backupMode == BackupMode.enabled)); }, children: [ new Flexible(child: new Text('Back up data to the cloud')), - new Switch(value: backup == BackupMode.enabled, onChanged: _handleBackupChanged) + new Switch(value: userData.backupMode == BackupMode.enabled, onChanged: _handleBackupChanged) ] ) ]) diff --git a/examples/fitness/lib/user_data.dart b/examples/fitness/lib/user_data.dart index c182e6fc186..d6f0a3c213a 100644 --- a/examples/fitness/lib/user_data.dart +++ b/examples/fitness/lib/user_data.dart @@ -26,11 +26,11 @@ Future loadFitnessData() async { print("Loading from $dataPath"); JsonDecoder decoder = new JsonDecoder(); Map data = await decoder.convert(await new File(dataPath).readAsString()); - return new UserData.fromJson(data); + return new UserDataImpl.fromJson(data); } // Intentionally synchronous for execution just before shutdown. -Future saveFitnessData(UserData data) async { +Future saveFitnessData(UserDataImpl data) async { String dataPath = await dataFilePath(); print("Saving to $dataPath"); JsonEncoder encoder = new JsonEncoder();