进行while循环,在Dart / Flutter中循环1秒

时间:2020-07-26 09:46:13

标签: loops dart

我正在尝试使while循环使一条语句准确地循环一秒钟,然后语句停止。我已经在DartPad中尝试过此操作,但它崩溃了浏览器窗口。

void main(){
  
  var count = 0.0;
  bool flag = true;
  
  Future.delayed(Duration(seconds: 1), (){
    flag = false;
  });
  
  while (flag){
    count++;
  }
  
  print(count);
  
}

我做错什么了吗?

1 个答案:

答案 0 :(得分:3)

我喜欢您尝试找出Future的方式。在我了解这些内容之前,我正是您所在的地方。它有点像线程,但是在某些方面却完全不同。

您编写的Dart代码是单线程的。通过编写Future.delayed,您没有开始工作。除非您通过从该主函数返回而放开线程,否则它的执行不会发生。

如果Main标记为异步,则不必返回。

两个动作必须“同时”运行,以便能够像您尝试的那样彼此交互。这样做的方法是调用Future.wait来获得取决于两个期货的期货。 编辑:这两个动作都必须在每个步骤中放开执行,以便另一个可以控制单个线程。因此,如果您有一个循环,则必须对其进行某种await调用才能使执行其他动作。

这是您的代码的修改版本,对我而言最多为215:

Future main() async {
  
  var count = 0.0;
  bool flag = true;
  
  var futureThatStopsIt = Future.delayed(Duration(seconds: 1), (){
    flag = false;
  });
  
  var futureWithTheLoop = () async {
    while (flag){
      count++;
      print("going on: $count");
      await Future.delayed(Duration(seconds: 0));
    }
  }();

  await Future.wait([futureThatStopsIt, futureWithTheLoop]);
  
  print(count);
  
}
相关问题