smart_vision_flutter 0.0.1
smart_vision_flutter: ^0.0.1 copied to clipboard
A Flutter package for AI-powered image analysis with Gemini and future multi-provider support.
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 #
- ✅ Gemini support
- ✅ VisionResult model
- ✅ Error handling
- ✅ Provider abstraction
Future Releases #
- ❌ OpenAI Vision support
- ❌ Claude Vision support
- ❌ HuggingFace Vision support
- ❌ Streaming responses
- ❌ Batch image analysis
- ❌ Response metadata
- ❌ Confidence 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.