提问人:Bernard 提问时间:6/5/2023 最后编辑:Ahmad FBernard 更新时间:6/14/2023 访问量:49
Flutter 暂停 For 循环
Flutter pause a For loop
问:
我想编写一个带有 For 循环的函数来随机选择玩家。 我的功能如下,并且工作得很好:
void choixJoueur() {
for(int i = 1; i<=50; i++){
int j1=0;
int j2=0;
print("iteration : ${i}");
while(j1 == j2){
j1 = Random().nextInt(joueurs.length);
j2 = Random().nextInt(joueurs.length);
print(j1);
print(j2);
}
setState(() {
joueurDuel1 = joueurs[j1];
joueurDuel2 = joueurs[j2];
});
}
}
但是我想添加一个暂停以允许动画可见(该函数在构建方法中)。 我用 Future.delayed 转换了上面的函数,如下所示:
void choixJoueur() async {
for(int i = 1; i<=50; i++){
await Future.delayed(Duration(milliseconds: 500));
int j1=0;
int j2=0;
print("iteration : ${i}");
while(j1 == j2){
j1 = Random().nextInt(joueurs.length);
j2 = Random().nextInt(joueurs.length);
print(j1);
print(j2);
}
setState(() {
joueurDuel1 = joueurs[j1];
joueurDuel2 = joueurs[j2];
});
}
}
结果很奇怪。摘录如下:
flutter: iteration : 10
flutter: 2
flutter: 2
flutter: 1
flutter: iteration : 1
flutter: 0
flutter: 1
flutter: iteration : 11
flutter: 3
flutter: 0
flutter: iteration : 2
flutter: 0
flutter: 0
flutter: 2
flutter: 3
flutter: iteration : 3
我尝试了几种方法:
- sleep -> 直到循环结束才显示页面
- 计时器 - >与
Future.delayed
答:
0赞
Bernard
6/14/2023
#1
我找到了解决方案! 我必须有效地使用
await Future.delayed(Duration(milliseconds: 500));
但它必须放在 init 中,而不是放在构建中。如果放置在构建中,它会造成混乱。
评论
choixJoueur()
choixJoueur