handleEventLoopCallback method
- @visibleForTesting
@visibleForTesting
Execute the highest-priority task, if it is of a high enough priority.
Returns true if a task was executed and there are other tasks remaining (even if they are not high-enough priority).
Returns false if no task was executed, which can occur if there are no tasks scheduled, if the scheduler is locked, or if the highest-priority task is of too low a priority given the current schedulingStrategy.
Also returns false if there are no tasks remaining.
Implementation
@visibleForTesting
bool handleEventLoopCallback() {
if (_taskQueue.isEmpty || locked)
return false;
final _TaskEntry<dynamic> entry = _taskQueue.first;
if (schedulingStrategy(priority: entry.priority, scheduler: this)) {
try {
_taskQueue.removeFirst();
entry.run();
} catch (exception, exceptionStack) {
StackTrace callbackStack;
assert(() {
callbackStack = entry.debugStack;
return true;
}());
FlutterError.reportError(FlutterErrorDetails(
exception: exception,
stack: exceptionStack,
library: 'scheduler library',
context: 'during a task callback',
informationCollector: (callbackStack == null) ? null : (StringBuffer information) {
information.writeln(
'\nThis exception was thrown in the context of a task callback. '
'When the task callback was _registered_ (as opposed to when the '
'exception was thrown), this was the stack:'
);
FlutterError.defaultStackFilter(callbackStack.toString().trimRight().split('\n')).forEach(information.writeln);
}
));
}
return _taskQueue.isNotEmpty;
}
return false;
}