DropdownButton не меняет значение на onChanged - PullRequest
0 голосов
/ 06 мая 2019

DropdownButton не меняет значение выпадающего меню после того, как из него сделан другой выбор. Ниже мой код.

Flexible(
   child: Padding(
   padding: EdgeInsets.fromLTRB(0.0, 0.0, 10.0, 0.0),
   child: DropdownButton(
      hint: Text('Select'),
      items: list_dropdown,
      onChanged: (val) {
         setState(() {
           wd = val;                          
         });
      },
      value: wd,
   )),
)

В initState я устанавливаю значение переменной

 @override
 void initState() {
   // TODO: implement initState
   super.initState();

   wd = 0;
}

пока я создаю переменную в глобальной области видимости

int wd;

Куда я иду не так?

1 Ответ

0 голосов
/ 06 мая 2019

Почему вы создали переменную в глобальной области видимости? Если вы хотите изменить свою переменную с именем wd на setState(), вы должны поместить ее в свой класс состояний.

class App extends StatefulWidget {
  @override
  _AppState createState() => _AppState();
}

class _AppState extends State<App> {
  // Here wd in my state class
  int wd = 0;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text("Cat Attack"),
        ),
        body: Center(
          child: DropdownButton(
            value: wd,
            onChanged: (val) {
              setState(() {
                wd = val;
              });
            },
            items: [
              DropdownMenuItem(
                child: Text('1'),
                value: 1,
              ),
              DropdownMenuItem(
                child: Text('2'),
                value: 2,
              ),
            ],
          ),
        ));
  }
}

Вы можете переопределить значение wd в initState(), как только вы определились в состоянии.

class _AppState extends State<App> {
  int wd;

  @override
  void initState() {
    super.initState();
    wd = 2;
  }

Имейте в виду, что ваше «значение» для DropdownButton должно быть установлено на «ноль» или быть одним из списка значений. Поэтому, если вы установите значение 5, а не 1, 2 или ноль, которые являются значениями в моих DropdownMenuItem, вы получите эту ошибку:

I / трепетание (15227): ══╡ ИСКЛЮЧЕНИЕ, ЗАПРЕЩЕННОЕ БИБЛИОТЕКОЙ ВИДЖЕТОВ ════════════════════════════ I / flutter (15227): было сгенерировано следующее утверждение при сборке App (грязный, состояние: _AppState # 30354): I / flutter (15227): 'package: flutter / src / material / dropdown.dart': ошибочное утверждение: строка 560, позиция 15: 'items == null || I / флаттер (15227): items.isEmpty || значение == ноль || items.where ((DropdownMenuItem item) => item.value == I / флаттер (15227): значение) .length == 1 ': не соответствует действительности.

...