accessibility
Use when working on accessibility, a11y, WCAG, ARIA, screen readers, keyboard nav, focus order, contrast, alt text, captions,…
Use when setting up Storage, uploading/downloading files, managing metadata, handling errors, or applying security rules.
Claude Code
$ npx -y skills add evanca/flutter-ai-rules --skill firebase-storage --agent claude-code
Codex
$ npx skills add evanca/flutter-ai-rules --skill firebase-storage -a codex -y
Cursor
$ npx skills add evanca/flutter-ai-rules --skill firebase-storage -a cursor -y
Gemini CLI
$ npx skills add evanca/flutter-ai-rules --skill firebase-storage -a gemini-cli -y
GitHub Copilot
$ npx skills add evanca/flutter-ai-rules --skill firebase-storage -a github-copilot -y
OpenCode
$ npx skills add evanca/flutter-ai-rules --skill firebase-storage -a opencode -y
Windsurf
$ npx skills add evanca/flutter-ai-rules --skill firebase-storage -a windsurf -y
name: firebase-storage description: "Use when setting up Storage, uploading/downloading files, managing metadata, handling errors, or applying security rules." license: MIT
This skill defines how to correctly use Firebase Cloud Storage in Flutter applications.
Use this skill when:
---
flutter pub add firebase_storage
import 'package:firebase_storage/firebase_storage.dart'; final storage = FirebaseStorage.instance; // Or specify a bucket explicitly: // final storage = FirebaseStorage.instanceFor(bucket: "gs://BUCKET_NAME");
> **Security note:** By default, a Cloud Storage bucket requires Firebase Authentication for any action. Configuring public access may also make App Engine files publicly accessible — restrict access again when you set up Authentication.
---
**Create a reference:**
final storageRef = FirebaseStorage.instance.ref();
final fileRef = storageRef.child("uploads/file.jpg");**Upload:**
final uploadTask = fileRef.putFile(file); final snapshot = await uploadTask; final downloadUrl = await snapshot.ref.getDownloadURL();
**Download (in-memory):**
final data = await fileRef.getData();
**Download URL:**
final downloadUrl = await fileRef.getDownloadURL();
**Delete:**
await fileRef.delete();
---
**Get metadata:**
final metadata = await fileRef.getMetadata();
print('Content type: ${metadata.contentType}');
print('Size: ${metadata.size}');**Update metadata:**
final newMetadata = SettableMetadata(
contentType: "image/jpeg",
customMetadata: {'uploaded_by': 'user123'},
);
await fileRef.updateMetadata(newMetadata);Use **custom metadata** to store additional key/value pairs with your files.
---
Use `try-catch` with `FirebaseException`. Key error codes:
| Code | Meaning | |---|---| | `storage/object-not-found` | File doesn't exist at the reference | | `storage/bucket-not-found` | No bucket configured for Cloud Storage | | `storage/project-not-found` | No project configured for Cloud Storage | | `storage/quota-exceeded` | Storage quota exceeded | | `storage/unauthenticated` | User needs to authenticate | | `storage/unauthorized` | User lacks permission | | `storage/retry-limit-exceeded` | Operation timeout exceeded |
---
**Monitor upload progress:**
final uploadTask = fileRef.putFile(file);
uploadTask.snapshotEvents.listen((TaskSnapshot snapshot) {
print('Progress: ${(snapshot.bytesTransferred / snapshot.totalBytes) * 100}%');
});---
---
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.