accessibility
Use when working on accessibility, a11y, WCAG, ARIA, screen readers, keyboard nav, focus order, contrast, alt text, captions,…
Use when setting up Data Connect, writing GraphQL queries/mutations, configuring generated SDKs, handling offline, or applying security rules.
Claude Code
$ npx -y skills add evanca/flutter-ai-rules --skill firebase-data-connect --agent claude-code
Codex
$ npx skills add evanca/flutter-ai-rules --skill firebase-data-connect -a codex -y
Cursor
$ npx skills add evanca/flutter-ai-rules --skill firebase-data-connect -a cursor -y
Gemini CLI
$ npx skills add evanca/flutter-ai-rules --skill firebase-data-connect -a gemini-cli -y
GitHub Copilot
$ npx skills add evanca/flutter-ai-rules --skill firebase-data-connect -a github-copilot -y
OpenCode
$ npx skills add evanca/flutter-ai-rules --skill firebase-data-connect -a opencode -y
Windsurf
$ npx skills add evanca/flutter-ai-rules --skill firebase-data-connect -a windsurf -y
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
This skill defines how to correctly use Firebase Data Connect in Flutter applications.
Use this skill when:
---
flutter pub add firebase_data_connect
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, );
type Movie @table {
id: UUID! @default(expr: "uuidV4()")
title: String!
releaseYear: Int
genre: String
rating: Float
description: String
}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)
}flutterfire generate
This produces typed Dart classes for each query and mutation.
**Platform support:**
| Platform | Support | |---|---| | iOS | Full | | Android | Full | | Web | Full | | Other platforms | Not supported |
---
Use the generated SDK to execute typed queries and mutations:
// 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();Subscribe to query changes for live updates:
final subscription = ListMoviesQuery().subscribe();
subscription.listen((result) {
final movies = result.data.movies;
// Update UI with latest movie list
});---
query ListMoviesPaginated($limit: Int!, $offset: Int!) @auth(level: PUBLIC) {
movies(limit: $limit, offset: $offset) {
id
title
releaseYear
}
}---
Wrap Data Connect calls in try/catch to handle network and validation errors:
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;
}---
---
36 Flutter and Dart skills your coding agent loads by itself, sourced only from official documentation. A skill is a folder with a SKILL.md file.
Use when working on accessibility, a11y, WCAG, ARIA, screen readers, keyboard nav, focus order, contrast, alt text, captions,…
Use when creating a feature, designing folder structure, adding repositories/services/view models, wiring dependency injection,…
Use when creating a Cubit or Bloc, modeling state with sealed classes or status enums, wiring…
Use when asked to review a PR, MR, branch, or diff, audit changed files, or check code quality.
Use when writing switch statements, refactoring if-else chains, creating data classes, choosing records vs classes, destructuring…
Use when building AI agents in Dart, implementing Genkit flows or tools, integrating LLMs into Dart or Flutter applications, or…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.