>>> class JsonCodec { const JsonCodec({ Object? reviver(Object? key, Object? value)?, Object? toEncodable(dynamic object)?}) : _reviver = reviver, _toEncodable = toEncodable; } <<< class JsonCodec { const JsonCodec( {Object? reviver(Object? key, Object? value)?, Object? toEncodable(dynamic object)?}) : _reviver = reviver, _toEncodable = toEncodable; } >>> class JsonUtf8Encoder { JsonUtf8Encoder( [String? indent, dynamic toEncodable(dynamic object)?, int? bufferSize]) : _indent = _utf8Encode(indent), _toEncodable = toEncodable, _bufferSize = bufferSize ?? _defaultBufferSize; } <<< class JsonUtf8Encoder { JsonUtf8Encoder( [String? indent, dynamic toEncodable(dynamic object)?, int? bufferSize]) : _indent = _utf8Encode(indent), _toEncodable = toEncodable, _bufferSize = bufferSize ?? _defaultBufferSize; } >>> comma between parameters mandatory(f()?,i) {} optional([f()?,i]) {} named({f()?,i}) {} <<< mandatory(f()?, i) {} optional([f()?, i]) {} named({f()?, i}) {} >>> trailing commas mandatory(f()?,) {} optional([f()?,]) {} named({f()?,}) {} <<< mandatory( f()?, ) {} optional([ f()?, ]) {} named({ f()?, }) {} >>> constructor initializer trailing comma class C { C(f()?,) : field = 3; } <<< class C { C( f()?, ) : field = 3; }