【发布时间】:2019-05-07 18:14:22
【问题描述】:
我猜我遗漏了一些简单的东西,但我已经在这几天尝试了所有可能的解决方案。我们如何处理 listview.builder 中的下拉选择?是否可以将下拉按钮值存储在 List-String- 中?
我正在创建一个基于 XML 模板的动态表单,并具有下拉菜单、复选框、输入等。编辑: 在页面加载时解析 XML 之前,我不知道需要哪些小部件.因此尝试将动态创建的小部件列表传递给 Listview.builder。
下面的代码是一个未能更新的基本示例。
在这里感谢任何建议。
import 'package:flutter/material.dart';
class FormEG extends StatefulWidget {
@override
_FormEGState createState() => new _FormEGState();
}
class _FormEGState extends State<FormEG> {
List<String> _listValues;
List<DropdownMenuItem<String>> _items;
List<Widget> _widgets;
@override
void initState() {
_listValues = new List<String>();
_listValues.add("b");
_items = new List<DropdownMenuItem<String>>();
_items.add(new DropdownMenuItem(child: Text("a"), value: "a"));
_items.add(new DropdownMenuItem(child: Text("b"), value: "b"));
_items.add(new DropdownMenuItem(child: Text("c"), value: "c"));
_items.add(new DropdownMenuItem(child: Text("d"), value: "d"));
_widgets = new List<Widget>();
_widgets.add(new DropdownButton<String>(
value: _listValues[0],
items: _items,
onChanged: (String newValue) {
setState(() {
_listValues[0] = newValue;
});
},
));
}
@override
Widget build(BuildContext context) {
return new Scaffold(
body: new ListView.builder(
itemCount: _widgets.length,
itemBuilder: (context, index) {
return _widgets[index];
},
));
}
}
【问题讨论】:
-
您的 _widgets[0] 没有得到更新,它在每个 setState 上都有相同的按钮。 SetState() 再次调用 Build 方法并再次绘制 Button 但在您的情况下,您在 _widgets[index] 处分配了静态按钮。您必须在 Build Method 而不是 InitState 中移动 Widget 绘图方法。
标签: listview dart flutter dropdownbutton