@@ -2,6 +2,10 @@ import 'package:flutter/material.dart';
2
2
import 'package:flutter_form_builder/flutter_form_builder.dart' ;
3
3
import 'package:form_builder_validators/form_builder_validators.dart' ;
4
4
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.
5
9
class DynamicFields extends StatefulWidget {
6
10
const DynamicFields ({Key ? key}) : super (key: key);
7
11
@@ -12,6 +16,7 @@ class DynamicFields extends StatefulWidget {
12
16
class _DynamicFieldsState extends State <DynamicFields > {
13
17
final _formKey = GlobalKey <FormBuilderState >();
14
18
final List <Widget > fields = [];
19
+ var _newTextFieldId = 0 ;
15
20
String savedValue = '' ;
16
21
17
22
@override
@@ -65,12 +70,15 @@ class _DynamicFieldsState extends State<DynamicFields> {
65
70
style: TextStyle (color: Colors .white),
66
71
),
67
72
onPressed: () {
73
+ final newTextFieldName = 'name_${_newTextFieldId ++}' ;
74
+ final newTextFieldKey = ValueKey (_newTextFieldId);
68
75
setState (() {
69
76
fields.add (NewTextField (
70
- name: 'name_${fields .length }' ,
77
+ key: newTextFieldKey,
78
+ name: newTextFieldName,
71
79
onDelete: () {
72
80
setState (() {
73
- fields.removeAt (fields.length - 1 );
81
+ fields.removeWhere ((e) => e.key == newTextFieldKey );
74
82
});
75
83
},
76
84
));
0 commit comments