我有一个函数,定期判断一个条件,我希望函数只在条件满足后继续进行.这似乎是一个很基本的任务,但出于某种原因,我找不到一个好的方法来解决它.

当我调用下面的函数时,我总是先得到"job not done yet",然后在三秒后得到"job done".如何使它只在计数器== 3之后继续返回语句? 抱歉,如果这是一个如此愚蠢的问题.我用了Google,我发誓,但没有用.

Future<String> delayTest() async {
    var counter = 0;
    await Timer.periodic(const Duration(seconds: 1), (timer) {
      counter++;
      if (counter == 3) {
        print('job done');
        timer.cancel();
      }
    });
   
    return ('job not done yet.');
  }

推荐答案

你应该等到计时器被取消.类似于这样:

Future<String> delayTest() async {
  var counter = 0;
  const duration = Duration(seconds: 1);
  final timer = Timer.periodic(duration, (timer) {
    counter++;
    print('not done yet');
    if (counter == 3) {
      print('job done');
      timer.cancel();
    }
  });
  while (timer.isActive) {
    // waiting for the same time duration to check if timer is still active after it
    await Future.delayed(duration);
  }
  return 'done';
}

Flutter相关问答推荐

无效字符(位于字符68处)flutter—update—... europe-west1.firebasedatabase.app/

手势捕获的异常:类型';Double';不是类型转换中类型';Double';的子类型

我不能通过第5步了解Flutter 翼Firebase教程

在Flutter TextField中计算子字符串位置

如何组合匹配器

为什么在setState之后Ffltter Pageview重置为第0页

来自FirebaseAuth的错误DisplayName和邮箱在Flutter应用程序中给出错误

轻松本地化包翻译在底部导航栏项目标签Flutter 翼dart 中不起作用

如何翻转这种剪刀设计

在flutter中实现类似3D的可滚动堆叠分页列表

从图标启动器打开时,VSCode未检测到Web设备

Flutter Web Dio XMLHttpRequest 上传大文件时出错

有没有办法在 google_map 上移动标记(向左或向右移动一些像素)?

运行任何 flutter 命令都会显示无法安装 <版本>

Flutter列顶部和底部出现不必要的边距问题

获取通过列表呈现的相同 TextEditingController 的值

Flutter url_launcher 插件抛出java.lang.IllegalArgumentException:接收器未注册:io.flutter.plugins.urllauncher.WebViewActivity

是否有可能减少代码的编写,例如:ref.read(countProvider.notifier) - 在构建方法中?

Flutter 中的 Firebase 后台消息处理程序产生重复的隔离并运行应用程序两次

"!" 是什么意思该运算符在使用如下方式时意味着dart ?