Commit c890dde7 authored by Collin Jackson's avatar Collin Jackson

Split fitness app’s UserData into UserData and UserDataImpl

parent 09216794
......@@ -20,15 +20,20 @@ part 'meal.dart';
part 'measurement.dart';
part 'settings.dart';
class UserData {
UserData();
abstract class UserData {
BackupMode get backupMode;
List<FitnessItem> get items;
}
class UserDataImpl extends UserData {
UserDataImpl();
List<FitnessItem> _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
)
),
]);
......
......@@ -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)
]
)
])
......
......@@ -26,11 +26,11 @@ Future<UserData> 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();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment