flutter 异步

本文最后更新于:2022年4月22日 上午

flutter 异步

Dart 的异步也和 js类似,单线程+事件循环

Future

getDataFuture()
    .then((value) {
      print(value);
      return Future.value('2');
    })
    .catchError((error) {
      print('error: $error');
    })
    .whenComplete(() => print('无论成功还是失败都会执行'))
    .then((value) => print(value));


Future<String> getDataFuture() {
  return Future.value('success');

  return Future.error('error inifo');

  return Future.delayed(Duration(seconds: 2), () => '异步获取数据');
}

async/await

getDataAsync().then((value) => print(value)).catchError((err) => print(err));

Future<String> getDataAsync() async {
  try {
    final res1 = await Future.delayed(Duration(seconds: 1), () => '第一个返回值');
    print(res1);

    final res2 = await Future.delayed(Duration(seconds: 1), () => '第二个返回值');
    print(res2);

    final err1 = await Future.error('error info');
  } catch (err) {
    print('捕获错误:$err');
  }

  return '最终的返回值';
}

Isolate

main(List<String> args) async {
  // 创建 Isolate
  Isolate.spawn(foo, 10);
}

void foo(int limit) {
  int sum = 0;
  for (int i = 0; i < limit; i++) {
    sum += i;
  }
  print('sum: $sum');
}

Isolate 双通道通信

main(List<String> args) async {

  ReceivePort receivePort = ReceivePort();

  Isolate isolate = await Isolate.spawn<SendPort>(bar, receivePort.sendPort);

  receivePort.listen((message) {
    print('on: $message');

    receivePort.close();
    isolate.kill();
  });
}


void bar(SendPort sendPort) {
  sendPort.send('message');
}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议,转载请注明出处。