Documents

This commit is contained in:
Hillel Coren 2023-08-13 16:36:24 +03:00
parent b743cf7b78
commit 86c653a090
1 changed files with 28 additions and 23 deletions

View File

@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
// Project imports: // Project imports:
import 'package:invoiceninja_flutter/ui/app/edit_scaffold.dart'; import 'package:invoiceninja_flutter/ui/app/edit_scaffold.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/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart'; import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
import 'package:invoiceninja_flutter/ui/document/edit/document_edit_vm.dart'; import 'package:invoiceninja_flutter/ui/document/edit/document_edit_vm.dart';
import 'package:invoiceninja_flutter/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/completers.dart';
@ -26,20 +27,20 @@ class _DocumentEditState extends State<DocumentEdit> {
GlobalKey<FormState>(debugLabel: '_documentEdit'); GlobalKey<FormState>(debugLabel: '_documentEdit');
final _debouncer = Debouncer(); final _debouncer = Debouncer();
// STARTER: controllers - do not remove comment final _nameController = TextEditingController();
List<TextEditingController> _controllers = []; List<TextEditingController> _controllers = [];
@override @override
void didChangeDependencies() { void didChangeDependencies() {
_controllers = [ _controllers = [
// STARTER: array - do not remove comment _nameController,
]; ];
_controllers.forEach((controller) => controller.removeListener(_onChanged)); _controllers.forEach((controller) => controller.removeListener(_onChanged));
//final document = widget.viewModel.document; final document = widget.viewModel.document;
// STARTER: read value - do not remove comment _nameController.text = document.name;
_controllers.forEach((controller) => controller.addListener(_onChanged)); _controllers.forEach((controller) => controller.addListener(_onChanged));
@ -57,9 +58,8 @@ class _DocumentEditState extends State<DocumentEdit> {
} }
void _onChanged() { void _onChanged() {
final document = widget.viewModel.document.rebuild((b) => b final document = widget.viewModel.document
// STARTER: set value - do not remove comment .rebuild((b) => b..name = _nameController.text.trim());
);
if (document != widget.viewModel.document) { if (document != widget.viewModel.document) {
_debouncer.run(() { _debouncer.run(() {
widget.viewModel.onChanged(document); widget.viewModel.onChanged(document);
@ -67,6 +67,16 @@ class _DocumentEditState extends State<DocumentEdit> {
} }
} }
void _onSavePressed() {
final bool isValid = _formKey.currentState.validate();
if (!isValid) {
return;
}
widget.viewModel.onSavePressed(context);
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final viewModel = widget.viewModel; final viewModel = widget.viewModel;
@ -77,21 +87,7 @@ class _DocumentEditState extends State<DocumentEdit> {
entity: document, entity: document,
title: title:
document.isNew ? localization.newDocument : localization.editDocument, document.isNew ? localization.newDocument : localization.editDocument,
onSavePressed: (context) { onSavePressed: (_) => _onSavePressed(),
final bool isValid = _formKey.currentState.validate();
/*
setState(() {
autoValidate = !isValid ?? false;
});
*/
if (!isValid) {
return;
}
viewModel.onSavePressed(context);
},
body: Form( body: Form(
key: _formKey, key: _formKey,
child: Builder(builder: (BuildContext context) { child: Builder(builder: (BuildContext context) {
@ -99,7 +95,16 @@ class _DocumentEditState extends State<DocumentEdit> {
children: <Widget>[ children: <Widget>[
FormCard( FormCard(
children: <Widget>[ children: <Widget>[
// STARTER: widgets - do not remove comment DecoratedFormField(
autofocus: true,
label: localization.name,
keyboardType: TextInputType.text,
controller: _nameController,
onSavePressed: (_) => _onSavePressed(),
validator: (value) => value.trim().isEmpty
? localization.pleaseEnterAName
: null,
),
], ],
), ),
], ],