【问题标题】:Why the flutter switch onChanged callback triggers wrong?为什么flutter switch onChanged回调触发错误?
【发布时间】:2019-12-20 11:00:16
【问题描述】:

最初,颤振开关小部件的值为 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,
       );
    }

预期结果:

最初为假,然后切换为真。

I/flutter (20662):之前:假

I/flutter (20662):之后:true

切换为假

I/flutter (20662):之前:true

I/flutter (20662): after: false

切换为真

I/flutter (20662):之前:假

I/flutter (20662):之后:true

实际结果:

一开始是假的,现在我改成真了。

I/flutter (20662):之前:假

I/flutter (20662):之后:true

到目前为止一切顺利!

现在我切换到 false... 什么也没发生。 => 没有 onChanged 调用

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

I/flutter (20662):之前:true

I/flutter (20662):之后:true

毫无意义!?

【问题讨论】:

    标签: flutter dart toggle uiswitch selectionchanged


    【解决方案1】:

    我创建了一个对象

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

    然后我尝试 build() 开关,而不是直接调用 build() 中的方法 _getSwitch。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-05
      • 1970-01-01
      • 1970-01-01
      • 2019-03-21
      • 2017-03-15
      • 1970-01-01
      • 2020-12-29
      • 2020-02-09
      相关资源
      最近更新 更多