Les meilleurs développeurs informatique freelances sont sur Codeur.com
Ouvert · Moins de 500 € · 3 offres · 262 vues
Porter Context Weaver sur mobile nécessite quelques adaptations majeures, notamment en raison des restrictions d'accès aux informations système sur les appareils mobiles (iOS/Android). Cependant, nous pouvons créer une version mobile robuste avec Flutter.
📱 Architecture pour la Version Mobile
1. Fonctionnalités clés à adapter :
1. Capture du contexte :
Android : Utiliser les APIs d'accessibilité (AccessibilityService) pour détecter l'application active.
iOS : Utiliser des APIs privées (risque de rejet App Store) ou des alternatives comme les "App Usage" SDKs tierces.
2. Presse-papiers : Disponible sur les deux plateformes via des APIs natives.
3. Modèle d'IA : Utiliser un modèle léger compatible avec mobile (ex: TensorFlow Lite, Core ML).
4. Stockage local : Utiliser sqflite (SQLite) ou isar pour le stockage local.
2. Dépendances Flutter :
bashDownloadCopy codeflutter pub add:
- flutter_screen_capture (ou équivalent pour screenshot)
- clipboard (pour le presse-papiers)
- path_provider & sqflite (pour la base de données locale)
- tflite_flutter (pour le modèle d'IA TensorFlow Lite)
📄 Code de Base pour Flutter
main.dart :
dartDownloadCopy codeimport 'package:flutter/material.dart';
import 'package:context_weaver_mobile/services/context_capture_service.dart';
import 'package:context_weaver_mobile/services/ai_summary_service.dart';
import 'package:context_weaver_mobile/database/app_database.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await AppDatabase.initDatabase();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[Email visible pour les membres Pro]
Widget build(BuildContext context) {
return MaterialApp(
title: 'Context Weaver Mobile',
theme: ThemeData(
primarySwatch: Colors.blue,
useMaterial3: true,
),
home: ContextCaptureScreen(),
);
}
}
context_capture_screen.dart :
dartDownloadCopy codeclass ContextCaptureScreen extends StatefulWidget {
[Email visible pour les membres Pro]
_ContextCaptureScreenState createState() => _ContextCaptureScreenState();
}
class _ContextCaptureScreenState extends State<ContextCaptureScreen> {
final _captureService = ContextCaptureService();
final _aiService = AISummaryService();
List<ContextSnapshot> _snapshots = [];
[Email visible pour les membres Pro]
void initState() {
super.initState();
_loadSnapshots();
}
Future<void> _captureContext() async {
final snapshot = await _captureService.captureContext();
final summary = await _aiService.generateSummary(snapshot);
await AppDatabase.instance.insertSnapshot(snapshot.copyWith(summary: summary));
_loadSnapshots();
}
void _loadSnapshots() async {
final snapshots = await AppDatabase.instance.getAllSnapshots();
setState(() => _snapshots = snapshots);
}
[Email visible pour les membres Pro]
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Context Weaver')),
body: ListView.builder(
itemCount: _snapshots.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(_snapshots[index].timestamp.toString()),
subtitle: Text(_snapshots[index].summary ?? ''),
);
},
),
floatingActionButton: FloatingActionButton(
onPressed: _captureContext,
tooltip: 'Capture Context',
child: Icon(Icons.camera),
),
);
}
}
context_capture_service.dart (Android) :
dartDownloadCopy codeimport 'package:accessibility_service/accessibility_service.dart';
class ContextCaptureService {
Future<ContextSnapshot> captureContext() async {
// Utiliser AccessibilityService pour détecter l'app active (Android)
final activeApp = await AccessibilityService.getActiveApp();
final clipboardContent = await Clipboard.getData(Clipboard.kTextPlain);
return ContextSnapshot(
activeApp: activeApp?.packageName ?? '',
clipboardContent: clipboardContent?.text ?? '',
timestamp: DateTime.now(),
);
}
}
ai_summary_service.dart :
dartDownloadCopy codeimport 'package:tflite_flutter/tflite_flutter.dart';
class AISummaryService {
late Interpreter _interpreter;
Future<void> _loadModel() async {
_interpreter = await Interpreter.fromAsset('assets/model.tflite');
}
Future<String> generateSummary(ContextSnapshot snapshot) async {
// Logique simplifiée pour invoquer le modèle TFLite
final input = [
snapshot.activeApp,
snapshot.clipboardContent,
];
final output = List.filled(1, 0).reshape([1]);
_interpreter.run(input, output);
return 'Résumé généré par l\'IA'; // Placeholder
}
}
⚙️ Étapes suivantes :
1. Implémenter les permissions nécessaires (ex : accessibilité sur Android).
2. Adapter l'UI pour qu'elle soit responsive et intuitive.
3. Intégrer un modèle TFLite/Core ML pour le résumé IA.
4. Gérer le stockage local avec sqflite ou une autre solution.
🚀 Avantages de cette approche :
1. Multiplateforme : Une seule base de code pour Android et iOS.
2. Performante : Flutter offre de bonnes performances graphiques.
3. Extensible : Facile à ajouter de nouvelles fonctionnalités.
⚠️ Limitations :
1. Accès limité aux données système sur iOS (policies restrictives).
2. Modèle d'IA léger pour rester efficace sur mobile.
C'est un bon début ! Dis-moi si tu veux approfondir certains aspects ou si tu as des questions sur l'implémentation.
Budget indicatif : Moins de 500 €
Publication : 14 mars 2026 à 08h10
Profils recherchés : Développeur spécifique freelance , Développeur mobile freelance , Développeur iOS freelance , Développeur Android freelance , Développeur API freelance
3 freelances ont répondu à ce projet
3 propositions de devis en moins de 2h
Nos ressources utiles
Allez plus loin avec nos ressources liées à ce projet !
Simulateur de prix : Combien coûte une application Android ?