Skip to content

=> closures formatting in named argument list #1545

@goderbauer

Description

@goderbauer

The new dart formatter wants to format this as follows:

void _showDialog(Widget child, BuildContext context) {
  showCupertinoModalPopup<void>(
    context: context,
    builder:
        (BuildContext context) => Container(
          height: 216,
          padding: const EdgeInsets.only(top: 6.0),
          // The Bottom margin is provided to align the popup above the system
          // navigation bar.
          margin: EdgeInsets.only(
            bottom: MediaQuery.of(context).viewInsets.bottom,
          ),
          // Provide a background color for the popup.
          color: CupertinoColors.systemBackground.resolveFrom(context),
          // Use a SafeArea widget to avoid system overlaps.
          child: SafeArea(top: false, child: child),
        ),
  );
}

This gives the closure a lot of prominence over the other parameters and also causes more indentation reducing the effective line length for code inside the closure.

void _showDialog(Widget child, BuildContext context) {
  showCupertinoModalPopup<void>(
    context: context,
    builder: (BuildContext context) => Container(
      height: 216,
      padding: const EdgeInsets.only(top: 6.0),
      // The Bottom margin is provided to align the popup above the system
      // navigation bar.
      margin: EdgeInsets.only(
        bottom: MediaQuery.of(context).viewInsets.bottom,
      ),
      // Provide a background color for the popup.
      color: CupertinoColors.systemBackground.resolveFrom(context),
      // Use a SafeArea widget to avoid system overlaps.
      child: SafeArea(top: false, child: child),
    ),
  );
}

This formatting would visually also be more in line with the formatting I'd expect if builder were a list argument:

void _showDialog(Widget child, BuildContext context) {
  showCupertinoModalPopup<void>(
    context: context, 
    builder: <Widget>[
      longNameForAWidgetToMakeSureThisDoesNotFit,
      longNameForAWidgetToMakeSureThisDoesNotFit2,
      longNameForAWidgetToMakeSureThisDoesNotFit3,
    ],
  );
}

@munificent did mention that there are cases were this kind of formatting for => closures looks worse. I'm interested in seeing examples for that.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions