做一个while循环,在Dart/Flutter中循环1秒

Zoh*_*ule 2 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);
  
}
Run Code Online (Sandbox Code Playgroud)

难道我做错了什么?

Gaz*_*kus 5

我喜欢你试图弄清楚的方式Future。在我理解这些东西之前,我就和你一样。它有点像线程,但在某些方面有很大不同。

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

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

两个操作必须“同时”运行才能像您尝试的那样相互交互。实现的方法是调用Future.wait以获取依赖于两个 future 的 future。编辑:这两个操作都必须在每一步都放弃执行,以便另一个操作可以控制单个线程。因此,如果有循环,则必须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);
  
}
Run Code Online (Sandbox Code Playgroud)