anchor.diff:  
         state = body['state']?.toString() ?? '';
   
  -      var grantType = await _getParam(req, 'grant_type', state, body: true);
  +      var grantType = await _getParam(req, 'grant_type', state, body: true, throwIfEmpty: false);
   
         if (grantType != 'authorization_code') {
           var match =
  
positive.code:     RequestContext req, ResponseContext res);
  
  Future<String> _getParam(RequestContext req, String name, String state,
      {bool body: false}) async {
    Map<String, dynamic> data;
  
    if (body == true) {
  
negative.code:         }
        } else if (extensionGrants.containsKey(grantType)) {
          response = await extensionGrants[grantType](req, res);
        } else if (grantType == null) {
          // This is a device code grant.
          var scopes = await _getScopes(req, body: true);
          var deviceCodeResponse = await deviceCodeGrant(client, scopes, req, res);
          return deviceCodeResponse.toJson();
        }
  
        if (response != null) {
  