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中的这个答案.