@@ -2,6 +2,10 @@ import 'package:flutter/material.dart';
22import 'package:flutter_form_builder/flutter_form_builder.dart' ;
33import 'package:form_builder_validators/form_builder_validators.dart' ;
44
5+ /// ## Caveats
6+ /// There is a limitation of 2^53 - 1 (approximately 10^15) on the number of new
7+ /// fields that can be added to this widget. For the purposes of the widget, it
8+ /// is more than sufficient.
59class DynamicFields extends StatefulWidget {
610 const DynamicFields ({Key ? key}) : super (key: key);
711
@@ -12,6 +16,7 @@ class DynamicFields extends StatefulWidget {
1216class _DynamicFieldsState extends State <DynamicFields > {
1317 final _formKey = GlobalKey <FormBuilderState >();
1418 final List <Widget > fields = [];
19+ var _newTextFieldId = 0 ;
1520 String savedValue = '' ;
1621
1722 @override
@@ -65,12 +70,15 @@ class _DynamicFieldsState extends State<DynamicFields> {
6570 style: TextStyle (color: Colors .white),
6671 ),
6772 onPressed: () {
73+ final newTextFieldName = 'name_${_newTextFieldId ++}' ;
74+ final newTextFieldKey = ValueKey (_newTextFieldId);
6875 setState (() {
6976 fields.add (NewTextField (
70- name: 'name_${fields .length }' ,
77+ key: newTextFieldKey,
78+ name: newTextFieldName,
7179 onDelete: () {
7280 setState (() {
73- fields.removeAt (fields.length - 1 );
81+ fields.removeWhere ((e) => e.key == newTextFieldKey );
7482 });
7583 },
7684 ));
0 commit comments