@@ -110,7 +110,7 @@ class Request {
110110
111111 Request ._(this ._request);
112112
113- shelf.Request _request;
113+ final shelf.Request _request;
114114
115115 /// Connection information for the associated HTTP request.
116116 HttpConnectionInfo get connectionInfo {
@@ -146,16 +146,12 @@ class Request {
146146
147147 /// Returns a [Future] containing the body as a [String] .
148148 Future <String > body () async {
149- const requestBodyKey = 'dart_frog.request.body' ;
150- final bodyFromContext =
151- _request.context[requestBodyKey] as Completer <String >? ;
152- if (bodyFromContext != null ) return bodyFromContext.future;
149+ final bodyFromCache = _requestBodyCache[_request];
150+ if (bodyFromCache != null ) return bodyFromCache;
153151
154152 final completer = Completer <String >();
155153 try {
156- _request = _request.change (
157- context: {..._request.context, requestBodyKey: completer},
158- );
154+ _requestBodyCache[_request] = completer.future;
159155 completer.complete (await _request.readAsString ());
160156 } catch (error, stackTrace) {
161157 completer.completeError (error, stackTrace);
@@ -184,3 +180,5 @@ class Request {
184180 return Request ._(_request.change (headers: headers, path: path, body: body));
185181 }
186182}
183+
184+ final _requestBodyCache = Expando <Future <String >>('dart_frog.request.body' );
0 commit comments