Refactor
This commit is contained in:
parent
5f4552dbae
commit
74e763224c
|
|
@ -18,10 +18,16 @@ class ViewClient implements PersistUI {
|
||||||
|
|
||||||
class EditClient implements PersistUI {
|
class EditClient implements PersistUI {
|
||||||
final ClientEntity client;
|
final ClientEntity client;
|
||||||
|
final ContactEntity contact;
|
||||||
final BuildContext context;
|
final BuildContext context;
|
||||||
final Completer completer;
|
final Completer completer;
|
||||||
final bool trackRoute;
|
final bool trackRoute;
|
||||||
EditClient({this.client, this.context, this.completer, this.trackRoute = true});
|
EditClient({this.client, this.contact, this.context, this.completer, this.trackRoute = true});
|
||||||
|
}
|
||||||
|
|
||||||
|
class EditContact implements PersistUI {
|
||||||
|
final ContactEntity contact;
|
||||||
|
EditContact([this.contact]);
|
||||||
}
|
}
|
||||||
|
|
||||||
class UpdateClient implements PersistUI {
|
class UpdateClient implements PersistUI {
|
||||||
|
|
|
||||||
|
|
@ -10,10 +10,20 @@ EntityUIState clientUIReducer(ClientUIState state, dynamic action) {
|
||||||
return state.rebuild((b) => b
|
return state.rebuild((b) => b
|
||||||
..listUIState.replace(clientListReducer(state.listUIState, action))
|
..listUIState.replace(clientListReducer(state.listUIState, action))
|
||||||
..editing.replace(editingReducer(state.editing, action))
|
..editing.replace(editingReducer(state.editing, action))
|
||||||
|
..editingContact.replace(editingContactReducer(state.editingContact, action))
|
||||||
..selectedId = selectedIdReducer(state.selectedId, action)
|
..selectedId = selectedIdReducer(state.selectedId, action)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final editingContactReducer = combineReducers<ContactEntity>([
|
||||||
|
TypedReducer<ContactEntity, EditClient>(editContact),
|
||||||
|
TypedReducer<ContactEntity, EditContact>(editContact),
|
||||||
|
]);
|
||||||
|
|
||||||
|
ContactEntity editContact(ContactEntity contact, dynamic action) {
|
||||||
|
return action.contact ?? ContactEntity();
|
||||||
|
}
|
||||||
|
|
||||||
Reducer<int> selectedIdReducer = combineReducers([
|
Reducer<int> selectedIdReducer = combineReducers([
|
||||||
TypedReducer<int, ViewClient>((int selectedId, dynamic action) => action.clientId),
|
TypedReducer<int, ViewClient>((int selectedId, dynamic action) => action.clientId),
|
||||||
TypedReducer<int, AddClientSuccess>((int selectedId, dynamic action) => action.client.id),
|
TypedReducer<int, AddClientSuccess>((int selectedId, dynamic action) => action.client.id),
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,7 @@ abstract class ClientUIState extends Object with EntityUIState implements Built<
|
||||||
return _$ClientUIState._(
|
return _$ClientUIState._(
|
||||||
listUIState: ListUIState(ClientFields.name),
|
listUIState: ListUIState(ClientFields.name),
|
||||||
editing: ClientEntity(),
|
editing: ClientEntity(),
|
||||||
|
editingContact: ContactEntity(),
|
||||||
selectedId: 0,
|
selectedId: 0,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -53,6 +54,9 @@ abstract class ClientUIState extends Object with EntityUIState implements Built<
|
||||||
@nullable
|
@nullable
|
||||||
ClientEntity get editing;
|
ClientEntity get editing;
|
||||||
|
|
||||||
|
@nullable
|
||||||
|
ContactEntity get editingContact;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool get isCreatingNew => editing.isNew;
|
bool get isCreatingNew => editing.isNew;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -105,6 +105,12 @@ class _$ClientUIStateSerializer implements StructuredSerializer<ClientUIState> {
|
||||||
..add(serializers.serialize(object.editing,
|
..add(serializers.serialize(object.editing,
|
||||||
specifiedType: const FullType(ClientEntity)));
|
specifiedType: const FullType(ClientEntity)));
|
||||||
}
|
}
|
||||||
|
if (object.editingContact != null) {
|
||||||
|
result
|
||||||
|
..add('editingContact')
|
||||||
|
..add(serializers.serialize(object.editingContact,
|
||||||
|
specifiedType: const FullType(ContactEntity)));
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
@ -124,6 +130,10 @@ class _$ClientUIStateSerializer implements StructuredSerializer<ClientUIState> {
|
||||||
result.editing.replace(serializers.deserialize(value,
|
result.editing.replace(serializers.deserialize(value,
|
||||||
specifiedType: const FullType(ClientEntity)) as ClientEntity);
|
specifiedType: const FullType(ClientEntity)) as ClientEntity);
|
||||||
break;
|
break;
|
||||||
|
case 'editingContact':
|
||||||
|
result.editingContact.replace(serializers.deserialize(value,
|
||||||
|
specifiedType: const FullType(ContactEntity)) as ContactEntity);
|
||||||
|
break;
|
||||||
case 'selectedId':
|
case 'selectedId':
|
||||||
result.selectedId = serializers.deserialize(value,
|
result.selectedId = serializers.deserialize(value,
|
||||||
specifiedType: const FullType(int)) as int;
|
specifiedType: const FullType(int)) as int;
|
||||||
|
|
@ -255,6 +265,8 @@ class _$ClientUIState extends ClientUIState {
|
||||||
@override
|
@override
|
||||||
final ClientEntity editing;
|
final ClientEntity editing;
|
||||||
@override
|
@override
|
||||||
|
final ContactEntity editingContact;
|
||||||
|
@override
|
||||||
final int selectedId;
|
final int selectedId;
|
||||||
@override
|
@override
|
||||||
final ListUIState listUIState;
|
final ListUIState listUIState;
|
||||||
|
|
@ -262,7 +274,8 @@ class _$ClientUIState extends ClientUIState {
|
||||||
factory _$ClientUIState([void updates(ClientUIStateBuilder b)]) =>
|
factory _$ClientUIState([void updates(ClientUIStateBuilder b)]) =>
|
||||||
(new ClientUIStateBuilder()..update(updates)).build();
|
(new ClientUIStateBuilder()..update(updates)).build();
|
||||||
|
|
||||||
_$ClientUIState._({this.editing, this.selectedId, this.listUIState})
|
_$ClientUIState._(
|
||||||
|
{this.editing, this.editingContact, this.selectedId, this.listUIState})
|
||||||
: super._() {
|
: super._() {
|
||||||
if (selectedId == null)
|
if (selectedId == null)
|
||||||
throw new BuiltValueNullFieldError('ClientUIState', 'selectedId');
|
throw new BuiltValueNullFieldError('ClientUIState', 'selectedId');
|
||||||
|
|
@ -282,13 +295,16 @@ class _$ClientUIState extends ClientUIState {
|
||||||
if (identical(other, this)) return true;
|
if (identical(other, this)) return true;
|
||||||
if (other is! ClientUIState) return false;
|
if (other is! ClientUIState) return false;
|
||||||
return editing == other.editing &&
|
return editing == other.editing &&
|
||||||
|
editingContact == other.editingContact &&
|
||||||
selectedId == other.selectedId &&
|
selectedId == other.selectedId &&
|
||||||
listUIState == other.listUIState;
|
listUIState == other.listUIState;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int get hashCode {
|
int get hashCode {
|
||||||
return $jf($jc($jc($jc(0, editing.hashCode), selectedId.hashCode),
|
return $jf($jc(
|
||||||
|
$jc($jc($jc(0, editing.hashCode), editingContact.hashCode),
|
||||||
|
selectedId.hashCode),
|
||||||
listUIState.hashCode));
|
listUIState.hashCode));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -296,6 +312,7 @@ class _$ClientUIState extends ClientUIState {
|
||||||
String toString() {
|
String toString() {
|
||||||
return (newBuiltValueToStringHelper('ClientUIState')
|
return (newBuiltValueToStringHelper('ClientUIState')
|
||||||
..add('editing', editing)
|
..add('editing', editing)
|
||||||
|
..add('editingContact', editingContact)
|
||||||
..add('selectedId', selectedId)
|
..add('selectedId', selectedId)
|
||||||
..add('listUIState', listUIState))
|
..add('listUIState', listUIState))
|
||||||
.toString();
|
.toString();
|
||||||
|
|
@ -311,6 +328,12 @@ class ClientUIStateBuilder
|
||||||
_$this._editing ??= new ClientEntityBuilder();
|
_$this._editing ??= new ClientEntityBuilder();
|
||||||
set editing(ClientEntityBuilder editing) => _$this._editing = editing;
|
set editing(ClientEntityBuilder editing) => _$this._editing = editing;
|
||||||
|
|
||||||
|
ContactEntityBuilder _editingContact;
|
||||||
|
ContactEntityBuilder get editingContact =>
|
||||||
|
_$this._editingContact ??= new ContactEntityBuilder();
|
||||||
|
set editingContact(ContactEntityBuilder editingContact) =>
|
||||||
|
_$this._editingContact = editingContact;
|
||||||
|
|
||||||
int _selectedId;
|
int _selectedId;
|
||||||
int get selectedId => _$this._selectedId;
|
int get selectedId => _$this._selectedId;
|
||||||
set selectedId(int selectedId) => _$this._selectedId = selectedId;
|
set selectedId(int selectedId) => _$this._selectedId = selectedId;
|
||||||
|
|
@ -326,6 +349,7 @@ class ClientUIStateBuilder
|
||||||
ClientUIStateBuilder get _$this {
|
ClientUIStateBuilder get _$this {
|
||||||
if (_$v != null) {
|
if (_$v != null) {
|
||||||
_editing = _$v.editing?.toBuilder();
|
_editing = _$v.editing?.toBuilder();
|
||||||
|
_editingContact = _$v.editingContact?.toBuilder();
|
||||||
_selectedId = _$v.selectedId;
|
_selectedId = _$v.selectedId;
|
||||||
_listUIState = _$v.listUIState?.toBuilder();
|
_listUIState = _$v.listUIState?.toBuilder();
|
||||||
_$v = null;
|
_$v = null;
|
||||||
|
|
@ -351,6 +375,7 @@ class ClientUIStateBuilder
|
||||||
_$result = _$v ??
|
_$result = _$v ??
|
||||||
new _$ClientUIState._(
|
new _$ClientUIState._(
|
||||||
editing: _editing?.build(),
|
editing: _editing?.build(),
|
||||||
|
editingContact: _editingContact?.build(),
|
||||||
selectedId: selectedId,
|
selectedId: selectedId,
|
||||||
listUIState: listUIState.build());
|
listUIState: listUIState.build());
|
||||||
} catch (_) {
|
} catch (_) {
|
||||||
|
|
@ -358,6 +383,8 @@ class ClientUIStateBuilder
|
||||||
try {
|
try {
|
||||||
_$failedField = 'editing';
|
_$failedField = 'editing';
|
||||||
_editing?.build();
|
_editing?.build();
|
||||||
|
_$failedField = 'editingContact';
|
||||||
|
_editingContact?.build();
|
||||||
|
|
||||||
_$failedField = 'listUIState';
|
_$failedField = 'listUIState';
|
||||||
listUIState.build();
|
listUIState.build();
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/client/edit/client_edit_billing_address.dart';
|
import 'package:invoiceninja_flutter/ui/client/edit/client_edit_billing_address.dart';
|
||||||
|
import 'package:invoiceninja_flutter/ui/client/edit/client_edit_contacts_vm.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/client/edit/client_edit_details.dart';
|
import 'package:invoiceninja_flutter/ui/client/edit/client_edit_details.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/client/edit/client_edit_settings.dart';
|
import 'package:invoiceninja_flutter/ui/client/edit/client_edit_settings.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/client/edit/client_edit_shipping_address.dart';
|
import 'package:invoiceninja_flutter/ui/client/edit/client_edit_shipping_address.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/client/edit/client_edit_vm.dart';
|
import 'package:invoiceninja_flutter/ui/client/edit/client_edit_vm.dart';
|
||||||
import 'package:invoiceninja_flutter/utils/localization.dart';
|
import 'package:invoiceninja_flutter/utils/localization.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/app/buttons/save_icon_button.dart';
|
import 'package:invoiceninja_flutter/ui/app/buttons/save_icon_button.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/client/edit/client_edit_contacts.dart';
|
|
||||||
|
|
||||||
class ClientEdit extends StatefulWidget {
|
class ClientEdit extends StatefulWidget {
|
||||||
final ClientEditVM viewModel;
|
final ClientEditVM viewModel;
|
||||||
|
|
@ -97,9 +97,7 @@ class _ClientEditState extends State<ClientEdit>
|
||||||
ClientEditDetails(
|
ClientEditDetails(
|
||||||
viewModel: widget.viewModel,
|
viewModel: widget.viewModel,
|
||||||
),
|
),
|
||||||
ClientEditContacts(
|
ClientEditContactsScreen(),
|
||||||
viewModel: widget.viewModel,
|
|
||||||
),
|
|
||||||
ClientEditSettings(
|
ClientEditSettings(
|
||||||
viewModel: widget.viewModel,
|
viewModel: widget.viewModel,
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -4,21 +4,30 @@ import 'package:invoiceninja_flutter/data/models/models.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/app/form_card.dart';
|
import 'package:invoiceninja_flutter/ui/app/form_card.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/app/forms/custom_field.dart';
|
import 'package:invoiceninja_flutter/ui/app/forms/custom_field.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/app/icon_text.dart';
|
import 'package:invoiceninja_flutter/ui/app/icon_text.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/client/edit/client_edit_vm.dart';
|
import 'package:invoiceninja_flutter/ui/client/edit/client_edit_contacts_vm.dart';
|
||||||
import 'package:invoiceninja_flutter/utils/localization.dart';
|
import 'package:invoiceninja_flutter/utils/localization.dart';
|
||||||
|
|
||||||
class ClientEditContacts extends StatelessWidget {
|
class ClientEditContacts extends StatefulWidget {
|
||||||
const ClientEditContacts({
|
const ClientEditContacts({
|
||||||
Key key,
|
Key key,
|
||||||
@required this.viewModel,
|
@required this.viewModel,
|
||||||
}) : super(key: key);
|
}) : super(key: key);
|
||||||
|
|
||||||
final ClientEditVM viewModel;
|
final ClientEditContactsVM viewModel;
|
||||||
|
|
||||||
|
@override
|
||||||
|
_ClientEditContactsState createState() => new _ClientEditContactsState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _ClientEditContactsState extends State<ClientEditContacts> {
|
||||||
|
|
||||||
|
ContactEntity selectedContact;
|
||||||
|
|
||||||
void _showContactEditor(ContactEntity contact, BuildContext context) {
|
void _showContactEditor(ContactEntity contact, BuildContext context) {
|
||||||
showDialog<ContactEditDetails>(
|
showDialog<ContactEditDetails>(
|
||||||
context: context,
|
context: context,
|
||||||
builder: (BuildContext context) {
|
builder: (BuildContext context) {
|
||||||
|
final viewModel = widget.viewModel;
|
||||||
final client = viewModel.client;
|
final client = viewModel.client;
|
||||||
|
|
||||||
return ContactEditDetails(
|
return ContactEditDetails(
|
||||||
|
|
@ -34,13 +43,26 @@ class ClientEditContacts extends StatelessWidget {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final localization = AppLocalization.of(context);
|
final localization = AppLocalization.of(context);
|
||||||
|
final viewModel = widget.viewModel;
|
||||||
final client = viewModel.client;
|
final client = viewModel.client;
|
||||||
|
|
||||||
final contacts = client.contacts.map((contact) => ContactListTile(
|
final contacts = client.contacts.map((contact) => ContactListTile(
|
||||||
contact: contact,
|
contact: contact,
|
||||||
onTap: () => _showContactEditor(contact, context),
|
onTap: () => _showContactEditor(contact, context),
|
||||||
));
|
));
|
||||||
|
|
||||||
|
/*
|
||||||
|
final contact = client.contacts.contains(viewModel.contact)
|
||||||
|
? viewModel.contact
|
||||||
|
: null;
|
||||||
|
|
||||||
|
if (contact != null && contact != selectedContact) {
|
||||||
|
selectedContact = contact;
|
||||||
|
WidgetsBinding.instance.addPostFrameCallback((duration) {
|
||||||
|
_showContactEditor(contact, context);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
return ListView(
|
return ListView(
|
||||||
children: []
|
children: []
|
||||||
..addAll(contacts)
|
..addAll(contacts)
|
||||||
|
|
@ -100,7 +122,7 @@ class ContactEditDetails extends StatefulWidget {
|
||||||
|
|
||||||
final int index;
|
final int index;
|
||||||
final ContactEntity contact;
|
final ContactEntity contact;
|
||||||
final ClientEditVM viewModel;
|
final ClientEditContactsVM viewModel;
|
||||||
final bool isRemoveVisible;
|
final bool isRemoveVisible;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,64 @@
|
||||||
|
import 'package:flutter/foundation.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_redux/flutter_redux.dart';
|
||||||
|
import 'package:invoiceninja_flutter/ui/client/edit/client_edit_contacts.dart';
|
||||||
|
import 'package:redux/redux.dart';
|
||||||
|
import 'package:invoiceninja_flutter/redux/client/client_actions.dart';
|
||||||
|
import 'package:invoiceninja_flutter/data/models/models.dart';
|
||||||
|
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
|
||||||
|
|
||||||
|
class ClientEditContactsScreen extends StatelessWidget {
|
||||||
|
const ClientEditContactsScreen({Key key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return StoreConnector<AppState, ClientEditContactsVM>(
|
||||||
|
converter: (Store<AppState> store) {
|
||||||
|
return ClientEditContactsVM.fromStore(store);
|
||||||
|
},
|
||||||
|
builder: (context, vm) {
|
||||||
|
return ClientEditContacts(
|
||||||
|
viewModel: vm,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ClientEditContactsVM {
|
||||||
|
final CompanyEntity company;
|
||||||
|
final ClientEntity client;
|
||||||
|
final ContactEntity contact;
|
||||||
|
final Function() onAddContactPressed;
|
||||||
|
final Function(int) onRemoveContactPressed;
|
||||||
|
final Function onDoneContactPressed;
|
||||||
|
final Function(ContactEntity, int) onChangedContact;
|
||||||
|
|
||||||
|
ClientEditContactsVM({
|
||||||
|
@required this.company,
|
||||||
|
@required this.client,
|
||||||
|
@required this.contact,
|
||||||
|
@required this.onAddContactPressed,
|
||||||
|
@required this.onRemoveContactPressed,
|
||||||
|
@required this.onDoneContactPressed,
|
||||||
|
@required this.onChangedContact,
|
||||||
|
});
|
||||||
|
|
||||||
|
factory ClientEditContactsVM.fromStore(Store<AppState> store) {
|
||||||
|
final AppState state = store.state;
|
||||||
|
final client = state.clientUIState.editing;
|
||||||
|
|
||||||
|
return ClientEditContactsVM(
|
||||||
|
company: state.selectedCompany,
|
||||||
|
client: client,
|
||||||
|
contact: state.clientUIState.editingContact,
|
||||||
|
onAddContactPressed: () => store.dispatch(AddContact()),
|
||||||
|
onRemoveContactPressed: (index) =>
|
||||||
|
store.dispatch(DeleteContact(index)),
|
||||||
|
onDoneContactPressed: () => store.dispatch(EditContact()),
|
||||||
|
onChangedContact: (contact, index) {
|
||||||
|
store.dispatch(
|
||||||
|
UpdateContact(contact: contact, index: index));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -40,9 +40,6 @@ class ClientEditVM {
|
||||||
final ClientEntity client;
|
final ClientEntity client;
|
||||||
final ClientEntity origClient;
|
final ClientEntity origClient;
|
||||||
final Function(ClientEntity) onChanged;
|
final Function(ClientEntity) onChanged;
|
||||||
final Function() onAddContactPressed;
|
|
||||||
final Function(int) onRemoveContactPressed;
|
|
||||||
final Function(ContactEntity, int) onChangedContact;
|
|
||||||
final Function(BuildContext) onSavePressed;
|
final Function(BuildContext) onSavePressed;
|
||||||
final Function onBackPressed;
|
final Function onBackPressed;
|
||||||
final BuiltMap<int, CountryEntity> countryMap;
|
final BuiltMap<int, CountryEntity> countryMap;
|
||||||
|
|
@ -54,9 +51,6 @@ class ClientEditVM {
|
||||||
@required this.isSaving,
|
@required this.isSaving,
|
||||||
@required this.client,
|
@required this.client,
|
||||||
@required this.origClient,
|
@required this.origClient,
|
||||||
@required this.onAddContactPressed,
|
|
||||||
@required this.onRemoveContactPressed,
|
|
||||||
@required this.onChangedContact,
|
|
||||||
@required this.onChanged,
|
@required this.onChanged,
|
||||||
@required this.onSavePressed,
|
@required this.onSavePressed,
|
||||||
@required this.onBackPressed,
|
@required this.onBackPressed,
|
||||||
|
|
@ -79,11 +73,6 @@ class ClientEditVM {
|
||||||
isSaving: state.isSaving,
|
isSaving: state.isSaving,
|
||||||
onBackPressed: () =>
|
onBackPressed: () =>
|
||||||
store.dispatch(UpdateCurrentRoute(ClientScreen.route)),
|
store.dispatch(UpdateCurrentRoute(ClientScreen.route)),
|
||||||
onAddContactPressed: () => store.dispatch(AddContact()),
|
|
||||||
onRemoveContactPressed: (index) => store.dispatch(DeleteContact(index)),
|
|
||||||
onChangedContact: (contact, index) {
|
|
||||||
store.dispatch(UpdateContact(contact: contact, index: index));
|
|
||||||
},
|
|
||||||
onChanged: (ClientEntity client) =>
|
onChanged: (ClientEntity client) =>
|
||||||
store.dispatch(UpdateClient(client)),
|
store.dispatch(UpdateClient(client)),
|
||||||
onSavePressed: (BuildContext context) {
|
onSavePressed: (BuildContext context) {
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ class InvoiceEditItems extends StatefulWidget {
|
||||||
}
|
}
|
||||||
|
|
||||||
class _InvoiceEditItemsState extends State<InvoiceEditItems> {
|
class _InvoiceEditItemsState extends State<InvoiceEditItems> {
|
||||||
InvoiceItemEntity dialogInvoiceItem;
|
InvoiceItemEntity selectedInvoiceItem;
|
||||||
|
|
||||||
void _showInvoiceItemEditor(
|
void _showInvoiceItemEditor(
|
||||||
InvoiceItemEntity invoiceItem, BuildContext context) {
|
InvoiceItemEntity invoiceItem, BuildContext context) {
|
||||||
|
|
@ -47,8 +47,8 @@ class _InvoiceEditItemsState extends State<InvoiceEditItems> {
|
||||||
? viewModel.invoiceItem
|
? viewModel.invoiceItem
|
||||||
: null;
|
: null;
|
||||||
|
|
||||||
if (invoiceItem != null && invoiceItem != dialogInvoiceItem) {
|
if (invoiceItem != null && invoiceItem != selectedInvoiceItem) {
|
||||||
dialogInvoiceItem = invoiceItem;
|
selectedInvoiceItem = invoiceItem;
|
||||||
WidgetsBinding.instance.addPostFrameCallback((duration) {
|
WidgetsBinding.instance.addPostFrameCallback((duration) {
|
||||||
_showInvoiceItemEditor(invoiceItem, context);
|
_showInvoiceItemEditor(invoiceItem, context);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue