Fixed Progress Editor Bug
Signed-off-by: Andreas Fahrecker <AndreasFahrecker@gmail.com>
This commit is contained in:
parent
9ee29a7c7c
commit
f592e7b66b
@ -19,10 +19,13 @@ class ProgressCreationScreen extends StatefulWidget {
|
||||
class _ProgressCreationScreenState extends State<ProgressCreationScreen> {
|
||||
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<ProgressCreationScreen> {
|
||||
child: FloatingActionButton(
|
||||
heroTag: "createTimeProgressBTN",
|
||||
child: Icon(Icons.save),
|
||||
onPressed: TimeProgress.isValid(timeProgressToCreate)
|
||||
onPressed: _isProgressValid
|
||||
? () {
|
||||
StoreProvider.of<AppState>(context).dispatch(
|
||||
AddTimeProgressAction(timeProgressToCreate));
|
||||
|
@ -27,12 +27,14 @@ class ProgressDetailScreen extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _ProgressDetailScreenState extends State<ProgressDetailScreen> {
|
||||
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<ProgressDetailScreen> {
|
||||
});
|
||||
}
|
||||
|
||||
void _cancelEditMode() {
|
||||
setState(() {
|
||||
_editMode = false;
|
||||
_editedProgress = _originalProgress;
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final ProgressDetailScreenArguments args =
|
||||
@ -60,8 +69,10 @@ class _ProgressDetailScreenState extends State<ProgressDetailScreen> {
|
||||
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<Widget> columnChildren = [
|
||||
Expanded(
|
||||
@ -106,9 +117,10 @@ class _ProgressDetailScreenState extends State<ProgressDetailScreen> {
|
||||
editMode: _editMode,
|
||||
originalProgress: timeProgress,
|
||||
editedProgress: _editedProgress,
|
||||
isEditedProgressValid: _isEditedProgressValid,
|
||||
onEditProgress: () => _switchEditMode(true),
|
||||
onSaveEditedProgress: _saveEditedProgress,
|
||||
onCancelEditProgress: () => _switchEditMode(false),
|
||||
onCancelEditProgress: _cancelEditMode,
|
||||
onDeleteProgress: _deleteTimeProgress);
|
||||
}),
|
||||
);
|
||||
|
@ -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,
|
||||
|
@ -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<ProgressEditorWidget> {
|
||||
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
|
||||
|
@ -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"
|
||||
|
Loading…
x
Reference in New Issue
Block a user