Skip to content

Commit 31e3ae8

Browse files
authored
Show error message in release mode when box is not laid out without losing performance (#126302)
Close flutter/flutter#126303 When I encounter bugs in production environment saying null pointer error on `return _size!`, I wish I could know more information! However, currently the information is revealed by `assert(hasSize, 'RenderBox was not laid out: $this');`, thus *only* in debug mode can I know what is `this` (and/or more information that can be added), while in release mode I can only see a stack trace saying it is `RenderBox.size` that throws - nothing more :/ Therefore, it is intuitive to add this extra information in release mode. However, will it affect performance? We all know this is in critical path and should be quite careful. Thus I did some experiments: https://godbolt.org/z/zPPPf5969 From my naive understanding of assembly, the two versions of code (`size!` vs `size ?? throw`) has the same assembly, except that they throw different types of errors. In other words, when there is no error, both code should be equivalent; when there is an error, surely the new code will be slower since it calls `this.toString()`, but the error handling process is rare and already heavy, so this is not a problem. ![image](https://user-images.githubusercontent.com/5236035/236962182-b9450d59-a2ac-426f-8300-3c7edcadf35e.png)
1 parent 24ee5c7 commit 31e3ae8

File tree

1 file changed

+1
-1
lines changed
  • packages/flutter/lib/src/rendering

1 file changed

+1
-1
lines changed

packages/flutter/lib/src/rendering/box.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1985,7 +1985,7 @@ abstract class RenderBox extends RenderObject {
19851985
}
19861986
return true;
19871987
}());
1988-
return _size!;
1988+
return _size ?? (throw StateError('RenderBox was not laid out: $runtimeType#${shortHash(this)}'));
19891989
}
19901990
Size? _size;
19911991
/// Setting the size, in debug mode, triggers some analysis of the render box,

0 commit comments

Comments
 (0)