flutter DropdownButton选定项目未更改SetState上的UI

9rygscc1  于 2023-05-23  发布在  Flutter
关注(0)|答案(1)|浏览(123)

我在Flutter中使用DropdownButtons,UI没有显示选定的项目。当项目被选中时,它 * 正在 * 被设置为状态(我在进入下一页之前进行了检查,以确保所有值都已设置)。
我已经检查了所有内容并仔细检查,在build方法中没有设置_category的额外示例。下面列出了build方法中对_category的唯一引用,应该通过按钮中对setState的调用来设置。
下面是我对变量的初始化:

class _MyClass extends State<MyClass>{
  ...
  late String _category ='';
  ...

  @override
  void init(){
    ...
    _category = '';
    ...
    super.initState();
  }

merchantCategories变量声明如下:

final List<DropdownMenuItem<String>> merchantCategories = [
    const DropdownMenuItem(value: 'AUTOMOTIVE', child: Text('Automotive')),
    const DropdownMenuItem(value: 'HOME', child: Text('Home')),
    const DropdownMenuItem(value: 'FOOD', child: Text('Food')),
    const DropdownMenuItem(value: 'TRAVEL', child: Text('Travel')),
    const DropdownMenuItem(
        value: 'UTILITIES_AND_TELECOM', child: Text('Utilities and Telecom')),
    const DropdownMenuItem(value: 'ELECTRONICS', child: Text('Electronics')),
    const DropdownMenuItem(
        value: 'HEALTH_AND_BEAUTY', child: Text('Health and Beauty')),
    const DropdownMenuItem(
        value: 'ENTERTAINMENT', child: Text('Entertainment')),
    const DropdownMenuItem(value: 'RETAIL', child: Text('Retail')),
    const DropdownMenuItem(
        value: 'CHILDREN_AND_FAMILY', child: Text('Children and Family')),
    const DropdownMenuItem(
        value: 'OFFICE_AND_BUSINESS', child: Text('Office and Business')),
    const DropdownMenuItem(
        value: 'SERVICES_AND_SUBSCRIPTIONS',
        child: Text('Services and Subscriptions'))
  ];

下面是按钮的实现,使用DecoratedBox在框周围显示边框。

...
                  DecoratedBox(
                      decoration: BoxDecoration(
                          border: Border.all(width: 1),
                          borderRadius: BorderRadius.circular(4)),
                      child: DropdownButton<String>(
                          underline: Container(),
                          borderRadius: BorderRadius.circular(8),
                          hint: const Text('Select Merchant Category'),
                          items: merchantCategories,
                          onChanged: (value) => setState(() =>_category = value!)),
                  ),
...
6jygbczu

6jygbczu1#

DropdownButton(根据documentation)有一个值字段,您似乎没有使用。例如:

DropdownButton<String>(
 underline: Container(),
 borderRadius: BorderRadius.circular(8),
 hint: const Text('Select Merchant Category'),
 items: merchantCategories,
 onChanged: (value) => setState(() =>_category = value!)),
 value: _category //what is missing
)

顺便说一下,我最近从flutter中输入字段的默认实现切换到了一个pub包,该包在Angular FormControls之后对输入字段进行建模。https://pub.dev/packages/reactive_forms

相关问题