diff --git a/packages/dart_frog/lib/src/request.dart b/packages/dart_frog/lib/src/request.dart index 63c88766a..2997e261b 100644 --- a/packages/dart_frog/lib/src/request.dart +++ b/packages/dart_frog/lib/src/request.dart @@ -93,7 +93,7 @@ class Request { Request._(this._request); - shelf.Request _request; + final shelf.Request _request; /// Connection information for the associated HTTP request. HttpConnectionInfo get connectionInfo { @@ -120,16 +120,12 @@ class Request { /// Returns a [Future] containing the body as a [String]. Future body() async { - const requestBodyKey = 'dart_frog.request.body'; - final bodyFromContext = - _request.context[requestBodyKey] as Completer?; - if (bodyFromContext != null) return bodyFromContext.future; + final bodyFromContext = _bodyFutureExpando[_request]; + if (bodyFromContext != null) return bodyFromContext; final completer = Completer(); try { - _request = _request.change( - context: {..._request.context, requestBodyKey: completer}, - ); + _bodyFutureExpando[_request] = completer.future; completer.complete(await _request.readAsString()); } catch (error, stackTrace) { completer.completeError(error, stackTrace); @@ -158,3 +154,5 @@ class Request { return Request._(_request.change(headers: headers, path: path, body: body)); } } + +final _bodyFutureExpando = Expando>('dart_frog.request.body');