参考
里面的这里回调TaskCallback Function学习一下,挺重要的
import 'dart:async';
//自定义回调类型
typedef TaskCallback = void Function(bool success, dynamic result);
///队列任务,先进先出,一个个执行
class TaskQueueUtils {
static bool _isTaskRunning = false;
List _taskList = [];
static bool get isTaskRunning => _isTaskRunning;
Future addTask(Future future) {
Completer completer = Completer();
TaskItem taskItem = TaskItem(
content: future,
callback: (success, result) {
if (success) {
completer.complete(result);
} else {
completer.completeError(result);
}
});
_taskList.add(taskItem);
_doTask();
return completer.future;
}
void _doTask() async {
if (_isTaskRunning) return;
if (_taskList.isEmpty) return;
//获取先进入的任务
TaskItem task = _taskList[0];
_isTaskRunning = true;
var result;
//执行任务
try {
result = await task.content;
//完成任务
task.callback(true, result);
print("完成任务");
} catch (e) {
task.callback(false, e);
} finally {
_taskList.removeAt(0);
_isTaskRunning = false;
}
//递归任务
_doTask();
}
}
///任务封装模型
class TaskItem {
final Future content;//future耗时工作
final TaskCallback callback;//用自定义的回调类型创建的对象,对象就有success和result两个变量了
TaskItem({required this.content, required this.callback});
}
使用方式:
main() {
TaskQueueUtils().addTask(Future.delayed(Duration(seconds: 2), () {
print("task 1");
}));
TaskQueueUtils().addTask(Future.delayed(Duration(seconds: 1), () {
print("task 2");
}));
}
task1,task2 为模拟的耗时任务。