SchedulerBinding class

Scheduler for running the following:

  • Transient callbacks, triggered by the system's Window.onBeginFrame callback, for synchronizing the application's behavior to the system's display. For example, Tickers and AnimationControllers trigger from these.

  • Persistent callbacks, triggered by the system's Window.onDrawFrame callback, for updating the system's display after transient callbacks have executed. For example, the rendering layer uses this to drive its rendering pipeline.

  • Post-frame callbacks, which are run after persistent callbacks, just before returning from the Window.onDrawFrame callback.

  • Non-rendering tasks, to be run between frames. These are given a priority and are executed in priority order according to a schedulingStrategy.

Implemented by


currentFrameTimeStamp → Duration
The time stamp for the frame currently being processed. [...]
endOfFrame → Future<Null>
Returns a Future that completes after the frame completes. [...]
framesEnabled → bool
Whether frames are currently being scheduled when scheduleFrame is called. [...]
hasScheduledFrame → bool
Whether this scheduler has requested that handleBeginFrame be called soon.
lifecycleState AppLifecycleState
Whether the application is visible, and if so, whether it is currently interactive. [...]
schedulerPhase SchedulerPhase
The phase that the scheduler is currently operating under.
schedulingStrategy SchedulingStrategy
The strategy to use when deciding whether to run a task or not. [...]
read / write
transientCallbackCount → int
The current number of transient frame callbacks scheduled. [...]
hashCode → int
The hash code for this object. [...]
read-only, inherited
locked → bool
Whether lockEvents is currently locking events. [...]
@protected, read-only, inherited
runtimeType → Type
A representation of the runtime type of the object.
read-only, inherited


addPersistentFrameCallback(FrameCallback callback) → void
Adds a persistent frame callback. [...]
addPostFrameCallback(FrameCallback callback) → void
Schedule a callback for the end of this frame. [...]
cancelFrameCallbackWithId(int id) → void
Cancels the transient frame callback with the given id. [...]
debugAssertNoTransientCallbacks(String reason) → bool
Asserts that there are no registered transient callbacks; if there are, prints their locations and throws an exception. [...]
ensureVisualUpdate() → void
Schedules a new frame using scheduleFrame if this object is not currently producing a frame. [...]
handleAppLifecycleStateChanged(AppLifecycleState state) → void
Called when the application lifecycle state changes. [...]
@mustCallSuper, @protected
handleBeginFrame(Duration rawTimeStamp) → void
Called by the engine to prepare the framework to produce a new frame. [...]
handleDrawFrame() → void
Called by the engine to produce a new frame. [...]
handleEventLoopCallback() → bool
Execute the highest-priority task, if it is of a high enough priority. [...]
initInstances() → void
The initialization method. Subclasses override this method to hook into the platform and otherwise configure their services. Subclasses must call "super.initInstances()". [...]
initServiceExtensions() → void
Called when the binding is initialized, to register service extensions. [...]
resetEpoch() → void
Prepares the scheduler for a non-monotonic change to how time stamps are calculated. [...]
scheduleForcedFrame() → void
Schedules a new frame by calling Window.scheduleFrame. [...]
scheduleFrame() → void
If necessary, schedules a new frame by calling Window.scheduleFrame. [...]
scheduleFrameCallback(FrameCallback callback, { bool rescheduling: false }) → int
Schedules the given transient frame callback. [...]
scheduleTask<T>(TaskCallback<T> task, Priority priority, { String debugLabel, Flow flow }) → Future<T>
Schedules the given task with the given priority and returns a Future that completes to the task's eventual return value. [...]
scheduleWarmUpFrame() → void
Schedule a frame to run as soon as possible, rather than waiting for the engine to request a frame in response to a system "Vsync" signal. [...]
unlocked() → void
Called by lockEvents when events get unlocked. [...]
evict(String asset) → void
Called in response to the ext.flutter.evict service extension. [...]
@mustCallSuper, @protected, inherited
initLicenses() → void
Adds relevant licenses to the LicenseRegistry. [...]
@mustCallSuper, @protected, inherited
lockEvents(Future<Null> callback()) → Future<Null>
Locks the dispatching of asynchronous events and callbacks until the callback's future completes. [...]
@protected, inherited
noSuchMethod(Invocation invocation) → dynamic
Invoked when a non-existent method or property is accessed. [...]
performReassemble() → Future<Null>
This method is called by reassembleApplication to actually cause the application to reassemble, e.g. after a hot reload. [...]
@mustCallSuper, @protected, inherited
reassembleApplication() → Future<Null>
Cause the entire application to redraw, e.g. after a hot reload. [...]
registerBoolServiceExtension({String name, AsyncValueGetter<bool> getter, AsyncValueSetter<bool> setter }) → void
Registers a service extension method with the given name (full name ""), which takes a single argument "enabled" which can have the value "true" or the value "false" or can be omitted to read the current value. (Any value other than "true" is considered equivalent to "false". Other arguments are ignored.) [...]
@protected, inherited
registerNumericServiceExtension({String name, AsyncValueGetter<double> getter, AsyncValueSetter<double> setter }) → void
Registers a service extension method with the given name (full name ""), which takes a single argument with the same name as the method which, if present, must have a value that can be parsed by double.parse, and can be omitted to read the current value. (Other arguments are ignored.) [...]
@protected, inherited
registerServiceExtension({String name, ServiceExtensionCallback callback }) → void
Registers a service extension method with the given name (full name ""). The given callback is called when the extension method is called. The callback must return a Future that either eventually completes to a return value in the form of a name/value map where the values can all be converted to JSON using json.encode() (see JsonEncoder), or fails. In case of failure, the failure is reported to the remote caller and is dumped to the logs. [...]
@protected, inherited
registerSignalServiceExtension({String name, AsyncCallback callback }) → void
Registers a service extension method with the given name (full name ""), which takes no arguments and returns no value. [...]
@protected, inherited
registerStringServiceExtension({String name, AsyncValueGetter<String> getter, AsyncValueSetter<String> setter }) → void
Registers a service extension method with the given name (full name ""), which optionally takes a single argument with the name "value". If the argument is omitted, the value is to be read, otherwise it is to be set. Returns the current value. [...]
@protected, inherited
toString() → String
Returns a string representation of this object.


operator ==(dynamic other) → bool
The equality operator. [...]

Static Properties

instance SchedulerBinding
The current SchedulerBinding, if one has been created.

Static Methods

debugPrintTransientCallbackRegistrationStack() → void
Prints the stack for where the current transient callback was registered. [...]