Future.error
创建一个执行结果为error的future
factory Future.error(Object error, [StackTrace? stackTrace]) {
/// …
return new _Future.immediateError(error, stackTrace);
}
_Future.immediateError(var error, StackTrace stackTrace)
-
_zone = Zone._current {
_asyncCompleteError(error, stackTrace);
}
Future.error(new Exception(“err msg”))
.then((value) => print(“err value: $value”))
.catchError((e) => print(e));
/// 执行结果为:Exception: err msg
Future.delayed
创建一个延迟执行回调的future,内部实现为Timer加延时执行一个Future
factory Future.delayed(Duration duration, [FutureOr computation()?]) {
/// …
new Timer(duration, () {
if (computation == null) {
result._complete(null as T);
} else {
try {
result._complete(computation());
} catch (e, s) {
_completeWithErrorCallback(result, e, s);
}
}
});
return result;
}
Future.wait
等待多个Future并收集返回结果
static Future<List> wait(Iterable<Future> futures,
{bool eagerError = false, void cleanUp(T successValue)?}) {
/// …
}
FutureBuilder结合使用:
child: FutureBuilder(
future: Future.wait([
firstFuture(),
secondFuture()
]),
builder: (context,snapshot){
if(!snapshot.hasData){
return CircularProgressIndicator();
}
final first = snapshot.data[0];
final second = snapshot.data[1];
return Text(“data $first $second”);
},
),
Future.any
返回futures集合中第一个返回结果的值
static Future any(Iterable<Future> futures) {
var completer = new Completer.sync();
void onValue(T value) {
if (!completer.isCompleted) completer.complete(value);
}
void onError(Object error, StackTrace stack) {