如何使用未来延迟

Emr*_*rol 6 dart flutter

我有2个功能。我想一个一个地运行它们,但是当第一个函数完成时,第二个函数必须等待 1-2 秒。我为此尝试了 Future.delayed 但没有成功。它什么也改变不了。

\n
void kartat(int tip, int deger, int mainid, List mycards) {\n    masadakicards.add(cardbank[mainid]);\n    print("kart at\xc4\xb1ld\xc4\xb1");\n    rakipkartat(51);\n\n  }\n\n  void rakipkartat(int mainid) {\n    new Future.delayed(Duration(seconds: 1), () {\n      // deleayed code here\n      masadakicards.add(cardbank[mainid]);\n      print("ann");\n    });\n  }\n
Run Code Online (Sandbox Code Playgroud)\n

mrg*_*t96 9

实现这一目标的一种方法是使用await Future.delayed

确保你的方法返回一个Future

Future<void> start() async {
  await foo();
  await Future.delayed(Duration(seconds: 2));
  await bar();
}

Future<void> foo() async {
  print('foo started');
  await Future.delayed(Duration(seconds: 1));
  print('foo executed');
  return;
}

Future<void> bar() async {
  print('bar started');
  await Future.delayed(Duration(seconds: 1));
  print('bar executed');
  return;
}
Run Code Online (Sandbox Code Playgroud)

预期的:

foo started
   - waits 1 second -
foo executed
    - waits 2 seconds -
bar started
    - waits 1 second -
bar executed
Run Code Online (Sandbox Code Playgroud)

按照你的方法

请注意,延迟后执行的方法还需要包含asyncand await,否则该方法将同步运行而不是等待 Future。

foo started
   - waits 1 second -
foo executed
    - waits 2 seconds -
bar started
    - waits 1 second -
bar executed
Run Code Online (Sandbox Code Playgroud)