显示四个textField
Display four textField
我想在我的应用程序中有 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
请让我们知道您在“onValue”这个变量中从服务器得到什么响应。
由于您的 _controller 变量,您收到此错误。在开始创建小部件时,该变量包含类型为 TextEditingController 的空列表。现在,当 initstate 被调用时,您向该列表 TextEditingController 添加了一个 ,但您只添加了一个controller 不是 4,并且 Dart 在编译期间没有对该列表进行计数,因此您可能在运行期间遇到错误。
可能的解决方法不是在 initState 中添加控制器,而是在该列表中添加 4 个控制器。
List<TextEditingController> _controllers = [
TextEditingController(),
TextEditingController(),
TextEditingController(),
TextEditingController(),
];
现在您可能不会收到 范围错误
我想在我的应用程序中有 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
请让我们知道您在“onValue”这个变量中从服务器得到什么响应。
由于您的 _controller 变量,您收到此错误。在开始创建小部件时,该变量包含类型为 TextEditingController 的空列表。现在,当 initstate 被调用时,您向该列表 TextEditingController 添加了一个 ,但您只添加了一个controller 不是 4,并且 Dart 在编译期间没有对该列表进行计数,因此您可能在运行期间遇到错误。
可能的解决方法不是在 initState 中添加控制器,而是在该列表中添加 4 个控制器。
List<TextEditingController> _controllers = [
TextEditingController(),
TextEditingController(),
TextEditingController(),
TextEditingController(),
];
现在您可能不会收到 范围错误