```dart
const getTodo = 'getTodo';
const getPost = 'getPost';
String graphQLDocument = '''
  query GetPostAndTodo(\$todoId: ID!, \$postId: ID!) {
    $getTodo(id: \$todoId) {
      id
      name
    }
    $getPost(id: \$postId) {
      id
      title
      rating
    }
  }

''';
final multiOperationRequest = GraphQLRequest<String>(
    document: graphQLDocument,
    variables: <String, String>{
      'todoId': someTodoId,
      'postId': somePostId
    },
);
```
Notice here that `modelType` and `decodePath` are omitted. When these decoding variables are omitted, the plugin simply returns the result as a raw `String` from the response.

Once you have the response data in a `String`, you can parse it using `json.decode()` and pass the resulting `Map` to the model's `fromJson()` method to create an instance of the model.

```dart
// Do not forget to add this to imports for json.decode
import 'dart:convert';

...

Future<void> queryMultiOperationRequest(GraphQLRequest operation) async {
  final response = await Amplify.API.query(request: multiOperationRequest).response;
  if (response.data != null) {
    final jsonData = (json.decode(response.data) as Map).cast<String, Object?>();
    final post = Post.fromJson((jsonData[getPost] as Map).cast<String, Object?>);
    final todo = Todo.fromJson((jsonData[getTodo] as Map).cast<String, Object?>);
  }
}
```
