Не удается найти метод SetState в виджете - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть виджет, который позже вызывается в моем основном файле скаффолдинга. Этот виджет содержит выпадающее меню, но я не могу изменить состояние при выборе другого значения. Поле не обновляется, и я получаю сообщение об ошибке «ошибка: метод не найден:« setState ». setState (() {' ^^^^^^^^

Я обновил метод setState и удалил из него код, но он по-прежнему говорит, что метод не найден.

child: DropdownButton(
                  hint: Text('Medical'),
                  value: _selectedCustomerType,
                  onChanged: (newValue) {
                    setState(() {
                      _selectedCustomerType = newValue;
                    });
                  },
                  items: _customerType.map((cusType) {
                    print(cusType);

                    return DropdownMenuItem(
                      child: Text(cusType),
                      value: cusType,
                    );
                  }).toList(),
                ),

Мне нужно иметь возможность обновлять значение и отображать его при выборе нового значения.

Ответы [ 2 ]

1 голос
/ 23 апреля 2019

Вы не можете использовать setState вне StatefulWidget , поэтому вы должны заключить свою DropdownButton в StatefulWidget, например:

class StatefulDropdownButton extends StatefulWidget {
  final List<String> _customerType;

  StatefulDropdownButton(this._customerType);

  @override
  State<StatefulWidget> createState() => DropdownButtonState();
}

class DropdownButtonState extends State<StatefulDropdownButton> {
  String _selectedCustomerType;

  @override
  Widget build(BuildContext context) {
    return DropdownButton(
      hint: Text('Medical'),
      value: _selectedCustomerType,
      onChanged: (newValue) {
        setState(() {
          _selectedCustomerType = newValue;
        });
      },
      items: widget._customerType.map((cusType) {
        print(cusType);

        return DropdownMenuItem(
          child: Text(cusType),
          value: cusType,
        );
      }).toList(),
    );
  }
}
1 голос
/ 23 апреля 2019

SetState недоступен внутри метода main, и ни внутри функции, чтобы сделать его доступным, вам нужно создать класс Stateful и точно в классе State, потому что на самом деле ваш виджет является классом statefull: он каждый раз меняет свое состояниепользователь делает событие ..

...