Smart Vision Flutter
A Flutter package that simplifies AI vision integration for Flutter developers.
smart_vision_flutter allows developers to send images to AI vision models and receive structured image analysis results with a clean, provider-based architecture.
Features
✅ AI-powered image analysis
✅ Simple and clean API
✅ Structured response model
✅ Built-in validation and error handling
✅ Automatic image MIME type detection
✅ Provider-based architecture
✅ Easy to extend with additional AI providers
Supported Providers
| Provider | Status |
|---|---|
| Gemini | ✅ Supported |
| Claude | 🔜 Coming soon |
| OpenAI | 🔜 Coming soon |
| HuggingFace | 🔜 Coming soon |
Installation
Add the package to your pubspec.yaml:
dependencies:
smart_vision_flutter: ^0.0.1
Then run:
flutter pub get
Import
import 'package:smart_vision_flutter/smart_vision_flutter.dart';
Quick Start
1. Create a configuration
final vision = SmartVision(
config: VisionConfig(
apiKey: 'YOUR_GEMINI_API_KEY',
provider: VisionProvider.gemini,
),
);
2. Analyze an image
final result = await vision.analyzeImage(
imageFile: imageFile,
);
print(result.description);
Complete Example
import 'dart:io';
import 'package:smart_vision_flutter/smart_vision_flutter.dart';
Future<void> analyzeImage(File imageFile) async {
final vision = SmartVision(
config: VisionConfig(
apiKey: 'YOUR_GEMINI_API_KEY',
provider: VisionProvider.gemini,
),
);
try {
final result = await vision.analyzeImage(
imageFile: imageFile,
);
print(result.description);
} on VisionException catch (e) {
print(e.message);
}
}
Using a Custom Prompt
By default, Smart Vision uses:
Describe this image briefly.
You can customize the prompt:
final vision = SmartVision(
config: VisionConfig(
apiKey: 'YOUR_GEMINI_API_KEY',
provider: VisionProvider.gemini,
prompt: 'Describe this image in detail and identify important objects.',
),
);
Picking Images with image_picker
Example:
final ImagePicker picker = ImagePicker();
final XFile? image = await picker.pickImage(
source: ImageSource.gallery,
);
if (image != null) {
final file = File(image.path);
final result = await vision.analyzeImage(
imageFile: file,
);
print(result.description);
}
Response Model
Smart Vision returns a VisionResult.
final result = await vision.analyzeImage(
imageFile: imageFile,
);
print(result.description);
VisionResult
class VisionResult {
final String description;
}
Error Handling
The package throws VisionException for known failures.
Example:
try {
final result = await vision.analyzeImage(
imageFile: imageFile,
);
print(result.description);
} on VisionException catch (e) {
print(e.message);
}
Built-in Validations
Smart Vision automatically validates:
- Empty API keys
- Empty prompts
- Missing image files
- Empty image files
- Oversized image files
- Invalid AI responses
- Network failures
- Request timeouts
No additional validation is required.
Architecture
The package follows a provider-based architecture.
SmartVision
│
▼
VisionConfig
│
▼
VisionProvider
│
▼
VisionServiceInterface
│
┌──┼───────────────┬───────────────┐
▼ ▼ ▼ ▼
Gemini OpenAI Claude
Service Service Service
This architecture makes it easy to add new AI providers without changing the public API.
Current Gemini Example
final vision = SmartVision(
config: VisionConfig(
apiKey: 'YOUR_GEMINI_API_KEY',
provider: VisionProvider.gemini,
),
);
final result = await vision.analyzeImage(
imageFile: imageFile,
);
print(result.description);
Example Output
A young woman is standing outdoors holding a bouquet of flowers. She is smiling and wearing a white dress. Trees and greenery can be seen in the background.
Roadmap
Version 0.1.0
xGemini supportxVisionResult modelxError handlingxProvider abstraction
Future Releases
OpenAI Vision supportClaude Vision supportHuggingFace Vision supportStreaming responsesBatch image analysisResponse metadataConfidence scores
Requirements
- Flutter 3.x+
- Dart 3.x+
- Valid AI provider API key
Security Notes
Never commit API keys to source control.
Recommended approaches:
- Environment variables
- Flutter DotEnv
- Secure backend services
- Secret managers
Example:
final apiKey = dotenv.env['GEMINI_API_KEY'];
Contributing
Contributions, issues, and feature requests are welcome.
Feel free to open an issue or submit a pull request.
License
MIT License
Built with ❤️ for Flutter developers.