keepToString top-level constant Null safety
Annotation used by Flutter's Dart compiler to indicate that an Object.toString override should not be replaced with a supercall.
Since dart:ui
and package:flutter
override toString
purely for
debugging purposes, the frontend compiler is instructed to replace all
toString
bodies with return super.toString()
during compilation. This
significantly reduces release code size, and would make it impossible to
implement a meaningful override of toString
for release mode without
disabling the feature and losing the size savings. If a package uses this
feature and has some unavoidable need to keep the toString
implementation
for a specific class, applying this annotation will direct the compiler
to leave the method body as-is.
For example, in the following class the toString
method will remain as
return _buffer.toString();
, even if the --delete-tostring-package-uri
option would otherwise apply and replace it with return super.toString()
.
(By convention, dart:ui
is usually imported as ui
, hence the prefix.)
class MyStringBuffer {
final StringBuffer _buffer = StringBuffer();
// ...
@ui.keepToString
@override
String toString() {
return _buffer.toString();
}
}
Implementation
const pragma keepToString = pragma('flutter:keep-to-string');