提问人:Mohammed Safvan 提问时间:9/20/2022 最后编辑:Mohammed Safvan 更新时间:9/20/2022 访问量:48
Flutter : 下拉可重用性
Flutter : Dropdown reusability
问:
我需要重用一个下拉小部件,所以我创建了一个方法。我是这样打电话的:
buildDropDown("Blood Group", bloodGroups, _groupSelected),
方法定义:
DropdownButtonFormField2<String> buildDropDown(
String label,
List<String> items,
String? selectedElement,
) {
return DropdownButtonFormField2(
items: items.map((String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value),
);
}).toList(),
value: selectedElement,
onChanged: (value) {
if (value != null) {
setState(() {
selectedElement = value.toString();
});
}
log(selectedElement); // correct value
log(_groupSelected); // null; though I am giving _groupSelected as selectedElement
},
hint: Text(label),
);
}
因此,我认为这是由于传递值,并决定给出一个函数作为参数来更改变量。但我不知道怎么做,因为:
() => selectedElement = value.toString(); // "value" only available in the onChange:
我尝试创建一个小部件,但它没有按预期工作
法典:
class DropDownWidget extends StatefulWidget {
DropDownWidget(
{Key? key,
required this.selectedElement,
required this.label,
required this.elements})
: super(key: key);
String? selectedElement;
String label;
List<String> elements;
@override
State<DropDownWidget> createState() => _DropDownWidgetState();
}
class _DropDownWidgetState extends State<DropDownWidget> {
@override
Widget build(BuildContext context) {
return DropdownButtonFormField2(
items: widget.elements.map((String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value),
);
}).toList(),
value: widget.selectedElement,
onChanged: (value) {
if (value != null) {
setState(() => widget.selectedElement = value.toString());
}
},
hint: Text(widget.label),
);
}
}
如何重用 DropDown?
答:
1赞
eamirho3ein
9/20/2022
#1
尝试将函数传递给它:
DropdownButtonFormField2<String> buildDropDown(String label,
List<String> items, String? selectedElement, Function(String) onChanged) {
return DropdownButtonFormField2(
items: items.map((String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value),
);
}).toList(),
value: selectedElement,
onChanged: onChanged,
hint: Text(label),
);
}
然后我们像这样:
buildDropDown(
"Blood Group",
bloodGroups,
(value) {
if (value != null) {
setState(() {
_groupSelected = value.toString();
});
},
}
)
评论