thenButton method

Widget thenButton({
  1. required VoidCallback onPressed,
  2. required Widget child,
})

Appends a button widget to the current text widget.

Creates an inline button within the text flow.

Parameters:

  • onPressed (VoidCallback, required): Button press handler.
  • child (Widget, required): Button content.

Returns: Widget — a rich text widget with the appended button.

Example:

Text('Click ').thenButton(
  onPressed: () => print('clicked'),
  child: Text('here'),
)

Implementation

Widget thenButton({
  required VoidCallback onPressed,
  required Widget child,
}) {
  return then(
    WidgetSpan(
      alignment: PlaceholderAlignment.middle,
      child: Builder(builder: (context) {
        final defaultTextStyle = DefaultTextStyle.of(context);
        return Button(
          style: const ButtonStyle.link(
            density: ButtonDensity.compact,
          ),
          onPressed: onPressed,
          child: Builder(
            builder: (context) {
              final buttonTextStyle = DefaultTextStyle.of(context);
              return DefaultTextStyle(
                style: defaultTextStyle.style.copyWith(
                  decoration: buttonTextStyle.style.decoration,
                ),
                overflow: defaultTextStyle.overflow,
                maxLines: defaultTextStyle.maxLines,
                softWrap: defaultTextStyle.softWrap,
                textAlign: defaultTextStyle.textAlign,
                textHeightBehavior: defaultTextStyle.textHeightBehavior,
                textWidthBasis: defaultTextStyle.textWidthBasis,
                child: child,
              );
            },
          ),
        );
      }),
    ),
  );
}