Flutter DropdownMenu 不显示所选项目
Flutter DropdownMenu not showing selected item
我的应用程序中有一个下拉菜单,位于自定义刷新栏(类似于小吃栏)内。每次应用 运行 时,flushbar 都会弹出,直到用户将其关闭。为了在我的应用程序中使用 flushbar,我使用了一个异步函数并在 initState() 中调用了 future 中的函数——如果不这样做,我的 snackbar 或 flushbar 没有显示,请检查下面的代码:
@override
void initState() {
super.initState();
Future(() {
withInputField(context);
});
withInputField(BuildContext context) async {...}
所以,我面临的问题是下拉菜单无法正常工作。在我 select 一个项目之后,我希望该项目能够替换下拉按钮中的提示文本。它工作正常,如果我将菜单放在小部件构建脚手架中,但是当我将相同的代码放在 withInputField(..) 函数中时,selected 项为空。下面是我的下拉代码:
class Company {
final int id;
final String name;
Company(this.id, this.name);
}
Company _selectedCompany;
List<Company> getCompany = <Company>[
Company(1, 'Apple'),
Company(2, 'Google'),
Company(3, 'Samsung'),
Company(4, 'Sony'),
Company(5, 'LG'),
];
下面的代码在异步函数 withInputField 中。
DropdownButton<Company>(
hint: Text('Select company'),
value: _selectedCompany,
onChanged: (Company val) {
setState(() {
_selectedCompany = val;
});
},
items: getCompany.map((Company company) {
return DropdownMenuItem<Company>(
value: company,
child: Text(company.name),
);
}).toList(),
),
我尝试了很多来自 Whosebug 的解决方案,并遵循了各种教程,但在异步函数中似乎没有任何效果。非常感谢一个有很好解释的答案,因为我想知道为什么它在 Widget build(context) 中工作,而不是在上面提到的异步函数中工作。
发布问题后解决了问题。刚刚在函数 withInputField 中使用了 StatefulBuilder,因为下拉菜单在单击元素后会更改状态。由于 snackbar 仅构建一次,因此小部件不会更改其状态。请参考Whosebug中的这个答案.
我的应用程序中有一个下拉菜单,位于自定义刷新栏(类似于小吃栏)内。每次应用 运行 时,flushbar 都会弹出,直到用户将其关闭。为了在我的应用程序中使用 flushbar,我使用了一个异步函数并在 initState() 中调用了 future 中的函数——如果不这样做,我的 snackbar 或 flushbar 没有显示,请检查下面的代码:
@override
void initState() {
super.initState();
Future(() {
withInputField(context);
});
withInputField(BuildContext context) async {...}
所以,我面临的问题是下拉菜单无法正常工作。在我 select 一个项目之后,我希望该项目能够替换下拉按钮中的提示文本。它工作正常,如果我将菜单放在小部件构建脚手架中,但是当我将相同的代码放在 withInputField(..) 函数中时,selected 项为空。下面是我的下拉代码:
class Company {
final int id;
final String name;
Company(this.id, this.name);
}
Company _selectedCompany;
List<Company> getCompany = <Company>[
Company(1, 'Apple'),
Company(2, 'Google'),
Company(3, 'Samsung'),
Company(4, 'Sony'),
Company(5, 'LG'),
];
下面的代码在异步函数 withInputField 中。
DropdownButton<Company>(
hint: Text('Select company'),
value: _selectedCompany,
onChanged: (Company val) {
setState(() {
_selectedCompany = val;
});
},
items: getCompany.map((Company company) {
return DropdownMenuItem<Company>(
value: company,
child: Text(company.name),
);
}).toList(),
),
我尝试了很多来自 Whosebug 的解决方案,并遵循了各种教程,但在异步函数中似乎没有任何效果。非常感谢一个有很好解释的答案,因为我想知道为什么它在 Widget build(context) 中工作,而不是在上面提到的异步函数中工作。
发布问题后解决了问题。刚刚在函数 withInputField 中使用了 StatefulBuilder,因为下拉菜单在单击元素后会更改状态。由于 snackbar 仅构建一次,因此小部件不会更改其状态。请参考Whosebug中的这个答案.