为什么颤振开关onChanged回调会触发错误?

时间:2019-08-13 21:06:52

标签: flutter dart toggle uiswitch selectionchanged

最初,颤振开关小部件的值为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):之前:false

I / flutter(20662):之后:是

切换为假

I / flutter(20662):之前:是

I / flutter(20662):之后:false

切换为真

I / flutter(20662):之前:false

I / flutter(20662):之后:是

实际结果:

最初为false,现在我切换为true。

I / flutter(20662):之前:false

I / flutter(20662):之后:是

到目前为止非常棒!

现在,我切换为假...什么都没发生。 =>没有onChanged呼叫

现在,我切换到true,这是输出:

I / flutter(20662):之前:是

I / flutter(20662):之后:是

毫无意义!?

1 个答案:

答案 0 :(得分:0)

我创建了一个对象

   Switch switch2;

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

然后我尝试对开关进行build(),而是直接在build()中直接调用_getSwitch方法。