当我使用普通列表或 ListView.Builder 时出现范围错误。如何获得以下 TextFormFields 的总和?
Getting Range Error when I use normal List or ListView.Builder. How do I get the sum of below TextFormFields?
int numberOfTextFields = 1;
List<TextEditingController> textFieldControllers = [];
final _numsFormKey = GlobalKey<FormState>();
Form(
key: _numsFormKey,
child: ListView.builder(
shrinkWrap: true,
itemCount: numberOfTextFields,
itemBuilder: (BuildContext? context, int? index) {
int i = index! + 1;
return Row(
children: [
Container(
height: 52,
width: 140,
margin: EdgeInsets.only(left: 20.0, bottom: 10),
child: TextFormField(
keyboardType: TextInputType.number,
// controller: textFieldControllers[index], //getting range error if i use this
decoration: InputDecoration(
hintText: 'Enter Number $i',
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(5.0),
),
),
style: TextStyle(
color: Color.fromARGB(255, 0, 0, 0),
fontWeight: FontWeight.w400,
fontSize: 24,
),
validator: (value) {
if (value!.isEmpty) {
return "Enter or delete";
} else if (value.length > 12) {
return "Enter < 12 digits";
}
return null;
},
onSaved: (value) {}
在下面使用的 IconButton onpressed:
onPressed: () {
print("number of boxes=$numberOfTextFields");
textFieldControllers
.add(TextEditingController());
numberOfTextFields++;
setState(() {
});
}),
有一个保存按钮,点击它:
_validateNums() async {
if (_numsFormKey.currentState != null &&
_numsFormKey.currentState!.validate()) {
_numsFormKey.currentState!.save();
} else {
}
}
当我在 OnSaved{} 中打印(值)或打印(int.parse(值))时,它会打印我输入的所有值。
double totalsum = (textFieldControllers.fold(0,(previousValue, element) {return previousValue +
double.tryParse(element.value.text)!; + double.parse(element.value.text);
我无法使用上面的内容,因为在 TextFormField 中使用控制器时出现范围错误。
如何在单击“保存”按钮时获得所有这些值的总和。我尝试使用 for 循环但它没有用
int numberOfTextFields = 1;
List<TextEditingController> textFieldControllers = [];
你声明你有 1 个文本字段,但一开始你有 0 个,你总是会说你有更多的文本字段,这就是你得到范围错误的原因。
此外,textFieldControllers
是一个列表,这意味着它有一个长度方法可以为您跟踪项目的数量:
print("number of boxes=${textFieldControllers.length}");
...
itemCount: textFieldControllers.length,
itemBuilder: (BuildContext? context, int? index) {
...
int numberOfTextFields = 1;
List<TextEditingController> textFieldControllers = [];
final _numsFormKey = GlobalKey<FormState>();
Form(
key: _numsFormKey,
child: ListView.builder(
shrinkWrap: true,
itemCount: numberOfTextFields,
itemBuilder: (BuildContext? context, int? index) {
int i = index! + 1;
return Row(
children: [
Container(
height: 52,
width: 140,
margin: EdgeInsets.only(left: 20.0, bottom: 10),
child: TextFormField(
keyboardType: TextInputType.number,
// controller: textFieldControllers[index], //getting range error if i use this
decoration: InputDecoration(
hintText: 'Enter Number $i',
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(5.0),
),
),
style: TextStyle(
color: Color.fromARGB(255, 0, 0, 0),
fontWeight: FontWeight.w400,
fontSize: 24,
),
validator: (value) {
if (value!.isEmpty) {
return "Enter or delete";
} else if (value.length > 12) {
return "Enter < 12 digits";
}
return null;
},
onSaved: (value) {}
在下面使用的 IconButton onpressed:
onPressed: () {
print("number of boxes=$numberOfTextFields");
textFieldControllers
.add(TextEditingController());
numberOfTextFields++;
setState(() {
});
}),
有一个保存按钮,点击它:
_validateNums() async {
if (_numsFormKey.currentState != null &&
_numsFormKey.currentState!.validate()) {
_numsFormKey.currentState!.save();
} else {
}
}
当我在 OnSaved{} 中打印(值)或打印(int.parse(值))时,它会打印我输入的所有值。
double totalsum = (textFieldControllers.fold(0,(previousValue, element) {return previousValue +
double.tryParse(element.value.text)!; + double.parse(element.value.text);
我无法使用上面的内容,因为在 TextFormField 中使用控制器时出现范围错误。
如何在单击“保存”按钮时获得所有这些值的总和。我尝试使用 for 循环但它没有用
int numberOfTextFields = 1;
List<TextEditingController> textFieldControllers = [];
你声明你有 1 个文本字段,但一开始你有 0 个,你总是会说你有更多的文本字段,这就是你得到范围错误的原因。
此外,textFieldControllers
是一个列表,这意味着它有一个长度方法可以为您跟踪项目的数量:
print("number of boxes=${textFieldControllers.length}");
...
itemCount: textFieldControllers.length,
itemBuilder: (BuildContext? context, int? index) {
...