requests_inspector 3.1.1 copy "requests_inspector: ^3.1.1" to clipboard
requests_inspector: ^3.1.1 copied to clipboard

A Flutter package for logging REST-APIs and GraphQL requests and accessing it by Shaking your phone to get the RequestsInspector widget on your screen.

requests_inspector 🕵 #

A Flutter package for logging API requests (RESTful API & GraphQL) requests and accessing it by Shaking your phone to get the RequestsInspector widget on your screen.

First, add it at the top of your MaterialApp with enabled: true. #

void main() {
  runApp(const RequestsInspector(
    enabled: true,
    child: MyApp(),
  ));
}

1. RESTful API: #

Note: Don't forget to enable it!

Then, on your API request add a new RequestDetails using RequestInspectorController filled with the API data. #

InspectorController().addNewRequest(
    RequestDetails(
        requestName: requestName,
        requestMethod: RequestMethod.GET,
        url: apiUrl,
        queryParameters: params,
        statusCode: responseStatusCode,
        responseBody: responseData,
        ),
    );

OR, if you are using Dio, then you can just pass RequestsInspectorInterceptor() to Dio.interceptors and we are good to go 🎉️🎉️. #

final dio = Dio()..interceptors.add(RequestsInspectorInterceptor());

Real Restful example #

a. Normal InspectorController().addNewRequest.

Future<List<Post>> fetchPosts() async {
  final dio = Dio();
  final params = {'userId': 1};

  final response = await dio.get(
    'https://jsonplaceholder.typicode.com/posts',
    queryParameters: params,
  );

  final postsMap = response.data as List;
  final posts = postsMap.map((postMap) => Post.fromMap(postMap)).toList();

  InspectorController().addNewRequest(
    RequestDetails(
      requestName: 'Posts',
      requestMethod: RequestMethod.GET,
      url: 'https://jsonplaceholder.typicode.com/posts',
      queryParameters: params,
      statusCode: response.statusCode ?? 0,
      responseBody: response.data,
    ),
  );

  return posts;
}

b. Using RequestsInspectorInterceptor.

Future<List<Post>> fetchPosts() async {
  final dio = Dio()..interceptors.add(RequestsInspectorInterceptor());
  final response = await dio.get('https://jsonplaceholder.typicode.com/posts');

  final postsMap = response.data as List;
  final posts = postsMap.map((postMap) => Post.fromMap(postMap)).toList();

  return posts;
}

Finlay, Shake your phone to get the Inspector #

2. GraphQl: #

To use requests_inspector with graphql_flutter library. you jus need to wrap your normal HttpLink with our GraphQLInspectorLink and we are done.

Example:

 Future<List<Post>> fetchPostsGraphQlUsingGraphQLFlutterInterceptor() async {
 Future<List<Post>> fetchPostsGraphQlUsingGraphQLFlutterInterceptor() async {
  final client = GraphQLClient(
    cache: GraphQLCache(),
    link: Link.split(
      (request) => request.isSubscription,
      GraphQLInspectorLink(WebSocketLink('ws://graphqlzero.almansi.me/api')),
      GraphQLInspectorLink(HttpLink('https://graphqlzero.almansi.me/api')),
    ),
  );
  const query = r'''query {
    post(id: 1) {
      id
      title
      body
    }
    }''';

  final options = QueryOptions(document: gql(query));
  final result = await client.query(options);
  if (result.hasException) {
    log(result.exception.toString());
  } else {
    log(result.data.toString());
  }
  var post = Post.fromMap(result.data?['post']);
  return [post];
}

3. GraphQl(Hassura): #

You can use hasura_connect library to use the graph ql requests, then you can just pass HasuraInspectorInterceptor() to HassuraConnect.interceptors and we are good to go 🎉️🎉️.

 Future<List<Post>> fetchPostsGraphQlUsingHasuraInterceptor() async {
  final response = await HasuraConnect(
    'https://graphqlzero.almansi.me/api',
    interceptors: [HasuraInspectorInterceptor()],
  ).query('''query {
    post(id: 1) {
      id
      title
      body
    }
    }''');
  print(response);
  var post = Post.fromMap(response['data']['post']);
  print(post.toMap());

  return [post];
}

For Web, Windows, MacOS and Linux #

Obviously, The shaking won't be good enough for those platforms 😅

So you can specify showInspectorOn with ShowInspectorOn.LongPress.

void main() {
  runApp(const RequestsInspector(
    enabled: true,
    showInspectorOn: ShowInspectorOn.LongPress
    child: MyApp(),
  ));
}

OR, you can just pass ShowInspectorOn.Both to open the Inspector with Shaking or with LongPress.

void main() {
  runApp(const RequestsInspector(
    enabled: true,
    showInspectorOn: ShowInspectorOn.Both
    child: MyApp(),
  ));
}

Some screenshots #

Future plans #

  • ✅ Add support for GraphQL.
  • ❌ Enhance the GraphQL request and response displaying structure.
  • ❌ Improve the request tab UI and add expand/collapse for each data block.
  • ❌ Add search inside the request details page.

📃 License #

This project is licensed under the MIT License - see the LICENSE file for details.

129
likes
0
pub points
93%
popularity

Publisher

verified publisherabdelazeem-kuratem.engineer

A Flutter package for logging REST-APIs and GraphQL requests and accessing it by Shaking your phone to get the RequestsInspector widget on your screen.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

collection, dio, flutter, gql, graphql, graphql_flutter, hasura_connect, provider, shake, share_plus

More

Packages that depend on requests_inspector