mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Split fitness app’s UserData into UserData and UserDataImpl
This commit is contained in:
parent
47dc2cee19
commit
deb648c19c
@ -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();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user