sanity_query_builder 0.0.3 copy "sanity_query_builder: ^0.0.3" to clipboard
sanity_query_builder: ^0.0.3 copied to clipboard

Flutter/Dart package for building type-safe Sanity GROQ queries with fluent API, nested projections, complex filters, parameters, and composable syntax for Sanity CMS integration

example/lib/main.dart

import 'package:sanity_query_builder/projection_builder.dart';
import 'package:sanity_query_builder/sanity_query_builder.dart';

void main() {
  final projection = ProjectionBuilder()
      .field('language')
      .array('blocks', _blockProjection)
      .build();
  final query = SanityQueryBuilder()
      .type('page')
      .where('language', '==', 'en-US')
      .inParentheses((b) {
        return b.where('isRoot').where('isIndex');
      })
      .first()
      .project(projection)
      .build();

  print(query.query);
  // *[_type == "travelGuide" && language == "en-US" && _type == "page" && language == "en-US" && (isRoot && isIndex)][0]{language, blocks[]{..., image{_type, "url": asset->url, "info": asset->metadata{...dimensions}}, cardItems[]{..., image{_type, "url": asset->url, "info": asset->metadata{...dimensions}}}, userHighlightCards[]->{..., image{_type, "url": asset->url, "info": asset->metadata{...dimensions}}}, logos[]{_type, "url": asset->url}, "relatedArticles": *[_type == "travelGuide" && language == "en-US"]}}
}

ProjectionBuilder _blockProjection(ProjectionBuilder b) {
  final relatedArticleQuery =
      SanityQueryBuilder().type('travelGuide').where('language', '==', 'en-US');

  return b
      .spread()
      .object('image', _imageProjection)
      .array('cardItems', _cardProjection)
      .arrayReference('userHighlightCards', _cardProjection)
      .array('logos', _logosProjection)
      .query('relatedArticles', relatedArticleQuery);
}

ProjectionBuilder _imageProjection(ProjectionBuilder b) {
  return b
      .field('_type')
      .alias('url', 'asset->url')
      .alias('info', 'asset->metadata{...dimensions}');
}

ProjectionBuilder _cardProjection(ProjectionBuilder b) {
  return b.spread().object('image', _imageProjection);
}

ProjectionBuilder _logosProjection(ProjectionBuilder b) {
  return b.field('_type').alias('url', 'asset->url');
}
3
likes
160
points
3
downloads

Publisher

verified publisherstudiocloud.dev

Weekly Downloads

Flutter/Dart package for building type-safe Sanity GROQ queries with fluent API, nested projections, complex filters, parameters, and composable syntax for Sanity CMS integration

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

flutter

More

Packages that depend on sanity_query_builder