From 22a31a9da1a839a3df8dfa7bf22401f742fcec7b Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Mon, 17 Dec 2018 10:41:01 +0200 Subject: [PATCH] Projects --- lib/ui/project/edit/project_edit.dart | 139 ++++++++++++++------------ stubs/ui/stub/edit/stub_edit | 18 ++-- 2 files changed, 84 insertions(+), 73 deletions(-) diff --git a/lib/ui/project/edit/project_edit.dart b/lib/ui/project/edit/project_edit.dart index 83d386ec0..23ec496b9 100644 --- a/lib/ui/project/edit/project_edit.dart +++ b/lib/ui/project/edit/project_edit.dart @@ -71,7 +71,8 @@ class _ProjectEditState extends State { } void _onChanged() { - final project = widget.viewModel.project.rebuild((b) => b + final project = widget.viewModel.project.rebuild((b) => + b ..name = _nameController.text.trim() ..budgetedHours = parseDouble(_hoursController.text) ..taskRate = parseDouble(_taskRateController.text) @@ -118,74 +119,82 @@ class _ProjectEditState extends State { ), body: Form( key: _formKey, - child: ListView( - children: [ - FormCard( - children: [ - EntityDropdown( - entityType: EntityType.client, - labelText: localization.client, - initialValue: (state.clientState.map[project.clientId] ?? - ClientEntity()) - .displayName, - entityMap: state.clientState.map, - entityList: memoizedDropdownClientList( - state.clientState.map, state.clientState.list), - validator: (String val) => val.trim().isEmpty - ? localization.pleaseSelectAClient - : null, - onSelected: (clientId) { - viewModel.onChanged( - project.rebuild((b) => b..clientId = clientId)); - }, - onAddPressed: (completer) { - viewModel.onAddClientPressed(context, completer); - }, - ), - TextFormField( - autocorrect: false, - controller: _nameController, - validator: (String val) => val.trim().isEmpty - ? localization.pleaseEnterAName - : null, - decoration: InputDecoration( - labelText: localization.name, + child: Builder(builder: (BuildContext context) { + return ListView( + children: [ + FormCard( + children: [ + EntityDropdown( + entityType: EntityType.client, + labelText: localization.client, + initialValue: (state.clientState.map[project.clientId] ?? + ClientEntity()) + .displayName, + entityMap: state.clientState.map, + entityList: memoizedDropdownClientList( + state.clientState.map, state.clientState.list), + validator: (String val) => + val + .trim() + .isEmpty + ? localization.pleaseSelectAClient + : null, + onSelected: (clientId) { + viewModel.onChanged( + project.rebuild((b) => b..clientId = clientId)); + }, + onAddPressed: (completer) { + viewModel.onAddClientPressed(context, completer); + }, ), - ), - DatePicker( - labelText: localization.dueDate, - selectedDate: project.dueDate, - onSelected: (date) { - viewModel - .onChanged(project.rebuild((b) => b..dueDate = date)); - }, - ), - TextFormField( - keyboardType: TextInputType.number, - controller: _hoursController, - decoration: InputDecoration( - labelText: localization.budgetedHours, + TextFormField( + autocorrect: false, + controller: _nameController, + validator: (String val) => + val + .trim() + .isEmpty + ? localization.pleaseEnterAName + : null, + decoration: InputDecoration( + labelText: localization.name, + ), ), - ), - TextFormField( - keyboardType: TextInputType.number, - controller: _taskRateController, - decoration: InputDecoration( - labelText: localization.taskRate, + DatePicker( + labelText: localization.dueDate, + selectedDate: project.dueDate, + onSelected: (date) { + viewModel.onChanged( + project.rebuild((b) => b..dueDate = date)); + }, ), - ), - TextFormField( - maxLines: 4, - controller: _privateNotesController, - keyboardType: TextInputType.multiline, - decoration: InputDecoration( - labelText: localization.privateNotes, + TextFormField( + keyboardType: TextInputType.number, + controller: _hoursController, + decoration: InputDecoration( + labelText: localization.budgetedHours, + ), ), - ), - ], - ), - ], - ), + TextFormField( + keyboardType: TextInputType.number, + controller: _taskRateController, + decoration: InputDecoration( + labelText: localization.taskRate, + ), + ), + TextFormField( + maxLines: 4, + controller: _privateNotesController, + keyboardType: TextInputType.multiline, + decoration: InputDecoration( + labelText: localization.privateNotes, + ), + ), + ], + ), + ], + ); + }), ), ), ); diff --git a/stubs/ui/stub/edit/stub_edit b/stubs/ui/stub/edit/stub_edit index 1f67b9b41..221b6457a 100644 --- a/stubs/ui/stub/edit/stub_edit +++ b/stubs/ui/stub/edit/stub_edit @@ -95,16 +95,18 @@ class _StubEditState extends State { ], ), body: Form( - key: _formKey, - child: ListView( - children: [ - FormCard( + key: _formKey, + child: Builder(builder: (BuildContext context) { + return ListView( children: [ - // STARTER: widgets - do not remove comment + FormCard( + children: [ + // STARTER: widgets - do not remove comment + ], + ), ], - ), - ], - ), + ); + }) ), ), );