Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 在按钮咔嗒声中摆动回路时停止_Flutter_Dart_While Loop - Fatal编程技术网

Flutter 在按钮咔嗒声中摆动回路时停止

Flutter 在按钮咔嗒声中摆动回路时停止,flutter,dart,while-loop,Flutter,Dart,While Loop,如何通过按下按钮停止while循环 while (thirdDigit <= 9 && stopLoop == false) { while (sixDigits <= 999999 && stopLoop == false) { perspective = prefix + thirdDigit.toString() + sixDigits.toString(); url = perspective + urlSuffix;

如何通过按下按钮停止while循环

 while (thirdDigit <= 9 && stopLoop == false) {
  while (sixDigits <= 999999 && stopLoop == false) {
    perspective = prefix + thirdDigit.toString() + sixDigits.toString();
    url = perspective + urlSuffix;

    validateUrl(url, numberListTiles, perspective);
    print('BotStore: $url');
    sixDigits++;
  }
  thirdDigit++;
}

while(thirdDigit要在后台运行循环,请将其放入异步函数中:

Future<void> loop() async {
    // Loop here
}

正如您所指出的,循环正在运行并占用主线程。您需要介绍一些UI可以中断代码的点

首先确保您的函数是
async
。 然后添加一行,如:

等待未来。延迟(持续时间为零);

在您的循环中。您可以决定是将其放入内部循环还是外部循环,这取决于您希望允许其他代码运行的频率。

Dart是单线程的,因此“后台”不会运行任何代码。使函数异步确实允许它释放对其他代码的控制,但它必须在某个时候这样做,否则循环将在任何其他代码(包括UI单击处理程序)运行之前运行到完成。实际上,有些人会认为Dart在技术上不是单线程的,因为它利用了多核CPU,而且您可以从主循环中生成单独的隔离。无论如何,我指的是后台,而不是阻止事件循环。使函数异步可以让它放弃控制,但您仍然必须向循环代码本身添加一些
wait
或其他异步延迟,否则单线程执行仍然不会中断d、 Dart可能允许多个隔离,但它们是隔离的,除非通过发送消息,否则不能影响彼此的执行,而且每个隔离都是单线程的。这就是为什么没有任何东西可以中断紧密循环的原因。
onPressed: () => setState(() => stopLoop = true);