Commit 6cd063bc authored by Adam Barth's avatar Adam Barth

Merge pull request #2294 from abarth/improve_errors

Improve the error message when calling setState during build
parents 8201015b 96246c1a
...@@ -1107,7 +1107,18 @@ abstract class BuildableElement<T extends Widget> extends Element<T> { ...@@ -1107,7 +1107,18 @@ abstract class BuildableElement<T extends Widget> extends Element<T> {
if (foundTarget) if (foundTarget)
return true; return true;
} }
return !_debugStateLocked || (_debugAllowIgnoredCallsToMarkNeedsBuild && dirty); if (_debugStateLocked && (!_debugAllowIgnoredCallsToMarkNeedsBuild || !dirty)) {
throw new WidgetError(
'Cannot mark this component as needing to build because the framework is '
'already in the process of building widgets. A widget can be marked as '
'needing to be built during the build phase only if one if its ancestor '
'is currently building. This exception is allowed because the framework '
'builds parent widgets before children, which means a dirty descendant '
'will always be built. Otherwise, the framework might not visit this '
'widget during this build phase.'
);
}
return true;
}); });
if (dirty) if (dirty)
return; return;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment