@@ -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