首页 > 解决方案 > 颤振设置事件频率

问题描述

假设我不断更改Slider的值并在onChanged回调函数中调用服务器。是否可以有效地更改回调之间的最小时间段?

  Slider showSoundBar(){
    return Slider(
      value: this.volume,
      activeColor: Colors.blue,
      onChanged: (vol){
        // Don't send too often
        send('volume', vol);
      },
    );
  }

标签: flutterdart

解决方案


Timer你可以使用from dart:async..来做这样的事情

class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  
  Timer timer;
  int timePassedInMilliseconds = 1500;
  
  @override
  void initState(){
    super.initState();
    timer = Timer.periodic(Duration(milliseconds: 100), (_){
      timePassedInMilliseconds = timePassedInMilliseconds + 100;
    });
  }
  
  @override
  Widget build(BuildContext context) {
    return Slider(
      value: 10,
      activeColor: Colors.blue,
      onChanged: (vol){
        // Don't send too often
        if(timePassedInMilliseconds > 1500){
          send('volume', vol);
          timePassedInMilliseconds = 0;
        }
        
      },
    );
  }
  
  void send(String sendWhat, double value){
    
  }
  
  
  @override
  void dispose(){
    timer.cancel();
    super.dispose();
  }
  
}

推荐阅读