addPlaceholder method

void addPlaceholder (double width, double height, PlaceholderAlignment alignment, { double scale: 1.0, double baselineOffset, TextBaseline baseline })

Adds an inline placeholder space to the paragraph.

The paragraph will contain a rectangular space with no text of the dimensions specified.

The width and height parameters specify the size of the placeholder rectangle.

The alignment parameter specifies how the placeholder rectangle will be vertically aligned with the surrounding text. When PlaceholderAlignment.baseline, PlaceholderAlignment.aboveBaseline, and PlaceholderAlignment.belowBaseline alignment modes are used, the baseline needs to be set with the baseline. When using PlaceholderAlignment.baseline, baselineOffset indicates the distance of the baseline down from the top of of the rectangle. The default baselineOffset is the height.

Examples:

  • For a 30x50 placeholder with the bottom edge aligned with the bottom of the text, use: addPlaceholder(30, 50, PlaceholderAlignment.bottom);
  • For a 30x50 placeholder that is vertically centered around the text, use: addPlaceholder(30, 50, PlaceholderAlignment.middle);.
  • For a 30x50 placeholder that sits completely on top of the alphabetic baseline, use: addPlaceholder(30, 50, PlaceholderAlignment.aboveBaseline, baseline: TextBaseline.alphabetic).
  • For a 30x50 placeholder with 40 pixels above and 10 pixels below the alphabetic baseline, use: addPlaceholder(30, 50, PlaceholderAlignment.baseline, baseline: TextBaseline.alphabetic, baselineOffset: 40).

Lines are permitted to break around each placeholder.

Decorations will be drawn based on the font defined in the most recently pushed TextStyle. The decorations are drawn as if unicode text were present in the placeholder space, and will draw the same regardless of the height and alignment of the placeholder. To hide or manually adjust decorations to fit, a text style with the desired decoration behavior should be pushed before adding a placeholder.

Any decorations drawn through a placeholder will exist on the same canvas/layer as the text. This means any content drawn on top of the space reserved by the placeholder will be drawn over the decoration, possibly obscuring the decoration.

Placeholders are represented by a unicode 0xFFFC "object replacement character" in the text buffer. For each placeholder, one object replacement character is added on to the text buffer.

The scale parameter will scale the width and height by the specified amount, and keep track of the scale. The scales of placeholders added can be accessed through placeholderScales. This is primarily used for acessibility scaling.

Implementation

void addPlaceholder(double width, double height, PlaceholderAlignment alignment, {
  double scale = 1.0,
  double baselineOffset,
  TextBaseline baseline,
}) {
  // Require a baseline to be specified if using a baseline-based alignment.
  assert((alignment == PlaceholderAlignment.aboveBaseline ||
          alignment == PlaceholderAlignment.belowBaseline ||
          alignment == PlaceholderAlignment.baseline) ? baseline != null : true);
  // Default the baselineOffset to height if null. This will place the placeholder
  // fully above the baseline, similar to [PlaceholderAlignment.aboveBaseline].
  baselineOffset = baselineOffset ?? height;
  _addPlaceholder(width * scale, height * scale, alignment.index, (baselineOffset == null ? height : baselineOffset) * scale, baseline == null ? null : baseline.index);
  _placeholderCount++;
  _placeholderScales.add(scale);
}