Scheduler API ============= ```dart typedef void TimerCallback(); class TaskSettings { const TaskSettings({ this.idle: false, // tasks that should run during the idle phase this.layout: false, // tasks that should run during the layout phase this.paint: false, // tasks that should run during the paint phase this.touch: false, // tasks that should run while a pointer is down }); final bool idle; final bool layout; final bool paint; final bool touch; } const idleTask = const TaskSettings(idle: true); const t0 = null; const t1ms = const Duration(milliseconds: 1.0); // Priorities // (these are intentionally not constants, so you can tweak them at runtime) int IdlePriority = 0; // tasks that can be delayed arbitrarily int FutureLayoutPriority = 1000; // tasks that prepare layout int TimerAnimationPriority = 3000; // tasks related to animations int InputPriority = 4000; // input events int InputAnimationPriority = 5000; // framework-fired events for scrolling class Task { external Task(callback, { Duration delay: t0, // how long to wait before scheduling this task; null means run it now (same as duration 0) Duration budget: t1ms, // how long to allow the task to run before firing an exception; null means no timeout TaskSettings settings: idleTask, // what phases to allow the task to run during int priority: 0, // the greater the number, the more likely it is to run bool defer: false // punts this task until the next loop (after we're done with paint) }); external void cancel(); // prevents the task from running, if it hasn't run yet external bool get active; // true until fired or until canceled } // The Dart native mechanisms for scheduling tasks, as listed below, // get configured as follows: // // delay: duration argument for the Timer constructors, otherwise null (0) // budget: 1ms // settings: same as for the task that triggered this task // priority: same as for the task that triggered this task // defer: false // // method: scheduleMicrotask(Function void callback()) // constructor: Future.microtask(...) // calls scheduleMicrotask() to do the work // constructor: Timer (Duration duration, Function void callback()) // constructor: Timer.periodic(Duration duration, Function void callback(Timer timer)) ```