Loading repository data…
Loading repository data…
Francesco-rainone / repository
Livingdex is a Flutter app that uses Gemini 2.0 Flash to identify plants and animals, with an interface inspired by the Pokédex.
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
Livingdex is a Flutter application that uses Gemini 2.0 Flash to simulate a real-life Pokédex, dedicated to identifying plants and animals.
| Application Icon | Splash Screen | Dark Mode |
| Main Screen | Information Screen | Rotomdex Chatbot (full-screen image) |
The main advantage of Firebase AI Logic is flexibility. You can now easily choose which AI provider to use (Vertex AI or Google AI) directly from the code configuration, without having to rewrite the calling logic. This allows you to:
Before (Firebase Vertex AI):
// The logic was tightly coupled to FirebaseVertexAI
model = FirebaseVertexAI.instance.generativeModel(
model: geminiModel,
generationConfig: GenerationConfig(
temperature: 0,
responseMimeType: 'application/json',
),
);
Now (Firebase AI Logic): With Firebase AI Logic, the provider choice is configured in the file that manages the model calling logic (in this case, lib/quick_id.dart)
👉 Vertex AI Provider (for enterprise solutions and RAG):
final googleAI = FirebaseAI.vertexAI();
model = googleAI.generativeModel(
model: geminiModel,
generationConfig: GenerationConfig(
temperature: 0.1,
responseMimeType: 'application/json',
),
);
👉 Google AI Provider (for prototyping and lower costs):
final googleAI = FirebaseAI.googleAI();
model = googleAI.generativeModel(
model: geminiModel,
generationConfig: GenerationConfig(
temperature: 0.1,
responseMimeType: 'application/json',
),
);
Livingdex is a personal project that I enjoyed developing. The main goal is to satisfy people's curiosity about the animals and plants they encounter. By taking a photo through the application, you can identify the living being in the image, obtain detailed information (name, weight, height, description enriched with curiosities), and interact with a chatbot for further exploration that will respond by consulting certified sources.
Livingdex is designed to encourage people to look around and see their surroundings better, with a fresh perspective on the environment. Everything is presented with an interface that recalls the aesthetics of a Pokédex, enhanced with additional features like dark mode.
Here you can find the functional analysis of the project and the folder with the unit tests performed:
To handle requests from the app, a backend on Cloud Run is required. Two approaches are recommended:
This approach orchestrates multiple services to provide high-quality responses (RAG).
Structured JSON Response Example:
{
"id": "req-1234",
"identified": true,
"species": "Acer platanoides",
"common_name": "Platano",
"confidence": 0.93,
"height_estimate": "5-10 m",
"description": "Short description...",
"sources": [
{"name":"Wikipedia", "url":"https://en.wikipedia.org/...."}
]
}
A simpler alternative if RAG is not needed. The backend acts as a proxy that authenticates the request and forwards it to Gemini. It's faster and cheaper to implement, but with lower response quality.
The app works on mobile devices and, at the moment, has been tested only on Android. iOS configuration has not been tested and may cause installation and configuration issues.
Make sure you have the following installed:
This guide is based on the recommended Reasoning Engine approach.
const geminiModel = 'gemini-2.0-flash';
const cloudRunHost = 'your-cloud-run-service.a.run.app';
// File automatically generated by `flutterfire configure`.
import 'package:firebase_core/firebase_core.dart' show FirebaseOptions;
import 'package:flutter/foundation.dart' show defaultTargetPlatform, TargetPlatform;
class DefaultFirebaseOptions {
static FirebaseOptions get currentPlatform {
// Example for Android
if (defaultTargetPlatform == TargetPlatform.android) {
return const FirebaseOptions(
apiKey: 'ANDROID_API_KEY_PLACEHOLDER',
appId: 'ANDROID_APP_ID_PLACEHOLDER',
messagingSenderId: 'SENDER_ID_PLACEHOLDER',
projectId: 'PROJECT_ID_PLACEHOLDER',
storageBucket: 'PROJECT_ID.appspot.com',
);
}
// Add configurations for other platforms here (e.g., iOS)
throw UnsupportedError(
'DefaultFirebaseOptions are not supported for this platform.',
);
}
}
If you want to contribute, you are welcome! The areas of greatest need are those listed above. Open a Pull Request to propose your changes.