diff --git a/lib/screens/progress_creation_screen.dart b/lib/screens/progress_creation_screen.dart index 417ba4d..440f424 100644 --- a/lib/screens/progress_creation_screen.dart +++ b/lib/screens/progress_creation_screen.dart @@ -19,10 +19,13 @@ class ProgressCreationScreen extends StatefulWidget { class _ProgressCreationScreenState extends State { TimeProgress timeProgressToCreate = TimeProgress("", DateTime.now(), DateTime(DateTime.now().year + 1)); + bool _isProgressValid = false; - void onTimeProgressChanged(TimeProgress newTimeProgress) { + void onTimeProgressChanged( + TimeProgress newTimeProgress, bool isNewProgressValid) { setState(() { timeProgressToCreate = newTimeProgress; + _isProgressValid = isNewProgressValid; }); } @@ -46,7 +49,7 @@ class _ProgressCreationScreenState extends State { child: FloatingActionButton( heroTag: "createTimeProgressBTN", child: Icon(Icons.save), - onPressed: TimeProgress.isValid(timeProgressToCreate) + onPressed: _isProgressValid ? () { StoreProvider.of(context).dispatch( AddTimeProgressAction(timeProgressToCreate)); diff --git a/lib/screens/progress_detail_screen.dart b/lib/screens/progress_detail_screen.dart index f600d02..ec753d8 100644 --- a/lib/screens/progress_detail_screen.dart +++ b/lib/screens/progress_detail_screen.dart @@ -27,12 +27,14 @@ class ProgressDetailScreen extends StatefulWidget { } class _ProgressDetailScreenState extends State { - bool _editMode = false; - TimeProgress _editedProgress; + bool _editMode = false, _isEditedProgressValid = false; + TimeProgress _editedProgress, _originalProgress; - void _onEditedProgressChanged(TimeProgress newProgress) { + void _onEditedProgressChanged( + TimeProgress newProgress, bool isNewProgressValid) { setState(() { _editedProgress = newProgress; + _isEditedProgressValid = isNewProgressValid; }); } @@ -42,6 +44,13 @@ class _ProgressDetailScreenState extends State { }); } + void _cancelEditMode() { + setState(() { + _editMode = false; + _editedProgress = _originalProgress; + }); + } + @override Widget build(BuildContext context) { final ProgressDetailScreenArguments args = @@ -60,8 +69,10 @@ class _ProgressDetailScreenState extends State { return Center( child: Text("Error Invalid Time Progress"), ); - if (_editedProgress == null) - _editedProgress = timeProgress; // initialize _editedProgress + if (_editedProgress == null) { + _editedProgress = timeProgress; + _originalProgress = timeProgress; + } // initialize _editedProgress List columnChildren = [ Expanded( @@ -106,9 +117,10 @@ class _ProgressDetailScreenState extends State { editMode: _editMode, originalProgress: timeProgress, editedProgress: _editedProgress, + isEditedProgressValid: _isEditedProgressValid, onEditProgress: () => _switchEditMode(true), onSaveEditedProgress: _saveEditedProgress, - onCancelEditProgress: () => _switchEditMode(false), + onCancelEditProgress: _cancelEditMode, onDeleteProgress: _deleteTimeProgress); }), ); diff --git a/lib/widgets/detail_screen_floating_action_buttons.dart b/lib/widgets/detail_screen_floating_action_buttons.dart index e23b7e0..00dc4e7 100644 --- a/lib/widgets/detail_screen_floating_action_buttons.dart +++ b/lib/widgets/detail_screen_floating_action_buttons.dart @@ -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'; class DetailScreenFloatingActionButtons extends StatelessWidget { - final bool editMode; + final bool editMode, isEditedProgressValid; final TimeProgress originalProgress, editedProgress; final void Function() onEditProgress, onSaveEditedProgress, @@ -14,6 +14,7 @@ class DetailScreenFloatingActionButtons extends StatelessWidget { @required this.editMode, @required this.originalProgress, @required this.editedProgress, + @required this.isEditedProgressValid, @required this.onEditProgress, @required this.onSaveEditedProgress, @required this.onCancelEditProgress, @@ -63,7 +64,7 @@ class DetailScreenFloatingActionButtons extends StatelessWidget { child: editMode ? Icon(Icons.save) : Icon(Icons.edit), backgroundColor: editMode ? Colors.green : appTheme.accentColor, onPressed: editMode - ? TimeProgress.isValid(editedProgress) + ? isEditedProgressValid ? onSaveEditedProgress : null : onEditProgress, diff --git a/lib/widgets/progress_editor_widget.dart b/lib/widgets/progress_editor_widget.dart index 1b15a3a..5aa19d2 100644 --- a/lib/widgets/progress_editor_widget.dart +++ b/lib/widgets/progress_editor_widget.dart @@ -4,7 +4,7 @@ import 'package:time_progress_tracker/widgets/date_picker_btn.dart'; class ProgressEditorWidget extends StatefulWidget { final TimeProgress timeProgress; - final Function(TimeProgress) onTimeProgressChanged; + final Function(TimeProgress, bool) onTimeProgressChanged; ProgressEditorWidget({ @required this.timeProgress, @@ -22,42 +22,35 @@ class _ProgressEditorWidgetState extends State { bool _validName = true, _validDate = true; void _onNameChanged() { - if (TimeProgress.isNameValid(_nameTextController.text)) { - widget.onTimeProgressChanged( - widget.timeProgress.copyWith(name: _nameTextController.text)); - setState(() { - _validName = true; - }); - } else - setState(() { - _validName = false; - }); + TimeProgress newProgress = + widget.timeProgress.copyWith(name: _nameTextController.text); + widget.onTimeProgressChanged( + newProgress, TimeProgress.isValid(newProgress)); + setState(() { + _validName = TimeProgress.isNameValid(newProgress.name); + }); } void _onStartDateChanged(DateTime newStartDate) { - if (TimeProgress.areTimesValid(newStartDate, widget.timeProgress.endTime)) { - widget.onTimeProgressChanged( - widget.timeProgress.copyWith(startTime: newStartDate)); - setState(() { - _validDate = true; - }); - } else - setState(() { - _validDate = false; - }); + TimeProgress newProgress = + widget.timeProgress.copyWith(startTime: newStartDate); + widget.onTimeProgressChanged( + newProgress, TimeProgress.isValid(newProgress)); + setState(() { + _validDate = + TimeProgress.areTimesValid(newStartDate, newProgress.endTime); + }); } void _onEndDateChanged(DateTime newEndDate) { - if (TimeProgress.areTimesValid(widget.timeProgress.startTime, newEndDate)) { - widget.onTimeProgressChanged( - widget.timeProgress.copyWith(endTime: newEndDate)); - setState(() { - _validDate = true; - }); - } else - setState(() { - _validDate = false; - }); + TimeProgress newProgress = + widget.timeProgress.copyWith(endTime: newEndDate); + widget.onTimeProgressChanged( + newProgress, TimeProgress.isValid(newProgress)); + setState(() { + _validDate = + TimeProgress.areTimesValid(newProgress.startTime, newEndDate); + }); } @override diff --git a/pubspec.yaml b/pubspec.yaml index a0dfce6..269fb36 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -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. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 0.0.11+11 +version: 0.0.12+12 environment: sdk: ">=2.7.0 <3.0.0"