```dart
const getTodo = 'getTodo';
const getPost = 'getPost';
const 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<String> 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?>);
  }
}
```
