40 columns                              |
>>> Single initializers can be on one line
class Foo extends Bar {
  final int b;
  Foo(int a, this.b) : super(a);
}
<<<
class Foo extends Bar {
  final int b;
  Foo(int a, this.b) : super(a);
}
>>> (or not)
class Foo extends Bar {
  final int b;
  Foo(int a, this.b): super(aLongIdentifier);
}
<<<
class Foo extends Bar {
  final int b;
  Foo(int a, this.b)
      : super(aLongIdentifier);
}
>>> Multiple initializers are one per line
class Foo extends Bar {
  final int b;
  Foo(int a, int b) : super(a), this.b = b == null ? 0 : b;
}
<<<
class Foo extends Bar {
  final int b;
  Foo(int a, int b)
      : super(a),
        this.b = b == null ? 0 : b;
}
>>> try to keep constructor call together
var longIdentifier = new Thing(
    argument, argument);
<<<
var longIdentifier =
    new Thing(argument, argument);
>>> splits before ":" if the parameter list does not fit on one line
class Foo {
  Foo(int longArg1, int longArg2, int longArg3) : this._(longArg1);
}
<<<
class Foo {
  Foo(int longArg1, int longArg2,
      int longArg3)
      : this._(longArg1);
}
>>> indent parameters more if body is a wrapped =>
class Foo {
  Foo(firstArgument, secondArgument, third) => "very long body that must wrap";
}
<<<
class Foo {
  Foo(firstArgument, secondArgument,
          third) =>
      "very long body that must wrap";
}
>>> wrap initializers past the ":"
class Foo {
  Foo(parameter)
      : initializer = function(argument, argument),
        initializer2 = function(argument, argument);
}
<<<
class Foo {
  Foo(parameter)
      : initializer = function(
            argument, argument),
        initializer2 = function(
            argument, argument);
}
>>> split at "=" in initializer
class Foo {
  Foo() : initializer =function(argument, arg);
}
<<<
class Foo {
  Foo()
      : initializer =
            function(argument, arg);
}
>>> assert in initializer list, short
class Foo {
  Foo() : assert(1), assert(2);
}
<<<
class Foo {
  Foo()
      : assert(1),
        assert(2);
}
>>> assert in initializer list, long
class Foo {
  Foo() : assert(function(argument, argument, argument)), assert(function(argument, function(argument, argument, argument), argument));
}
<<<
class Foo {
  Foo()
      : assert(function(argument,
            argument, argument)),
        assert(function(
            argument,
            function(argument, argument,
                argument),
            argument));
}