This commit is contained in:
unknown 2018-06-12 00:38:47 -07:00
parent 79e995828a
commit a9b9a68cd3
3 changed files with 54 additions and 19 deletions

View File

@ -1050,7 +1050,7 @@ class _$ClientEntity extends ClientEntity {
creditNumberCounter == other.creditNumberCounter &&
customValue1 == other.customValue1 &&
customValue2 == other.customValue2 &&
contacts == other.contacts &&
contacts == other.contactKeys &&
id == other.id &&
updatedAt == other.updatedAt &&
archivedAt == other.archivedAt &&

View File

@ -85,6 +85,7 @@ class _ClientEditState extends State<ClientEdit>
detailsKey: _detailsKey,
billingAddressKey: _billingAddressKey,
shippingAddressKey: _shippingAddressKey,
contactsKey: _contactsKey,
)
],
bottom: TabBar(
@ -119,11 +120,6 @@ class _ClientEditState extends State<ClientEdit>
}
}
/*
abstract class EntityEditor extends StatefulWidget {
onSaveClicked(ClientEntity client);
}
*/
class SaveButton extends StatelessWidget {
final ClientEditVM viewModel;
@ -173,6 +169,7 @@ class SaveButton extends StatelessWidget {
var detailsState = detailsKey.currentState;
var billingAddressState = billingAddressKey.currentState;
//var shippingAddressState = shippingAddressKey.currentState;
var contactState = contactsKey.currentState;
ClientEntity client = viewModel.client.rebuild((b) => b
..name = detailsState.name
@ -180,18 +177,19 @@ class SaveButton extends StatelessWidget {
..vatNumber = detailsState.vatNumber
..website = detailsState.website
..workPhone = detailsState.phone
/*
..address1 = billingAddressState.address1
..address2 = billingAddressState.address2
..city = billingAddressState.city
..state = billingAddressState.state
..postalCode = billingAddressState.postalCode
/*
..shippingAddress1 = shippingAddressState.shippingAddress1
..shippingAddress2 = shippingAddressState.shippingAddress2
..shippingCity = shippingAddressState.shippingCity
..shippingState = shippingAddressState.shippingState
..shippingPostalCode = shippingAddressState.shippingPostalCode
*/
..contacts.replace(contactState.getContacts())
);
viewModel.onSaveClicked(context, client);

View File

@ -1,3 +1,4 @@
import 'package:built_collection/built_collection.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:invoiceninja/data/models/models.dart';
@ -18,28 +19,63 @@ class ClientEditContacts extends StatefulWidget {
class ClientEditContactsState extends State<ClientEditContacts>
with AutomaticKeepAliveClientMixin {
List<ContactEntity> contacts;
Map<ContactEntity, GlobalKey<ContactEditDetailsState>> contactKeys;
@override
bool get wantKeepAlive => true;
@override
void initState() {
super.initState();
contactKeys = Map.fromIterable(widget.client.contacts,
key: (contact) => contact,
value: (contact) => GlobalKey<ContactEditDetailsState>(),
);
}
List<ContactEntity> getContacts() {
List<ContactEntity> contacts = [];
contactKeys.forEach((contact, contactKey) {
contacts.add(contactKey.currentState.getContact());
});
return contacts;
}
@override
Widget build(BuildContext context) {
var localization = AppLocalization.of(context);
var client = widget.client;
return KeyboardAwarePadding(
child: ListView(
children: client.contacts
.map((contact) => ContactSettings(contact))
.toList()),
);
return ListView(
children: client.contacts.map((contact) {
return ContactEditDetails(
contact: contact,
key: contactKeys[contact],
);
}).toList());
}
}
class ContactSettings extends StatelessWidget {
ContactSettings(this.contact);
ContactEntity contact;
class ContactEditDetails extends StatefulWidget {
ContactEditDetails({
Key key,
@required this.contact,
}) : super(key: key);
final ContactEntity contact;
@override
ContactEditDetailsState createState() => ContactEditDetailsState();
}
class ContactEditDetailsState extends State<ContactEditDetails> {
String _firstName;
ContactEntity getContact() {
return ContactEntity((b) => b
..firstName = _firstName);
}
@override
Widget build(BuildContext context) {
@ -56,9 +92,10 @@ class ContactSettings extends StatelessWidget {
children: <Widget>[
TextFormField(
autocorrect: false,
initialValue: contact.firstName,
initialValue: widget.contact.firstName,
onSaved: (value) => _firstName = value.trim(),
decoration: InputDecoration(
labelText: localization.website,
labelText: localization.firstName,
),
),
],