DartPollo
Build Dart types from GraphQL schemas and queries using Introspection Query.
Overview
DartPollo is a code generator that builds Dart types from GraphQL schemas and queries. It helps you integrate GraphQL into your Dart and Flutter applications by generating type-safe models from your GraphQL operations.
Features
- Generate Dart classes from GraphQL schemas and queries
- Support for GraphQL fragments
- Support for GraphQL mutations and subscriptions
- Custom scalar mapping
- Integration with json_serializable for JSON serialization
- Type-safe GraphQL operations
Installation
Add DartPollo to your pubspec.yaml
:
dependencies:
dartpollo: ^0.0.1
dev_dependencies:
build_runner: ^2.4.15
Usage
Basic Setup
- Create a
build.yaml
file in your project root:
targets:
$default:
builders:
dartpollo:
options:
schema_mapping:
- schema: your_schema.graphql
queries_glob: lib/graphql/**.graphql
output: lib/graphql/generated/
-
Create your GraphQL schema file (or use introspection to generate it)
-
Write your GraphQL queries in
.graphql
files:
Example GraphQL query file (lib/graphql/get_user.graphql
):
# Replace this with your actual GraphQL query based on your schema
query GetUser($id: ID!) {
# Fields will depend on your specific GraphQL schema
}
- Run the build_runner to generate Dart code:
dart run build_runner build
- Use the generated code in your application:
import 'package:your_package/graphql/generated/get_user.graphql.dart';
void main() {
final query = GetUserQuery(variables: GetUserArguments(id: '123'));
// Use the query with your GraphQL client
}
Configuration Options
DartPollo can be configured with various options in your build.yaml
file:
targets:
$default:
builders:
dartpollo:
options:
schema_mapping:
- schema: your_schema.graphql
queries_glob: lib/graphql/**.graphql
output: lib/graphql/generated/
scalar_mapping:
- graphql_type: Date
dart_type: DateTime
custom_parser_import: 'package:your_package/graphql/parsers.dart'
fragments_glob: 'lib/graphql/fragments/**.graphql'
naming_scheme: pathedWithTypes # or simple
Examples
Check the example
directory for complete examples of using DartPollo with different GraphQL servers.
Custom Scalars
You can map GraphQL scalar types to Dart types using the scalar_mapping
configuration:
scalar_mapping:
- graphql_type: Date
dart_type: DateTime
use_custom_parser: true
- graphql_type: JSON
dart_type: Map<String, dynamic>
If use_custom_parser
is set to true
, you need to provide custom parsing functions in a separate file and reference it with custom_parser_import
.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Libraries
- builder
- client
- dartpollo
- generator
- generator/data/class_definition
- generator/data/class_property
- generator/data/data
- generator/data/definition
- generator/data/enum_definition
- generator/data/enum_value_definition
- generator/data/fragment_class_definition
- generator/data/library_definition
- generator/data/nullable
- generator/data/query_definition
- generator/data/query_input
- generator/data_printer
- generator/ephemeral_data
- generator/errors
- generator/graphql_helpers
- generator/helpers
- generator/print_helpers
- schema/graphql_query
- schema/graphql_response
- schema/schema_options
- transformer/add_typename_transformer
- visitor/canonical_visitor
- visitor/generator_visitor
- visitor/object_type_definition_visitor
- visitor/operation_type_definition_visitor
- visitor/schema_definition_visitor
- visitor/type_definition_node_visitor