<< All versions

Skill v1.0.2

currentAutomated scan100/100
evanca/flutter-ai-rules/firebase-data-connect

+1 new, ~1 modified

──Details
PublishedSeptember 25, 2026 at 09:42 PM
Content Hashsha256:7babc87c632ea58a...
Git SHA7b9cce235714
Bump Typepatch
Compare with v1.0.1
──Files
Files (1 file, 4.3 KB)
SKILL.md4.3 KBactive
SKILL.md · 187 lines · 4.3 KB

version: "1.0.2" name: firebase-data-connect description: "Use when setting up Data Connect, writing GraphQL queries/mutations, configuring generated SDKs, handling offline, or applying security rules." license: MIT


Firebase Data Connect Skill

This skill defines how to correctly use Firebase Data Connect in Flutter applications.

When to Use

Use this skill when:

  • Setting up and configuring Firebase Data Connect in a Flutter project.
  • Designing schemas, queries, and mutations for Data Connect.
  • Implementing generated SDK calls for typed queries and mutations.
  • Handling network failures, data inconsistencies, and offline scenarios.
  • Applying security and performance best practices.

1. Setup and Configuration

Step 1: Install the package

flutter pub add firebase_data_connect

Step 2: Import and initialize

dart
import 'package:firebase_data_connect/firebase_data_connect.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);

Step 3: Define a schema in dataconnect/schema/schema.gql

graphql
type Movie @table {
id: UUID! @default(expr: "uuidV4()")
title: String!
releaseYear: Int
genre: String
rating: Float
description: String
}

Step 4: Define queries and mutations in dataconnect/connector/queries.gql

graphql
query ListMovies @auth(level: PUBLIC) {
movies {
id
title
releaseYear
genre
rating
}
}
mutation CreateMovie($title: String!, $releaseYear: Int, $genre: String) @auth(level: USER) {
movie_insert(data: {
title: $title
releaseYear: $releaseYear
genre: $genre
})
}
mutation DeleteMovie($id: UUID!) @auth(level: USER) {
movie_delete(id: $id)
}

Step 5: Generate the typed Flutter SDK

flutterfire generate

This produces typed Dart classes for each query and mutation.

Platform support:

PlatformSupport
iOSFull
AndroidFull
WebFull
Other platformsNot supported

2. Executing Queries and Mutations

Use the generated SDK to execute typed queries and mutations:

dart
// Execute a query
final result = await ListMoviesQuery().execute();
final movies = result.data.movies;
// Execute a mutation
await CreateMovieMutation(title: 'Inception', releaseYear: 2010, genre: 'Sci-Fi')
.execute();
// Delete by ID
await DeleteMovieMutation(id: movieId).execute();

Real-Time Listeners

Subscribe to query changes for live updates:

dart
final subscription = ListMoviesQuery().subscribe();
subscription.listen((result) {
final movies = result.data.movies;
// Update UI with latest movie list
});

3. Performance and Caching

  • Design efficient queries requesting only the fields needed to minimize data transfer.
  • Implement pagination for large datasets:

``graphql query ListMoviesPaginated($limit: Int!, $offset: Int!) @auth(level: PUBLIC) { movies(limit: $limit, offset: $offset) { id title releaseYear } } ``

  • Use real-time listeners judiciously to avoid unnecessary network usage.
  • Consider offline capabilities for critical app functionality by caching query results locally.

4. Error Handling

Wrap Data Connect calls in try/catch to handle network and validation errors:

dart
try {
final result = await ListMoviesQuery().execute();
return result.data.movies;
} on FirebaseException catch (e) {
if (e.code == 'unavailable') {
// Handle offline — return cached data
return _localCache.getMovies();
}
rethrow;
}
  • Implement retry logic with exponential backoff for transient connection errors.
  • Provide meaningful error messages for data validation failures.
  • Monitor error rates and investigate recurring issues.

5. Security

  • Use @auth directives in schema to control access levels (PUBLIC, USER, NO_ACCESS).
  • Integrate Firebase Authentication for user-based access control.
  • Validate data on both client and server sides.
  • Follow data privacy best practices when handling user information.

References

← v1.0.1All versions