DiagnosticsProperty<T>.lazy constructor Null safety

DiagnosticsProperty<T>.lazy(
  1. String? name,
  2. ComputePropertyValueCallback<T> computeValue,
  3. {String? description,
  4. String? ifNull,
  5. String? ifEmpty,
  6. bool showName = true,
  7. bool showSeparator = true,
  8. Object? defaultValue,
  9. String? tooltip,
  10. bool missingIfNull,
  11. bool expandableValue,
  12. bool allowWrap,
  13. bool allowNameWrap,
  14. DiagnosticsTreeStyle style = DiagnosticsTreeStyle.singleLine,
  15. DiagnosticLevel level = DiagnosticLevel.info}
)

Property with a value that is computed only when needed.

Use if computing the property value may throw an exception or is expensive.

The showName, showSeparator, style, missingIfNull, and level arguments must not be null.

The level argument is just a suggestion and can be overridden if if something else about the property causes it to have a lower or higher level. For example, if calling computeValue throws an exception, level will always return DiagnosticLevel.error.

Implementation

DiagnosticsProperty.lazy(
  String? name,
  ComputePropertyValueCallback<T> computeValue, {
  String? description,
  String? ifNull,
  this.ifEmpty,
  bool showName = true,
  bool showSeparator = true,
  this.defaultValue = kNoDefaultValue,
  this.tooltip,
  this.missingIfNull = false,
  this.expandableValue = false,
  this.allowWrap = true,
  this.allowNameWrap = true,
  DiagnosticsTreeStyle style = DiagnosticsTreeStyle.singleLine,
  DiagnosticLevel level = DiagnosticLevel.info,
}) : assert(showName != null),
     assert(showSeparator != null),
     assert(defaultValue == kNoDefaultValue || defaultValue is T?),
     assert(missingIfNull != null),
     assert(style != null),
     assert(level != null),
     _description = description,
     _valueComputed = false,
     _value = null,
     _computeValue = computeValue,
     _defaultLevel = level,
     ifNull = ifNull ?? (missingIfNull ? 'MISSING' : null),
     super(
       name: name,
       showName: showName,
       showSeparator: showSeparator,
       style: style,
     );