Dart has positional and named parameters, and positional parameters can be required or optional. Named parameters are always optional, but users want to have required named parameters too.
With NNBD, in optional non-nullable parameter with no default value does not make sense. If you call the function without a corresponding argument, there is no natural value to ascribe to the parameter. The parameter is, effectively, required. We'd like to disallow invalid calls statically, so this is important at the static type level as well.
This document attempts to solve these two issues (adding required named parameters, handling optional parameters with a non-nullable type and no default value in some way), and do so in a way that is consistent between named and positional parameters, and which uses a minimum of extra syntax.