我确信有多种方法可以做到这一点,但这里有一种相当简单的方法。
创建一个Map,其中键是TextFormField,值是TextEditingController。
Map<TextFormField, TextEditingController> fields = new Map<TextFormField, TextEditingController>();
为每个帖子创建一个新的控制器和文本字段并将它们添加到地图中。
fields[text] = controller;
当您想要获取值时,可以将文本字段传递给从 Map 获取该字段的控制器的方法。
这是一个非常基本的例子,说明了它是如何工作的:
import 'package:flutter/material.dart';
class DynamicTextFieldsWithControllers extends StatefulWidget {
@override
State<StatefulWidget> createState() => DynamicTextFieldsWithControllersState();
}
class DynamicTextFieldsWithControllersState extends State<DynamicTextFieldsWithControllers> {
Map<TextFormField, TextEditingController> fields = new Map<TextFormField, TextEditingController>();
@override
Widget build(BuildContext context) {
List<Widget> widgets = [];
for(int i = 0; i < 5; i++) {
TextEditingController controller = new TextEditingController();
TextFormField text = TextFormField(
controller: controller,
);
fields[text] = controller;
widgets.add(Container(
margin: EdgeInsets.symmetric(horizontal: 8.0, vertical: 15.0),
child: Column(children: [
text,
FlatButton(
color: Colors.blue,
child: Text("Submit", style: TextStyle(color: Colors.white)),
onPressed: () {
getTextValue(text);
},
)
],)
));
}
return Scaffold(
body: Column(children: widgets),
);
}
getTextValue(TextFormField text) {
TextEditingController controller = fields[text];
String value = controller.text;
print(value);
return value;
}
}