Fixed Progress Editor Bug

Signed-off-by: Andreas Fahrecker <AndreasFahrecker@gmail.com>
This commit is contained in:
Andreas Fahrecker 2021-02-13 00:54:16 +01:00
parent 9ee29a7c7c
commit f592e7b66b
5 changed files with 51 additions and 42 deletions

View File

@ -19,10 +19,13 @@ class ProgressCreationScreen extends StatefulWidget {
class _ProgressCreationScreenState extends State<ProgressCreationScreen> { class _ProgressCreationScreenState extends State<ProgressCreationScreen> {
TimeProgress timeProgressToCreate = TimeProgress timeProgressToCreate =
TimeProgress("", DateTime.now(), DateTime(DateTime.now().year + 1)); TimeProgress("", DateTime.now(), DateTime(DateTime.now().year + 1));
bool _isProgressValid = false;
void onTimeProgressChanged(TimeProgress newTimeProgress) { void onTimeProgressChanged(
TimeProgress newTimeProgress, bool isNewProgressValid) {
setState(() { setState(() {
timeProgressToCreate = newTimeProgress; timeProgressToCreate = newTimeProgress;
_isProgressValid = isNewProgressValid;
}); });
} }
@ -46,7 +49,7 @@ class _ProgressCreationScreenState extends State<ProgressCreationScreen> {
child: FloatingActionButton( child: FloatingActionButton(
heroTag: "createTimeProgressBTN", heroTag: "createTimeProgressBTN",
child: Icon(Icons.save), child: Icon(Icons.save),
onPressed: TimeProgress.isValid(timeProgressToCreate) onPressed: _isProgressValid
? () { ? () {
StoreProvider.of<AppState>(context).dispatch( StoreProvider.of<AppState>(context).dispatch(
AddTimeProgressAction(timeProgressToCreate)); AddTimeProgressAction(timeProgressToCreate));

View File

@ -27,12 +27,14 @@ class ProgressDetailScreen extends StatefulWidget {
} }
class _ProgressDetailScreenState extends State<ProgressDetailScreen> { class _ProgressDetailScreenState extends State<ProgressDetailScreen> {
bool _editMode = false; bool _editMode = false, _isEditedProgressValid = false;
TimeProgress _editedProgress; TimeProgress _editedProgress, _originalProgress;
void _onEditedProgressChanged(TimeProgress newProgress) { void _onEditedProgressChanged(
TimeProgress newProgress, bool isNewProgressValid) {
setState(() { setState(() {
_editedProgress = newProgress; _editedProgress = newProgress;
_isEditedProgressValid = isNewProgressValid;
}); });
} }
@ -42,6 +44,13 @@ class _ProgressDetailScreenState extends State<ProgressDetailScreen> {
}); });
} }
void _cancelEditMode() {
setState(() {
_editMode = false;
_editedProgress = _originalProgress;
});
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final ProgressDetailScreenArguments args = final ProgressDetailScreenArguments args =
@ -60,8 +69,10 @@ class _ProgressDetailScreenState extends State<ProgressDetailScreen> {
return Center( return Center(
child: Text("Error Invalid Time Progress"), child: Text("Error Invalid Time Progress"),
); );
if (_editedProgress == null) if (_editedProgress == null) {
_editedProgress = timeProgress; // initialize _editedProgress _editedProgress = timeProgress;
_originalProgress = timeProgress;
} // initialize _editedProgress
List<Widget> columnChildren = [ List<Widget> columnChildren = [
Expanded( Expanded(
@ -106,9 +117,10 @@ class _ProgressDetailScreenState extends State<ProgressDetailScreen> {
editMode: _editMode, editMode: _editMode,
originalProgress: timeProgress, originalProgress: timeProgress,
editedProgress: _editedProgress, editedProgress: _editedProgress,
isEditedProgressValid: _isEditedProgressValid,
onEditProgress: () => _switchEditMode(true), onEditProgress: () => _switchEditMode(true),
onSaveEditedProgress: _saveEditedProgress, onSaveEditedProgress: _saveEditedProgress,
onCancelEditProgress: () => _switchEditMode(false), onCancelEditProgress: _cancelEditMode,
onDeleteProgress: _deleteTimeProgress); onDeleteProgress: _deleteTimeProgress);
}), }),
); );

View File

@ -3,7 +3,7 @@ import 'package:time_progress_tracker/models/time_progress.dart';
import 'package:time_progress_tracker/widgets/app_yes_no_dialog_widget.dart'; import 'package:time_progress_tracker/widgets/app_yes_no_dialog_widget.dart';
class DetailScreenFloatingActionButtons extends StatelessWidget { class DetailScreenFloatingActionButtons extends StatelessWidget {
final bool editMode; final bool editMode, isEditedProgressValid;
final TimeProgress originalProgress, editedProgress; final TimeProgress originalProgress, editedProgress;
final void Function() onEditProgress, final void Function() onEditProgress,
onSaveEditedProgress, onSaveEditedProgress,
@ -14,6 +14,7 @@ class DetailScreenFloatingActionButtons extends StatelessWidget {
@required this.editMode, @required this.editMode,
@required this.originalProgress, @required this.originalProgress,
@required this.editedProgress, @required this.editedProgress,
@required this.isEditedProgressValid,
@required this.onEditProgress, @required this.onEditProgress,
@required this.onSaveEditedProgress, @required this.onSaveEditedProgress,
@required this.onCancelEditProgress, @required this.onCancelEditProgress,
@ -63,7 +64,7 @@ class DetailScreenFloatingActionButtons extends StatelessWidget {
child: editMode ? Icon(Icons.save) : Icon(Icons.edit), child: editMode ? Icon(Icons.save) : Icon(Icons.edit),
backgroundColor: editMode ? Colors.green : appTheme.accentColor, backgroundColor: editMode ? Colors.green : appTheme.accentColor,
onPressed: editMode onPressed: editMode
? TimeProgress.isValid(editedProgress) ? isEditedProgressValid
? onSaveEditedProgress ? onSaveEditedProgress
: null : null
: onEditProgress, : onEditProgress,

View File

@ -4,7 +4,7 @@ import 'package:time_progress_tracker/widgets/date_picker_btn.dart';
class ProgressEditorWidget extends StatefulWidget { class ProgressEditorWidget extends StatefulWidget {
final TimeProgress timeProgress; final TimeProgress timeProgress;
final Function(TimeProgress) onTimeProgressChanged; final Function(TimeProgress, bool) onTimeProgressChanged;
ProgressEditorWidget({ ProgressEditorWidget({
@required this.timeProgress, @required this.timeProgress,
@ -22,42 +22,35 @@ class _ProgressEditorWidgetState extends State<ProgressEditorWidget> {
bool _validName = true, _validDate = true; bool _validName = true, _validDate = true;
void _onNameChanged() { void _onNameChanged() {
if (TimeProgress.isNameValid(_nameTextController.text)) { TimeProgress newProgress =
widget.onTimeProgressChanged( widget.timeProgress.copyWith(name: _nameTextController.text);
widget.timeProgress.copyWith(name: _nameTextController.text)); widget.onTimeProgressChanged(
setState(() { newProgress, TimeProgress.isValid(newProgress));
_validName = true; setState(() {
}); _validName = TimeProgress.isNameValid(newProgress.name);
} else });
setState(() {
_validName = false;
});
} }
void _onStartDateChanged(DateTime newStartDate) { void _onStartDateChanged(DateTime newStartDate) {
if (TimeProgress.areTimesValid(newStartDate, widget.timeProgress.endTime)) { TimeProgress newProgress =
widget.onTimeProgressChanged( widget.timeProgress.copyWith(startTime: newStartDate);
widget.timeProgress.copyWith(startTime: newStartDate)); widget.onTimeProgressChanged(
setState(() { newProgress, TimeProgress.isValid(newProgress));
_validDate = true; setState(() {
}); _validDate =
} else TimeProgress.areTimesValid(newStartDate, newProgress.endTime);
setState(() { });
_validDate = false;
});
} }
void _onEndDateChanged(DateTime newEndDate) { void _onEndDateChanged(DateTime newEndDate) {
if (TimeProgress.areTimesValid(widget.timeProgress.startTime, newEndDate)) { TimeProgress newProgress =
widget.onTimeProgressChanged( widget.timeProgress.copyWith(endTime: newEndDate);
widget.timeProgress.copyWith(endTime: newEndDate)); widget.onTimeProgressChanged(
setState(() { newProgress, TimeProgress.isValid(newProgress));
_validDate = true; setState(() {
}); _validDate =
} else TimeProgress.areTimesValid(newProgress.startTime, newEndDate);
setState(() { });
_validDate = false;
});
} }
@override @override

View File

@ -15,7 +15,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
# Read more about iOS versioning at # Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
version: 0.0.11+11 version: 0.0.12+12
environment: environment:
sdk: ">=2.7.0 <3.0.0" sdk: ">=2.7.0 <3.0.0"