Adds an element to the dirty elements list so that it will be rebuilt
when WidgetsBinding.beginFrame
calls buildScope.
Source
void scheduleBuildFor(BuildableElement element) { assert(element != null); assert(element.owner == this); assert(element._inDirtyList == _dirtyElements.contains(element)); assert(() { if (debugPrintScheduleBuildForStacks) debugPrintStack(label: 'scheduleBuildFor() called for $element${_dirtyElements.contains(element) ? " (ALREADY IN LIST)" : ""}'); if (element._inDirtyList) { throw new FlutterError( 'scheduleBuildFor() called for a widget for which a build was already scheduled.\n' 'The method was called for the following element:\n' ' $element\n' 'The current dirty list consists of:\n' ' $_dirtyElements\n' 'This usually indicates that a widget was rebuilt outside the build phase (thus ' 'marking the element as clean even though it is still in the dirty list). ' 'This should not be possible and is probably caused by a bug in the widgets framework. ' 'Please report it: https://github.com/flutter/flutter/issues/new\n' 'To debug this issue, consider setting the debugPrintScheduleBuildForStacks and ' 'debugPrintBuildDirtyElements flags to true and looking for a call to scheduleBuildFor ' 'for a widget that is labeled "ALREADY IN LIST".' ); } if (!element.dirty) { throw new FlutterError( 'scheduleBuildFor() called for a widget that is not marked as dirty.\n' 'The method was called for the following element:\n' ' $element\n' 'This element is not current marked as dirty. Make sure to set the dirty flag before ' 'calling scheduleBuildFor().\n' 'If you did not attempt to call scheduleBuildFor() yourself, then this probably ' 'indicates a bug in the widgets framework. Please report it: ' 'https://github.com/flutter/flutter/issues/new' ); } return true; }); if (!_scheduledFlushDirtyElements && onBuildScheduled != null) { _scheduledFlushDirtyElements = true; onBuildScheduled(); } _dirtyElements.add(element); element._inDirtyList = true; assert(() { if (debugPrintScheduleBuildForStacks) debugPrint('...dirty list is now: $_dirtyElements'); return true; }); }