Cleanup of Progress Detail Screen
Signed-off-by: Andreas Fahrecker <AndreasFahrecker@gmail.com>
This commit is contained in:
@ -6,9 +6,7 @@ import 'package:time_progress_tracker/models/app_state.dart';
|
||||
import 'package:time_progress_tracker/models/time_progress.dart';
|
||||
import 'package:time_progress_tracker/screens/home_screen.dart';
|
||||
import 'package:time_progress_tracker/selectors/time_progress_selectors.dart';
|
||||
import 'package:time_progress_tracker/widgets/app_yes_no_dialog_widget.dart';
|
||||
import 'package:time_progress_tracker/widgets/progress_detail_widgets/progress_detail_fab_editing_row_widget.dart';
|
||||
import 'package:time_progress_tracker/widgets/progress_detail_widgets/progress_detail_fab_row_widget.dart';
|
||||
import 'package:time_progress_tracker/widgets/detail_screen_floating_action_buttons.dart';
|
||||
import 'package:time_progress_tracker/widgets/progress_editor_widget.dart';
|
||||
import 'package:time_progress_tracker/widgets/progress_view_widget.dart';
|
||||
|
||||
@ -20,6 +18,7 @@ class ProgressDetailScreenArguments {
|
||||
|
||||
class ProgressDetailScreen extends StatefulWidget {
|
||||
static const routeName = "/progress-detail";
|
||||
static const title = "Progress View";
|
||||
|
||||
@override
|
||||
State<StatefulWidget> createState() {
|
||||
@ -29,7 +28,7 @@ class ProgressDetailScreen extends StatefulWidget {
|
||||
|
||||
class _ProgressDetailScreenState extends State<ProgressDetailScreen> {
|
||||
bool _editMode = false;
|
||||
TimeProgress _editedProgress = TimeProgress.initialDefault();
|
||||
TimeProgress _editedProgress;
|
||||
|
||||
void _onEditedProgressChanged(TimeProgress newProgress) {
|
||||
setState(() {
|
||||
@ -37,162 +36,70 @@ class _ProgressDetailScreenState extends State<ProgressDetailScreen> {
|
||||
});
|
||||
}
|
||||
|
||||
void _onSaveTimeProgress(Store<AppState> store, id) {
|
||||
if (!TimeProgress.isValid(_editedProgress)) return;
|
||||
store.dispatch(UpdateTimeProgressAction(id, _editedProgress));
|
||||
void _switchEditMode(bool newMode) {
|
||||
setState(() {
|
||||
_editMode = false;
|
||||
_editMode = newMode;
|
||||
});
|
||||
}
|
||||
|
||||
void _showCancelEditTimeProgressDialog(AppState state, id) {
|
||||
TimeProgress originalTp = timeProgressByIdSelector(state, id);
|
||||
if (originalTp != _editedProgress) {
|
||||
String originalName = originalTp.name;
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (_) => AppYesNoDialog(
|
||||
titleText: "Cancel Editing of $originalName",
|
||||
contentText:
|
||||
"Are you sure that you want to discard the changes done to $originalName",
|
||||
onYesPressed: () {
|
||||
_cancelEditMode();
|
||||
Navigator.pop(context);
|
||||
},
|
||||
onNoPressed: _onCloseDialog,
|
||||
),
|
||||
);
|
||||
} else {
|
||||
_cancelEditMode();
|
||||
}
|
||||
}
|
||||
|
||||
void _cancelEditMode() {
|
||||
setState(() {
|
||||
_editMode = false;
|
||||
});
|
||||
}
|
||||
|
||||
void _onEditTimeProgress(AppState state, id) {
|
||||
setState(() {
|
||||
_editMode = true;
|
||||
_editedProgress = timeProgressByIdSelector(state, id);
|
||||
});
|
||||
}
|
||||
|
||||
void _showDeleteTimeProgressDialog(Store<AppState> store, id) {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (_) => AppYesNoDialog(
|
||||
titleText: "Delete ${timeProgressByIdSelector(store.state, id).name}",
|
||||
contentText: "Are you sure you want to delete this time progress?",
|
||||
onYesPressed: () => _onDeleteTimeProgress(store, id),
|
||||
onNoPressed: _onCloseDialog,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
void _onDeleteTimeProgress(Store<AppState> store, String id) {
|
||||
store.dispatch(DeleteTimeProgressAction(id));
|
||||
Navigator.popUntil(context, ModalRoute.withName(HomeScreen.routeName));
|
||||
}
|
||||
|
||||
void _onCloseDialog() {
|
||||
Navigator.pop(context);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final ProgressDetailScreenArguments args =
|
||||
ModalRoute.of(context).settings.arguments;
|
||||
final Store<AppState> store = StoreProvider.of<AppState>(context);
|
||||
final ThemeData appTheme = Theme.of(context);
|
||||
final TimeProgress _timeProgress =
|
||||
timeProgressByIdSelector(store.state, args.id);
|
||||
|
||||
if (_timeProgress == null) //+++++Time Progress Not Found Error+++++
|
||||
return Center(
|
||||
child: Text("Error Invalid Time Progress"),
|
||||
);
|
||||
if (_editedProgress == null)
|
||||
_editedProgress = _timeProgress; // initialize _editedProgress
|
||||
|
||||
void _saveEditedProgress() {
|
||||
store.dispatch(UpdateTimeProgressAction(args.id, _editedProgress));
|
||||
_switchEditMode(false);
|
||||
}
|
||||
|
||||
void _deleteTimeProgress() {
|
||||
store.dispatch(DeleteTimeProgressAction(args.id));
|
||||
Navigator.popUntil(context, ModalRoute.withName(HomeScreen.routeName));
|
||||
}
|
||||
|
||||
List<Widget> columnChildren = [
|
||||
Expanded(
|
||||
child: ProgressViewWidget(
|
||||
timeProgress: _editMode ? _editedProgress : _timeProgress),
|
||||
)
|
||||
];
|
||||
if (_editMode)
|
||||
columnChildren.add(Expanded(
|
||||
child: ProgressEditorWidget(
|
||||
timeProgress: _editedProgress,
|
||||
onTimeProgressChanged: _onEditedProgressChanged,
|
||||
),
|
||||
));
|
||||
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: Text("Progress"),
|
||||
title: Text(ProgressDetailScreen.title),
|
||||
),
|
||||
body: Container(
|
||||
margin: EdgeInsets.all(8),
|
||||
child: StoreConnector(
|
||||
converter: (Store<AppState> store) =>
|
||||
_ViewModel.fromStoreAndArg(store, args),
|
||||
onInit: loadTimeProgressListIfUnloaded,
|
||||
builder: (BuildContext context, _ViewModel vm) {
|
||||
if (vm.timeProgress == null)
|
||||
return Center(
|
||||
child: Text("Error Invalid Time Progress"),
|
||||
);
|
||||
List<Widget> columnChildren = [
|
||||
Expanded(
|
||||
child: ProgressViewWidget(
|
||||
timeProgress:
|
||||
_editMode ? _editedProgress : vm.timeProgress),
|
||||
)
|
||||
];
|
||||
if (_editMode)
|
||||
columnChildren.add(Expanded(
|
||||
child: ProgressEditorWidget(
|
||||
timeProgress: _editedProgress,
|
||||
onTimeProgressChanged: _onEditedProgressChanged,
|
||||
),
|
||||
));
|
||||
return Column(
|
||||
children: columnChildren,
|
||||
);
|
||||
},
|
||||
child: Column(
|
||||
children: columnChildren,
|
||||
),
|
||||
),
|
||||
floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat,
|
||||
floatingActionButton: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: FloatingActionButton(
|
||||
heroTag: _editMode
|
||||
? "saveEditedTimeProgressBTN"
|
||||
: "editTimeProgressBTN",
|
||||
child: _editMode ? Icon(Icons.save) : Icon(Icons.edit),
|
||||
backgroundColor: _editMode ? Colors.green : appTheme.accentColor,
|
||||
onPressed: _editMode
|
||||
? () {
|
||||
_onSaveTimeProgress(store, args.id);
|
||||
}
|
||||
: () {
|
||||
_onEditTimeProgress(store.state, args.id);
|
||||
},
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: FloatingActionButton(
|
||||
heroTag: _editMode
|
||||
? "cancelEditTimeProgressBTN"
|
||||
: "deleteTimeProgressBTN",
|
||||
child: _editMode ? Icon(Icons.cancel) : Icon(Icons.delete),
|
||||
backgroundColor: Colors.red,
|
||||
onPressed: _editMode
|
||||
? () {
|
||||
_showCancelEditTimeProgressDialog(store.state, args.id);
|
||||
}
|
||||
: () {
|
||||
_showDeleteTimeProgressDialog(store, args.id);
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class _ViewModel {
|
||||
final TimeProgress timeProgress;
|
||||
|
||||
_ViewModel({@required this.timeProgress});
|
||||
|
||||
static _ViewModel fromStoreAndArg(
|
||||
Store<AppState> store, ProgressDetailScreenArguments args) {
|
||||
return _ViewModel(
|
||||
timeProgress: timeProgressByIdSelector(store.state, args.id),
|
||||
floatingActionButton: DetailScreenFloatingActionButtons(
|
||||
editMode: _editMode,
|
||||
originalProgress: timeProgressByIdSelector(store.state, args.id),
|
||||
editedProgress: _editedProgress,
|
||||
onEditProgress: () => _switchEditMode(true),
|
||||
onSaveEditedProgress: _saveEditedProgress,
|
||||
onCancelEditProgress: () => _switchEditMode(false),
|
||||
onDeleteProgress: _deleteTimeProgress),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user