我想在我的應用程式中擁有4個textField。在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(...) //從服務器獲取。
.then((onValue) {
for(int i = 0; i < onValue.esd.data.length; i ) {
_controllers[i].text = onValue.esd.data['name'/span>] 。
}
setState(() {})。
});
});
super.initState()。
}
這里是小部件的構建
Widget _showQueries() {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
....
ListView.builder()
物理學。NeverScrollableScrollPhysics()。
shrinkWrap: true。
itemCount: 4。
itemBuilder。(context, index) {
return Padding(
padding: EdgeInsets.all(5)。
孩子。TextField(
maxLines: 2,
控制器。_controllers[index],
裝飾。InputDecoration(
邊框。輪廓輸入邊框()
borderRadius: const BorderRadius.all(
const Radius.round(5.0) )。
contentPadding: EdgeInsets.all(10)。
)));
},
)
],
);
}
錯誤
RangeError (index): 無效值。唯一有效的值是 0。1。
uj5u.com熱心網友回復:
你得到這個錯誤是由于你的_controller var.在開始創建widget時,這個變數包含一個TextEditingController型別的空串列。現在當initstate被呼叫時,你在該串列中添加了一個TextEditingController,但是你只添加了一個控制器,而不是4個,而且Dart在編譯時沒有對該串列進行計數,所以你可能在運行時得到錯誤。
可能的解決方法是,不要在initState中添加控制器,只需在該串列中添加4個控制器。
List<TextEditingController> _controllers = [
TextEditingController()。
TextEditingController()。
TextEditingController()。
TextEditingController(),
];
現在你可能不會得到一個范圍錯誤
。uj5u.com熱心網友回復:
請讓我們知道你在 "onValue "這個變數中從服務器得到了什么回應。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/315703.html
標籤:
