time_progress_tracker/lib/widgets/home/tabs/home_settings_tab.dart
Andreas Fahrecker 90f2998088
Feature/default duration setting (#7)
* Implemented Basic Duration Settings into AppSettings Model

* Implemented Basic Duration Settings into AppSettings Model

* Created Duration Settings Widget and Started using ViewModel in HomeSettingsTab

* Updated Version Number
2021-03-03 19:59:33 +01:00

96 lines
3.4 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:redux/redux.dart';
import 'package:time_progress_tracker/actions/actions.dart';
import 'package:time_progress_tracker/app.dart';
import 'package:time_progress_tracker/models/app_settings.dart';
import 'package:time_progress_tracker/models/app_state.dart';
import 'package:time_progress_tracker/selectors/time_progress_selectors.dart';
import 'package:time_progress_tracker/widgets/home/tabs/settings/color_settings_widget.dart';
import 'package:time_progress_tracker/widgets/home/tabs/settings/duration_settings_widget.dart';
class HomeSettingsTab extends StatelessWidget {
@override
Widget build(BuildContext context) {
return StoreConnector<AppState, _ViewModel>(
onInit: loadSettingsIfUnloaded,
converter: (store) => _ViewModel.create(store),
builder: (context, _ViewModel vm) {
return Container(
padding: EdgeInsets.all(16),
child: Center(
child: Column(
children: [
Expanded(
child: ColorSettingsWidget(
doneColor: vm.doneColor,
leftColor: vm.leftColor,
updateDoneColor: vm.onDoneColorChanged,
updateLeftColor: vm.onLeftColorChanged,
),
),
Expanded(
child: DurationSettingsWidget(
duration: vm.duration,
updateDuration: vm.onDurationChanged,
),
),
Spacer(),
Expanded(
child: TextButton(
onPressed: () {
showAboutDialog(
context: context,
applicationName: TimeProgressTrackerApp.name,
applicationVersion: "Beta",
applicationLegalese:
'\u00a9Andreas Fahrecker 2020-2021');
},
child: Text("About"),
),
),
],
),
),
);
},
);
}
}
class _ViewModel {
final Color doneColor, leftColor;
final void Function(Color) onDoneColorChanged, onLeftColorChanged;
final Duration duration;
final void Function(Duration) onDurationChanged;
_ViewModel({
@required this.doneColor,
@required this.leftColor,
@required this.onDoneColorChanged,
@required this.onLeftColorChanged,
@required this.duration,
@required this.onDurationChanged,
});
factory _ViewModel.create(Store<AppState> store) {
AppSettings settings = appSettingsSelector(store.state);
void _onDoneColorChanged(Color c) => store
.dispatch(UpdateAppSettingsActions(settings.copyWith(doneColor: c)));
void _onLeftColorChanged(Color c) => store
.dispatch(UpdateAppSettingsActions(settings.copyWith(leftColor: c)));
void _onDurationChanged(Duration d) => store
.dispatch(UpdateAppSettingsActions(settings.copyWith(duration: d)));
return _ViewModel(
doneColor: settings.doneColor,
leftColor: settings.leftColor,
onDoneColorChanged: _onDoneColorChanged,
onLeftColorChanged: _onLeftColorChanged,
duration: settings.duration,
onDurationChanged: _onDurationChanged);
}
}