import 'package:built_collection/built_collection.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:invoiceninja/data/models/models.dart'; import 'package:invoiceninja/ui/client/edit/client_edit.dart'; import 'package:invoiceninja/utils/localization.dart'; class ClientEditContacts extends StatefulWidget { ClientEditContacts({ Key key, @required this.client, }) : super(key: key); final ClientEntity client; @override ClientEditContactsState createState() => new ClientEditContactsState(); } class ClientEditContactsState extends State with AutomaticKeepAliveClientMixin { List contacts; List> contactKeys; @override bool get wantKeepAlive => true; @override void initState() { super.initState(); var client = widget.client; contacts = client.contacts.toList(); contactKeys = client.contacts .map((contact) => GlobalKey()) .toList(); // Add initial blank contact _onAddPressed(); } List getContacts() { List contacts = []; contactKeys.forEach((contactKey) { contacts.add(contactKey.currentState.getContact()); }); return contacts; } _onAddPressed() { print('onAddPressed..'); setState(() { contacts.add(ContactEntity()); contactKeys.add(GlobalKey()); }); } @override Widget build(BuildContext context) { var localization = AppLocalization.of(context); List items = []; for (var i=0; i ContactEditDetailsState(); } class ContactEditDetailsState extends State { String _firstName; ContactEntity getContact() { return ContactEntity((b) => b..firstName = _firstName); } @override Widget build(BuildContext context) { var localization = AppLocalization.of(context); return Padding( padding: const EdgeInsets.only(bottom: 8.0), child: Card( elevation: 2.0, child: Padding( padding: const EdgeInsets.only( left: 12.0, right: 12.0, top: 12.0, bottom: 18.0), child: Column( children: [ TextFormField( autocorrect: false, initialValue: widget.contact.firstName, onSaved: (value) => _firstName = value.trim(), decoration: InputDecoration( labelText: localization.firstName, ), ), ], ), ), ), ); } }