本文へ移動
cccskills
無料GitHub で公開

firebase-ai

Use when setting up firebase_ai, generating text/chat with Gemini, streaming AI output, building multimodal prompts, or handling AI errors.

インストール方法を見る

含まれるファイル(1)

  • SKILL.md4.5 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Firebase AI Skill

This skill defines how to correctly use Firebase AI Logic in Flutter applications.

When to Use

Use this skill when:

  • Setting up and configuring Firebase AI in a Flutter project.
  • Generating text content or chat responses with Gemini models.
  • Implementing streaming AI responses for real-time UI updates.
  • Sending multimodal prompts (text + images) to Gemini.
  • Handling errors, offline scenarios, and rate limits for AI operations.
  • Applying security and privacy considerations for AI features.

1. Setup and Configuration

flutter pub add firebase_ai
import 'package:firebase_ai/firebase_ai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';

// Initialize FirebaseApp
await Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform,
);

// Initialize the Gemini Developer API backend service
final model =
    FirebaseAI.googleAI().generativeModel(model: 'gemini-2.5-flash');
  • Ensure the Firebase project is configured for AI services via the Firebase AI Logic page in the Firebase Console.
  • Initialize Firebase before using any Firebase AI features.
  • Use FirebaseAI.googleAI() for the Gemini Developer API backend (recommended starting point).
  • Implement App Check to prevent abuse of Firebase AI endpoints.

Platform support:

PlatformSupport
iOSFull
AndroidFull
WebFull
macOS / other AppleBeta
WindowsNot supported

2. Generating Content

Single-turn text generation

final response = await model.generateContent([
  Content.text('Summarize the benefits of Flutter for mobile development'),
]);
final text = response.text; // The generated summary string

Multi-turn chat

final chat = model.startChat();
final response = await chat.sendMessage(
  Content.text('What is the difference between StatelessWidget and StatefulWidget?'),
);
print(response.text);

// Follow-up in the same conversation
final followUp = await chat.sendMessage(
  Content.text('When should I use StatefulWidget?'),
);
print(followUp.text);

Streaming responses

Use streaming to display partial results as they arrive:

final stream = model.generateContentStream([
  Content.text('Write a step-by-step guide to implementing dark mode in Flutter'),
]);

await for (final chunk in stream) {
  // Append chunk.text to the UI progressively
  setState(() => _output += chunk.text ?? '');
}

Multimodal prompts (text + image)

final imageBytes = await File('photo.jpg').readAsBytes();
final response = await model.generateContent([
  Content.multi([
    TextPart('Describe what you see in this image'),
    InlineDataPart('image/jpeg', imageBytes),
  ]),
]);

3. Error Handling

Wrap AI calls in structured error handling:

try {
  final response = await model.generateContent([Content.text(prompt)]);
  return response.text;
} on FirebaseAIException catch (e) {
  if (e.message?.contains('quota') ?? false) {
    // Handle rate limiting — show retry message or queue the request
    return 'Service is busy. Please try again shortly.';
  }
  return 'AI service error: ${e.message}';
} catch (e) {
  return 'Unexpected error: $e';
}
  • Provide meaningful error messages to users when AI operations fail.
  • Handle offline scenarios with appropriate fallback behavior (e.g., cached responses).
  • Implement exponential backoff for rate-limited or transient errors.

4. Security and Privacy

  • Follow Firebase Security Rules best practices when using AI services alongside other Firebase products.
  • Ensure proper authentication and authorization for AI feature access.
  • Sanitize user input before sending it to the model to prevent prompt injection.
  • Be mindful of data privacy requirements when processing user content with AI services.
  • Implement appropriate content filtering and moderation using safety settings:
final model = FirebaseAI.googleAI().generativeModel(
  model: 'gemini-2.5-flash',
  safetySettings: [
    SafetySetting(HarmCategory.harassment, HarmBlockThreshold.medium),
    SafetySetting(HarmCategory.dangerousContent, HarmBlockThreshold.high),
  ],
);

References

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

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).

日本語の概要は準備中です。原文の説明を表示しています。

evanca/flutter-ai-rules6512026年10月10日 更新

Use when creating a feature, designing folder structure, adding repositories/services/view models, wiring dependency injection, or deciding which layer owns logic.

日本語の概要は準備中です。原文の説明を表示しています。

evanca/flutter-ai-rules6512026年10月10日 更新

bloc

無料

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.

日本語の概要は準備中です。原文の説明を表示しています。

evanca/flutter-ai-rules6512026年10月10日 更新

Use when asked to review a PR, MR, branch, or diff, audit changed files, or check code quality.

日本語の概要は準備中です。原文の説明を表示しています。

evanca/flutter-ai-rules6512026年10月10日 更新

Use when writing switch statements, refactoring if-else chains, creating data classes, choosing records vs classes, destructuring values, or modernizing pre-Dart-3 code.

日本語の概要は準備中です。原文の説明を表示しています。

evanca/flutter-ai-rules6512026年10月10日 更新

Use when building AI agents in Dart, implementing Genkit flows or tools, integrating LLMs into Dart or Flutter applications, or using Genkit Dart plugins.

日本語の概要は準備中です。原文の説明を表示しています。

evanca/flutter-ai-rules6512026年10月10日 更新

evanca のスキルをすべて見る

このスキルの問題を報告する