merge method

Widget merge ({Key key, TextStyle style, TextAlign textAlign, bool softWrap, TextOverflow overflow, int maxLines, TextWidthBasis textWidthBasis, @required Widget child })

Creates a default text style that overrides the text styles in scope at this point in the widget tree.

The given style is merged with the style from the default text style for the BuildContext where the widget is inserted, and any of the other arguments that are not null replace the corresponding properties on that same default text style.

This constructor cannot be used to override the maxLines property of the ancestor with the value null, since null here is used to mean "defer to ancestor". To replace a non-null maxLines from an ancestor with the null value (to remove the restriction on number of lines), manually obtain the ambient DefaultTextStyle using DefaultTextStyle.of, then create a new DefaultTextStyle using the new DefaultTextStyle constructor directly. See the source below for an example of how to do this (since that's essentially what this constructor does).

Implementation

static Widget merge({
  Key key,
  TextStyle style,
  TextAlign textAlign,
  bool softWrap,
  TextOverflow overflow,
  int maxLines,
  TextWidthBasis textWidthBasis,
  @required Widget child,
}) {
  assert(child != null);
  return Builder(
    builder: (BuildContext context) {
      final DefaultTextStyle parent = DefaultTextStyle.of(context);
      return DefaultTextStyle(
        key: key,
        style: parent.style.merge(style),
        textAlign: textAlign ?? parent.textAlign,
        softWrap: softWrap ?? parent.softWrap,
        overflow: overflow ?? parent.overflow,
        maxLines: maxLines ?? parent.maxLines,
        textWidthBasis: textWidthBasis ?? parent.textWidthBasis,
        child: child,
      );
    },
  );
}