flutter_graphql_codegen 1.0.1
flutter_graphql_codegen: ^1.0.1 copied to clipboard
A powerful code generator for Flutter GraphQL applications that generates type-safe Dart classes and client extensions from GraphQL schemas and operations.
Changelog #
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
1.0.1 - 2025-08-31 #
Fixed #
- CI stability: make
dart analyze --fatal-infospass by removing an unused import in tests
1.0.0 - 2025-06-08 #
Added #
π― Core Features
- Type-safe code generation from GraphQL schemas and operations
- Automatic Dart class generation with JSON serialization support via
json_annotation - GraphQL client extensions for queries, mutations, and subscriptions
- Full null safety support with graceful error handling and safe defaults
π¦ Custom Scalar Support
DateTimewith automatic parsing andDateTimeConverterDecimalfor precise decimal numbers withDecimalConverterLongfor large integers withLongConverterBytefor byte values withByteConverterJSONfor arbitrary JSON data handling- Safe type converters for all basic types (
SafeBoolConverter,SafeIntConverter,SafeDoubleConverter,SafeStringConverter)
π Multiple Schema Sources
- Local file paths: relative and absolute paths
- HTTP/HTTPS URLs: direct GraphQL endpoint introspection
- File URLs:
file://protocol support - Alternative configuration: support for
schemaanddocumentsfield names
π§ Advanced GraphQL Features
- Object types and interfaces with proper inheritance handling
- Union types with discriminated union support
- Enums with custom values and safe parsing
- Input types with validation and complex arguments
- Lists and nullable combinations (T, T?, [T], [T]?, [T?], [T?]?)
- Fragments and inline fragments for query optimization
- Custom directives handling
- Nested and recursive types with circular reference detection
π οΈ Development Tools
- Build system integration via
build_runnerandBuilderpattern - Flexible configuration through YAML files
- Glob pattern support for GraphQL document discovery
- Output directory customization
- Generated file management with proper imports and exports
π§ͺ Quality Assurance
- Comprehensive test coverage (85%+ coverage)
- Edge case handling for malformed GraphQL schemas
- Error recovery for invalid or missing data
- Type safety validation across all generated code
- Integration tests with real-world GraphQL schemas
Technical Implementation #
Code Generation Architecture
- Modular generator design with separate components:
TypeGenerator: Handles GraphQL type to Dart class conversionClientExtensionGenerator: Creates GraphQL client extension methodsSchemaAnalyzer: Parses and analyzes GraphQL schemasOperationAnalyzer: Processes GraphQL operations (queries, mutations, subscriptions)SchemaDownloader: Handles schema fetching from various sources
Generated Code Structure
// Example generated type
@JsonSerializable()
class User {
final String id;
final String? name;
@SafeBoolConverter()
final bool isActive;
@DateTimeConverter()
final DateTime? createdAt;
}
// Example generated extension
extension GraphQLClientExtensions on GraphQLClient {
Future<QueryResult<GetUser$Query>> getUserQuery({
required GetUserArguments variables,
}) async {
// Implementation with type safety
}
}
Error Handling Strategy
- Safe converters: All custom scalar converters include fallback values
- Null safety: Proper handling of nullable types with safe defaults
- Exception handling: Graceful degradation for schema parsing errors
- Validation: Input validation for all generated methods
Dependencies #
- Minimum Dart SDK: 3.0.0 (full null safety support)
- Flutter compatibility: 3.x and above
- Core dependencies:
json_annotation: ^4.8.1for serialization annotationsgraphql: ^5.1.3for GraphQL client operationsbuild: ^2.0.0for build system integrationyaml: ^3.1.0for configuration parsinggql: ^1.0.0for GraphQL AST parsing
Performance Optimizations #
- Lazy loading: Generated extensions are loaded only when needed
- Efficient parsing: Optimized GraphQL schema parsing with caching
- Minimal dependencies: Only essential packages included
- Tree-shaking friendly: Generated code supports dead code elimination
Documentation & Examples #
- Comprehensive README with detailed usage examples
- API documentation with inline code examples
- Configuration guide for all supported schema sources
- Testing examples and best practices
- Migration guide for future versions
Breaking Changes #
- This is the initial release, no breaking changes from previous versions
Migration Notes #
- For new projects: Follow the installation and configuration guide in README.md
- This package replaces manual GraphQL type definitions and client code
Known Limitations #
- Schema introspection may be slower for very large GraphQL schemas (>1000 types)
- Custom directives are parsed but not actively processed in type generation
- WebSocket subscriptions require additional client configuration
Note: This changelog follows Semantic Versioning and Keep a Changelog standards.