keepToString top-level constant Null safety

pragma const keepToString

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');