Flutter 在按钮咔嗒声中摆动回路时停止
如何通过按下按钮停止while循环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 (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);