Почему переключатель обратного вызова onChanged срабатывает неправильно?

Первоначально виджет переключателя трепетания имеет значение false. После свайпа переключатель верен. Но если я снова проведу пальцем по экрану, метод onChange не сработает.

Я использую setState () для изменения значения переключателя как метода onChanged. Я попытался передать BuildContext, но безуспешно.

    bool value = false;

    void _setValue(bool value) {
        print('before: ' + this.value.toString());
        setState(() => this.value = value);
        print('after: ' + this.value.toString());
    }

    Widget _getSwitch() {
       return Switch(
              value: this.value,
              onChanged: _setValue,
       );
    }

ожидаемый результат:

Изначально false, затем измените значение на true.

I / flutter (20662): до: ложь

I / flutter (20662): после: истина

переключить на false

I / flutter (20662): до: true

I / flutter (20662): после: ложь

переключить на true

I / flutter (20662): до: ложь

I / flutter (20662): после: истина

фактический результат:

Изначально false, теперь я переключаюсь на true.

I / flutter (20662): до: ложь

I / flutter (20662): после: истина

Пока все отлично!

Сейчас переключаюсь на false ... Ничего не произошло. => нет вызова onChanged

Теперь я переключаюсь на true и получаю следующий результат:

I / flutter (20662): до: true

I / flutter (20662): после: истина

Не имеет смысла !?


person user9245497    schedule 13.08.2019    source источник


Ответы (1)


Я создал объект

   Switch switch2;

   @override
  void initState() {
    super.initState();
    switch2 = _getSwitch();
  }

Затем я попытался построить () переключатель, вместо этого я просто вызываю метод _getSwitch в build () напрямую.

person user9245497    schedule 13.08.2019