Use when working on accessibility, a11y, WCAG, ARIA, screen readers, keyboard nav, focus order, contrast, alt text, captions, reduced motion, or target sizes; not language/culture/device (see inclusive-design).
中文简介正在准备中。当前显示原文说明。
Use when setting up Storage, uploading/downloading files, managing metadata, handling errors, or applying security rules.
中文简介正在准备中。当前显示原文说明。
安装前可以查看交给 AI 代理的指令内容。
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");
flutterfire configure to update your Firebase config with the default Storage 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 |
quota-exceeded on the Spark plan, upgrade to Blaze.Monitor upload progress:
final uploadTask = fileRef.putFile(file);
uploadTask.snapshotEvents.listen((TaskSnapshot snapshot) {
print('Progress: ${(snapshot.bytesTransferred / snapshot.totalBytes) * 100}%');
});
uploadTask.cancel().uploadTask.pause() and uploadTask.resume().还没有评价。欢迎分享你的使用感受。
无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。
还没有评论。来写第一条吧。
Use when working on accessibility, a11y, WCAG, ARIA, screen readers, keyboard nav, focus order, contrast, alt text, captions, reduced motion, or target sizes; not language/culture/device (see inclusive-design).
中文简介正在准备中。当前显示原文说明。
Use when creating a feature, designing folder structure, adding repositories/services/view models, wiring dependency injection, or deciding which layer owns logic.
中文简介正在准备中。当前显示原文说明。
Use when creating a Cubit or Bloc, modeling state with sealed classes or status enums, wiring BlocBuilder/BlocListener/BlocProvider, writing bloc tests, or choosing between Cubit and Bloc.
中文简介正在准备中。当前显示原文说明。
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 values, or modernizing pre-Dart-3 code.
中文简介正在准备中。当前显示原文说明。
Use when building AI agents in Dart, implementing Genkit flows or tools, integrating LLMs into Dart or Flutter applications, or using Genkit Dart plugins.
中文简介正在准备中。当前显示原文说明。