【发布时间】:2021-08-23 04:04:30
【问题描述】:
我想在我的应用程序中有 4 个文本字段。在initState中,它会从服务器获取数据,然后将文本放入textField中。
List<TextEditingController> _controllers = [];
@override
void initState() {
_controllers.add(TextEditingController());
_controllers[0] = TextEditingController();
_controllers[1] = TextEditingController();
_controllers[2] = TextEditingController();
_controllers[3] = TextEditingController();
sharedPreferences.getUser().then((onValue) {
_bloc
.getData(...) // fetch from server
.then((onValue) {
for (int i = 0; i < onValue.esd.data.length; i++) {
_controllers[i].text = onValue.esd.data['name'];
}
setState(() {});
});
});
super.initState();
}
小部件在这里构建
Widget _showQueries() {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
....
ListView.builder(
physics: NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemCount: 4,
itemBuilder: (context, index) {
return Padding(
padding: EdgeInsets.all(5),
child: TextField(
maxLines: 2,
controller: _controllers[index],
decoration: InputDecoration(
border: OutlineInputBorder(
borderRadius: const BorderRadius.all(
const Radius.circular(5.0))),
contentPadding: EdgeInsets.all(10),
)));
},
)
],
);
}
错误
RangeError (index): Invalid value: Only valid value is 0: 1
【问题讨论】: