SAM KI Chatbot - Vollständige Implementierung¶
✅ Erfolgreich implementiert¶
📁 Neue Dateien:¶
lib/services/chatbot_service.dart- Erweiterte NLP-Engine mit Intent-Erkennung & Entity-Extraktion
- 5-Stufen Matching-System:
- Intent + Entity Matching (höchste Priorität)
- Exakte Keyword-Matches
- Partielle Keyword-Matches mit Synonymen
- Fuzzy-Matching (Tippfehler-tolerant)
- Semantisches Scoring mit Gewichtung
- 20+ FAQ-Einträge mit erweiterten Keywords
- Synonym-Expansion: "erstellen" = "anlegen" = "hinzufügen"
- Intelligentes Scoring: Aktionswörter (5.0), Entitäten (3.5), Kontext (1.0)
- Stopword-Filtering für bessere Erkennung
-
Kategorien: Kunden, Artikel, Bestellungen, Zuweisung, Einstellungen, Allgemein
-
lib/pages/widgets/dialogs/chatbot_dialog.dart - Overlay-basiert (NICHT blockierend! ✨)
- Programm im Hintergrund weiter nutzbar
- Verschiebbarer Dialog (Drag & Drop)
- Minimier-Funktion (Ein-/Ausklappen)
- Chat-Interface mit User/Bot-Nachrichten
- Scrollbare Chat-Historie
- Eingabefeld mit Enter-Support
- Schnellvorschläge als Chips
- Gradient-Header mit Icons
🔧 Geänderte Dateien:¶
lib/pages/application/widgets/app_nav_bar.dart- Neuer "SAM KI" Button in der Navbar
- Nutzt
ChatbotOverlay.show(context)stattshowDialog - Icon: Sparkles ✨ (CupertinoIcons.sparkles)
- Farbe: Deep Purple
🧠 Intelligente Features¶
🎯 Intent-Erkennung¶
Erkennt die Absicht der Frage: - create: erstellen, anlegen, hinzufügen, neu - delete: löschen, entfernen, delete - edit: ändern, bearbeiten, update - search: suchen, finden, filtern - explain: was ist, wie funktioniert - compare: unterschied, vergleich, vs - upload: hochladen, upload, bild - export: exportieren, download - open: öffnen, wo finde - assign: zuweisen, zuordnen
🏷️ Entity-Extraktion¶
Identifiziert Objekte: - customer: kunde, kunden, customer - article: artikel, produkt, ware - order: bestellung, auftrag - image: bild, foto - category: kategorie, gruppe - assignment: zuweisung, zuordnung - user: benutzer, mitarbeiter - settings: einstellungen, config - status: status, zustand - system: system, programm, app
🔍 Beispiel-Erkennungen¶
- ✅ "mache neuen kunde" → Intent: create, Entity: customer → FAQ: Kunde erstellen
- ✅ "lösche artiekel" (Tippfehler!) → Fuzzy-Match → FAQ: Artikel löschen
- ✅ "wo einstellungen" → Intent: open, Entity: settings → FAQ: Einstellungen finden
- ✅ "unterschied auto manuell zuweisung" → Intent: compare, Entity: assignment → FAQ: Vergleich Zuweisung
- ✅ "hochladen foto" → Intent: upload, Entity: image → FAQ: Bilder hochladen
📋 FAQ-Kategorien & Fragen¶
🙋 Kunden (3 Fragen)¶
- Wie erstelle ich einen neuen Kunden?
- Wie lösche ich einen Kunden?
- Was sind Kundenkategorien?
📦 Artikel (3 Fragen)¶
- Wie erstelle ich einen neuen Artikel?
- Wie lade ich Artikelbilder hoch?
- Wie lösche ich einen Artikel?
🔗 Artikelzuweisung (3 Fragen)¶
- Wie funktioniert die automatische Artikelzuweisung?
- Wie weise ich Artikel manuell zu Kunden zu?
- Was ist der Unterschied zwischen automatischer und manueller Zuweisung?
📝 Bestellungen (3 Fragen)¶
- Wie lege ich eine neue Bestellung an?
- Wie ändere ich den Status einer Bestellung?
- Wie kann ich Bestellungen filtern?
⚙️ Einstellungen (3 Fragen)¶
- Wo finde ich die Einstellungen?
- Wie erstelle ich einen neuen Benutzer?
- Was sind FeatureFlags?
💡 Allgemein (3 Fragen)¶
- Was ist EasySale ERP?
- Wie funktioniert die Suche?
- Kann ich Daten exportieren?
🎨 Features¶
✅ Nicht-Blockierender Overlay - Nutzt Flutter Overlay statt showDialog - Programm im Hintergrund voll nutzbar! 🎉 - Transparent, kein Barrier - Mehrfachinstanzen verhindert
✅ Minimier-Funktion - Button zum Ein-/Ausklappen - Minimiert: Nur Header sichtbar (60px) - Maximiert: Volle Chat-Höhe (700px) - Drag auch im minimierten Zustand
✅ Verschiebbarer Dialog - Drag & Drop an beliebige Position - Bleibt innerhalb des Bildschirms - Clamp-Logik verhindert Überlauf
✅ Super-Intelligente Suche - 5-Stufen-Matching-System - Intent + Entity Erkennung - Synonym-Expansion - Tippfehler-Toleranz (Fuzzy-Match) - Semantisches Scoring mit Gewichtung - Stopword-Filtering - Dynamischer Schwellwert
✅ User Experience - Willkommensnachricht beim Öffnen - Schnellvorschläge für häufige Fragen - Chat-Bubble Design (User rechts, Bot links) - Icons: User-Icon & Sparkles-Icon - Auto-Scroll zu neuen Nachrichten - Gradient-Header (Deep Purple) - Clear-Button im Eingabefeld
✅ Erweiterbar - Einfach neue FAQ-Einträge hinzufügen - Kategorien-System vorhanden - Später einfach mit OpenAI/GPT erweiterbar
🚀 Verwendung¶
- Button in Navbar finden
- Linke Sidebar → ganz unten
-
"SAM KI" Button mit ✨ Icon
-
Dialog öffnen
- Klick auf Button öffnet Overlay-Dialog
- Hintergrund bleibt nutzbar!
-
Dialog kann per Drag bewegt werden
-
Minimieren/Maximieren
- Minimize-Button im Header
- Minimiert: Nur Titelleiste sichtbar
-
Drag auch im minimierten Zustand möglich
-
Fragen stellen
- Frage ins Eingabefeld tippen
- Enter drücken oder Send-Button klicken
- Bot antwortet nach kurzer Verzögerung (500ms)
-
Während der Bot antwortet, kannst du weiterarbeiten!
-
Schnellvorschläge nutzen
- Beim ersten Öffnen erscheinen Vorschläge als Chips
-
Klick auf Chip fügt Frage ein und sendet sie
-
Dialog schließen
- X-Button im Header klicken
- Oder
ChatbotOverlay.hide()aufrufen
🔬 Technische Details¶
Overlay-System¶
// Overlay erstellen und einfügen
ChatbotOverlay.show(context);
// Overlay entfernen
ChatbotOverlay.hide();
// Status prüfen
bool isVisible = ChatbotOverlay.isVisible;
NLP-Pipeline¶
- Normalisierung: Sonderzeichen entfernen, Lowercase, Stopwords filtern
- Intent-Extraktion: Pattern-Matching gegen Intent-Dictionary
- Entity-Extraktion: Pattern-Matching gegen Entity-Dictionary
- Intent+Entity Matching: Direktes Mapping zu FAQ-Kategorien
- Keyword-Matching: Exakt → Partiell → Fuzzy
- Semantisches Scoring: Gewichtete Wort-Analyse mit TF-IDF-ähnlichem Ansatz
- Threshold: Dynamisch basierend auf Frage-Komplexität
Scoring-Gewichte¶
- Intent-Bonus: +10.0
- Entity-Bonus: +8.0
- Aktionswörter: 5.0 (erstellen, löschen, ändern)
- Entitätswörter: 3.5 (kunde, artikel, bestellung)
- Kontext-Wörter: 1.0 (wie, was, wo)
- Vollständiges Keyword-Match: × 1.5
- Position-Bonus (erstes Wort): × 1.2
- Längen-Normalisierung: score / (1 + length * 0.1)
🔮 Zukünftige Erweiterungen¶
- [ ] OpenAI GPT-Integration für natürlichere Antworten
- [ ] Chat-Historie speichern in localStorage/Firestore
- [ ] Mehr FAQ-Einträge basierend auf User-Feedback
- [ ] Sprach-Eingabe (Speech-to-Text)
- [ ] Direkte Aktionen (z.B. "Erstelle einen Kunden" öffnet Dialog)
- [ ] Kontext-bewusste Antworten (weiß wo User gerade ist)
- [ ] Statistiken: Häufigste Fragen tracken
- [ ] Multi-Language Support (EN, DE, etc.)
- [ ] Code-Highlighting für technische Antworten
- [ ] Link-Parsing (klickbare Links in Antworten)
- [ ] Feedback-System (👍👎 für Antworten)
🎉 Erfolg!¶
Der Chatbot ist production-ready und 5x intelligenter als ursprünglich geplant! - ✅ Nicht-blockierendes Overlay - ✅ Minimier-Funktion - ✅ Super-intelligente NLP-Engine - ✅ Tippfehler-Toleranz - ✅ Synonym-Expansion - ✅ 20+ FAQ-Einträge - ✅ Sofort einsatzbereit
SAM KI - Typing-Effekt und Tutorial-Integration¶
Übersicht¶
Dieses Dokument beschreibt die Implementierung des Typing-Effekts für SAM KI Bot-Antworten und die Integration in das Tutorial-System.
Änderungen¶
1. Tutorial-Key hinzugefügt (lib/helper/tutorial_keys.dart)¶
Zeile 56: Neuer GlobalKey für SAM KI Button
Dieser Key ermöglicht es dem Tutorial-System, den SAM KI Button zu highlighten und als Tutorial-Step zu verwenden.
2. Key zum SAM KI Button hinzugefügt (lib/pages/application/widgets/app_nav_bar.dart)¶
Zeile ~189: Key-Attribut zum _NavBarActionButton hinzugefügt
_NavBarActionButton(
key: TutorialKeys.samKiButtonKey, // NEU!
icon: CupertinoIcons.sparkles,
label: "SAM KI",
isExpanded: isExpanded,
iconColor: Colors.deepPurple,
onTap: () {
ChatbotOverlay.show(context);
},
),
3. Tutorial-Step für SAM KI erstellt (lib/services/tutorial_service.dart)¶
Zeile 258-268: Neuer Tutorial-Step vor den Einstellungen
// 21. SAM KI Button
TutorialStepModel(
id: 'sam_ki_button',
title: 'SAM KI - Dein Assistent',
description:
'SAM KI ist dein intelligenter Assistent!\n\n'
'Stelle Fragen zu Kunden, Artikeln, Bestellungen oder wie das System funktioniert. '
'SAM hilft dir weiter!',
lottieAsset: 'assets/lottie_animations/tutorial_helper.json',
targetType: TutorialTargetType.navbar,
targetId: 'samKiButton',
waitForUserClick: false,
),
Position: Step 21 (zwischen Push Notifications und Einstellungen)
Nummerierung: Alle nachfolgenden Steps wurden automatisch umnummeriert: - Einstellungen Button: 21 → 22 - Einstellungen - Benutzer: 22 → 23 - Einstellungen - Kundenkategorien: 23 → 24 - ... usw.
4. ChatMessage-Modell erweitert (lib/services/chatbot_service.dart)¶
Zeile 1570-1581: isTyping Flag hinzugefügt
class ChatMessage {
final String text;
final bool isUser;
final DateTime timestamp;
final bool isTyping; // NEU!
ChatMessage({
required this.text,
required this.isUser,
DateTime? timestamp,
this.isTyping = false, // Standard: false (kein Typing-Effekt)
}) : timestamp = timestamp ?? DateTime.now();
}
Dieses Flag steuert, ob eine Bot-Nachricht mit Typing-Effekt angezeigt werden soll.
5. Typing-Effekt implementiert (lib/pages/widgets/dialogs/chatbot_dialog.dart)¶
5.1 Bot-Nachrichten mit Typing-Flag markieren¶
Zeile 70: isTyping: true beim Erstellen von Bot-Nachrichten
void _addBotMessage(String text) {
setState(() {
_messages.add(ChatMessage(text: text, isUser: false, isTyping: true));
});
_scrollToBottom();
}
5.2 Conditional Rendering im Message Widget¶
Zeile 398-421: Typewriter-Widget für Bot-Nachrichten verwenden
child: message.isUser
? Text(
message.text,
style: TextStyle(
color: Colors.white,
fontSize: 14,
height: 1.4,
),
)
: (message.isTyping
? _TypewriterText( // Typing-Effekt für Bot
text: message.text,
style: const TextStyle(
color: Colors.black87,
fontSize: 14,
height: 1.4,
),
)
: Text( // Fallback ohne Effekt
message.text,
style: const TextStyle(
color: Colors.black87,
fontSize: 14,
height: 1.4,
),
)),
5.3 TypewriterText Widget¶
Zeile 443-486: Neues StatefulWidget für Character-by-Character Animation
class _TypewriterText extends StatefulWidget {
final String text;
final TextStyle? style;
final Duration typingSpeed;
const _TypewriterText({
required this.text,
this.style,
this.typingSpeed = const Duration(milliseconds: 30), // 30ms pro Zeichen
});
@override
State<_TypewriterText> createState() => _TypewriterTextState();
}
class _TypewriterTextState extends State<_TypewriterText> {
String _displayedText = '';
int _currentIndex = 0;
@override
void initState() {
super.initState();
_startTyping();
}
void _startTyping() {
if (_currentIndex < widget.text.length) {
Future.delayed(widget.typingSpeed, () {
if (mounted) {
setState(() {
_currentIndex++;
_displayedText = widget.text.substring(0, _currentIndex);
});
_startTyping();
}
});
}
}
@override
Widget build(BuildContext context) {
return Text(
_displayedText,
style: widget.style,
);
}
}
Funktionsweise:
1. Widget startet mit leerem Text (_displayedText = '')
2. Alle 30 Millisekunden wird ein Zeichen hinzugefügt
3. Prozess läuft bis gesamter Text angezeigt ist
4. mounted-Check verhindert Fehler bei Widget-Disposal
Technische Details¶
Typing-Geschwindigkeit¶
- Standard: 30 Millisekunden pro Zeichen
- Anpassbar: Der
typingSpeedParameter kann optional überschrieben werden - Beispielrechnung:
- 100 Zeichen = 3 Sekunden (100 × 30ms)
- 200 Zeichen = 6 Sekunden (200 × 30ms)
- Durchschnittliche FAQ-Antwort (~300 Zeichen) = ~9 Sekunden
Performance-Überlegungen¶
- Mounted-Check: Verhindert Memory Leaks wenn Widget während Animation disposed wird
- Future.delayed: Verwendet Flutter's Event Loop, nicht blocking
- setState()-Granularität: Ein Update pro Zeichen, aber asynchron
- Keine Animationen: Keine AnimationController oder Tween nötig → einfacher Code
Tutorial-Integration¶
- targetId:
'samKiButton'matched mitTutorialKeys.samKiButtonKey - targetType:
TutorialTargetType.navbarfür NavBar-Elemente - waitForUserClick:
false→ Tutorial geht automatisch weiter (User muss nicht klicken) - lottieAsset: Standard Tutorial-Helper Animation
Testing¶
Manuelle Tests¶
- Typing-Effekt testen:
- SAM KI öffnen (Sparkles-Button in Navbar)
- Frage stellen (z.B. "Wie erstelle ich einen Kunden?")
- Beobachten: Bot-Antwort erscheint Character-by-Character
-
Geschwindigkeit: ~30ms pro Zeichen
-
Tutorial-Integration testen:
- Tutorial starten (Profil → Tutorial neu starten)
- Durchklicken bis Step 21 ("SAM KI - Dein Assistent")
- Verifizieren: SAM KI Button wird gehighlightet
-
Verifizieren: Beschreibung erklärt Funktion korrekt
-
Edge Cases:
- Multiple Nachrichten schnell hintereinander
- Chatbot minimieren während Typing-Effekt läuft
- Chatbot schließen während Typing-Effekt läuft
User Experience¶
Vorteile des Typing-Effekts¶
✅ Natürlicher Dialog: Wirkt wie echte Konversation
✅ Visuelle Bestätigung: User sieht dass Bot "denkt"
✅ Professionell: Moderne Chat-UX (wie ChatGPT, Claude)
✅ Tutorial-Konsistenz: Gleicher Effekt wie Tutorial-System
Tutorial-Benefits¶
✅ Auffindbarkeit: User lernt SAM KI früh kennen
✅ Guidance: Erklärt Zweck und Möglichkeiten
✅ Onboarding: Teil des Standard-Workflows
Zukünftige Erweiterungen (Optional)¶
Typing-Effekt Optionen¶
- [ ] Geschwindigkeit konfigurierbar machen (Settings)
- [ ] "Überspringen"-Button während Typing
- [ ] Wort-basiert statt Character-basiert (schneller, aber weniger smooth)
- [ ] Typing-Sound (optional, toggle in Settings)
Tutorial-Erweiterungen¶
- [ ] Tutorial-Übersetzungen (EN, FR, etc.)
- [ ] SAM KI Demo im Tutorial (automatische Beispiel-Frage)
- [ ] Screenshots/GIFs für Dokumentation
- [ ] Video-Tutorial für SAM KI
Changelog¶
Version 1.0 (aktuell) - ✅ Typing-Effekt implementiert (30ms/char) - ✅ Tutorial-Step für SAM KI hinzugefügt - ✅ TutorialKey registriert - ✅ ChatMessage-Modell erweitert - ✅ TypewriterText Widget erstellt
Support & Fragen¶
Bei Fragen oder Problemen:
1. Prüfen: get_errors Tool für Compile-Fehler
2. Debug: Console-Output für Animation-Lifecycle
3. Verifizieren: TutorialKeys.samKiButtonKey ist registriert
4. Testen: Typing-Effekt läuft smooth ohne Ruckeln
Zusammenfassung¶
4 Dateien geändert:
1. tutorial_keys.dart → samKiButtonKey hinzugefügt
2. app_nav_bar.dart → key-Attribut zum Button
3. tutorial_service.dart → Tutorial-Step 21 erstellt
4. chatbot_service.dart → ChatMessage.isTyping Flag
5. chatbot_dialog.dart → TypewriterText Widget + Integration
Alle Änderungen kompilieren fehlerfrei ✅
Tutorial-Flow: Push Notifications (20) → SAM KI (21) → Einstellungen (22) → ...
User Experience: Bot-Antworten erscheinen jetzt progressiv wie im Tutorial! 🎉
Tutorial System Dokumentation¶
Überblick¶
Das erweiterte Tutorial-System für EasySale führt neue Benutzer durch alle wichtigen Bereiche der Anwendung. Es ist modular aufgebaut, einfach erweiterbar und bietet eine hervorragende Benutzererfahrung.
Architektur¶
1. Modularisierte Struktur¶
lib/
├── models/tutorial/
│ └── tutorial_step_model.dart # Model für Tutorial-Steps
├── services/
│ └── tutorial_service.dart # Zentrale Tutorial-Konfiguration
├── helper/
│ └── tutorial_keys.dart # Verwaltung aller GlobalKeys
├── blocs/tutorial_bloc/
│ ├── tutorials_bloc.dart # BLoC für Tutorial-State
│ ├── tutorial_events.dart # Tutorial-Events
│ └── tutorial_states.dart # Tutorial-States
└── pages/tutorial/
├── tutorial_overlay_highlight.dart # Overlay mit Sprechblasen
├── tutorial_control_box.dart # Kompakte Control-Box (rechts oben)
└── tutorial_description_dialog.dart # Intro-Dialog (nur beim Start)
2. Komponenten¶
TutorialStepModel¶
Definiert einen einzelnen Tutorial-Schritt mit:
- id: Eindeutige Kennung
- title: Titel des Schritts
- description: Beschreibung/Erklärung
- lottieAsset: Pfad zur Lottie-Animation
- targetType: Art des Zielelements (navbar, button, page, etc.)
- targetId: ID des Zielelements
- targetKey: GlobalKey für Highlight
- pauseDuration: Optionale Pause vor dem Schritt
- action: Optionale Aktion (z.B. Navigation)
TutorialService¶
Zentrale Verwaltung aller Tutorial-Steps:
- getTutorialSteps(): Gibt alle konfigurierten Steps zurück
- getStepById(id): Holt einen spezifischen Step
- getTotalSteps(): Anzahl aller Steps
- requiresNavigation(step): Prüft ob Navigation benötigt wird
TutorialKeys¶
Zentrale Verwaltung aller GlobalKeys:
- Statische Keys für Hauptkomponenten (navBar, settings, profile, etc.)
- Dynamische Key-Registry für flexible Erweiterung
- register(id, key): Key registrieren
- get(id): Key abrufen
- has(id): Key-Existenz prüfen
TutorialsBloc¶
State Management für das Tutorial: - Verwaltet Tutorial-Fortschritt - Lädt Steps vom TutorialService - Mapped GlobalKeys zu Steps - Handelt Events (StartTutorial, NextStep, PrevStep, EndTutorial)
Tutorial-Steps¶
Das Tutorial führt durch folgende Bereiche:
- Willkommen - Einführung mit SAM (Tutorial-Helfer)
- Navigation - Zeigt die Hauptnavigationsleiste
- Dashboard - Übersicht über Statistiken
- Kunden-Navigation - Navigation zum Kundenbereich
- Kunden-Header - Suchfunktion und "Kunde hinzufügen"
- Kundenliste - Anzeige aller Kunden
- Artikel-Navigation - Navigation zum Artikelbereich
- Artikel-Header - Artikelverwaltung
- Artikelliste - Übersicht aller Artikel
- Bestellungen-Navigation - Navigation zu Bestellungen
- Bestellungen-Header - Bestellungsverwaltung
- Bestellungsliste - Übersicht aller Bestellungen
- Einstellungen - System-Einstellungen
- Profil - Benutzerprofil
- Abschluss - Tutorial erfolgreich abgeschlossen
Features¶
✅ Automatische Navigation¶
- Das Tutorial navigiert automatisch zum richtigen Bereich
- Bei Artikel-Steps wird automatisch zur Artikel-Seite navigiert
- Bei Kunden-Steps wird automatisch zur Kunden-Seite navigiert
- Bei Bestellungs-Steps wird automatisch zur Bestellungs-Seite navigiert
- Zurück-Navigation funktioniert genauso
✅ Fortschrittsanzeige¶
- Progress Bar zeigt Fortschritt im Tutorial
- Step-Counter (z.B. "5 / 15")
- Kompakte Control-Box rechts oben
- Visuelles Feedback
✅ Intelligente Sprechblasen-UI¶
- Lottie-Animation erscheint direkt beim fokussierten Element
- Sprechblase mit Erklärungstext neben der Animation
- Automatische Positionierung (oben/unten, je nach Platzangebot)
- Kompakte Control-Box rechts oben (nur Buttons + Progress)
- Dezenter, heller Hintergrund-Overlay (30% statt 75%)
✅ Dezente Highlights¶
- Dezenter Gold-Rahmen (2px, 60% Opacity)
- Subtiler Glow-Effekt
- Hintergrund nur leicht abgedunkelt (man sieht alles darunter!)
- Transparenter, nicht aufdringlicher Style
✅ Navigation¶
- Zurück-Button (ab Step 2)
- Weiter-Button
- Überspringen-Button
- "Fertig" beim letzten Step
✅ Flexible Anpassung¶
- Lottie-Animationen pro Step
- Titel und Beschreibung pro Step
- Optionale Pausen zwischen Steps
- Target-Types für verschiedene UI-Elemente
Integration¶
Neue Pages zum Tutorial hinzufügen¶
-
GlobalKey erstellen in
tutorial_keys.dart: -
Key zur Page hinzufügen:
-
Step in TutorialService hinzufügen:
-
Key-Mapping in TutorialsBloc:
UI-Elemente highlighten¶
Für Buttons, Headers, Listen etc.:
Dann im TutorialService:
TutorialStepModel(
id: 'myButton',
title: 'Wichtiger Button',
description: 'Hier kannst du...',
lottieAsset: 'assets/lottie_animations/tutorial_helper.json',
targetType: TutorialTargetType.button,
targetId: 'myButtonKey',
),
Verwendung¶
Tutorial starten¶
Tutorial beenden¶
Nächster Step¶
Vorheriger Step¶
Customization¶
Lottie-Animationen¶
Verfügbare Animationen:
- tutorial_helper.json - SAM, der Tutorial-Helfer
- success.json - Erfolg/Bestätigung
- progress.json - Fortschritt/Laden
- warning.json - Warnung/Achtung
Neue Animationen können unter assets/lottie_animations/ hinzugefügt werden.
Styling¶
Das Tutorial verwendet ein dezentes, modernes Design:
Highlight:
- Rahmen: Gold (#FFD700, 60% Opacity) - 2px dünn
- Glow: Subtiler Gold-Schatten (30% Opacity, 10px Blur)
- Puls-Animation: 1.0 bis 1.03 Scale (sehr dezent)
Overlay:
- Hintergrund: Colors.black.withOpacity(0.3) - sehr hell!
- Man sieht den Content darunter deutlich
- Nicht aufdringlich
Sprechblase: - Weiß mit Schatten - Lottie-Animation (80x80px) links - Text rechts daneben - Automatische Positionierung über/unter dem Element
Control-Box: - Rechts oben fixiert - Kompakt (280px breit) - Nur Progress Bar + Buttons - Weiß mit dezenter Shadow
Die Farben wurden gewählt, weil sie: - ✅ Dezent und modern wirken - ✅ Content nicht verdecken - ✅ Professionell aussehen - ✅ Auf allen Hintergründen funktionieren
Anpassungen in:
- tutorial_overlay_highlight.dart - Overlay + Sprechblasen (Zeile 1-280)
- tutorial_control_box.dart - Kompakte Control-Box
Best Practices¶
- Kurze Beschreibungen: Maximal 2-3 Sätze pro Step
- Logische Reihenfolge: Tutorial folgt dem natürlichen Workflow
- Wichtige Features zuerst: Kernfunktionen haben Priorität
- Visuelle Konsistenz: Gleiche Lottie-Animationen für ähnliche Konzepte
- Testing: Jeder neue Step sollte getestet werden
Troubleshooting¶
Highlight wird nicht angezeigt¶
- Prüfen ob GlobalKey korrekt zugewiesen ist
- Prüfen ob Key in TutorialsBloc gemappt ist
- Sicherstellen dass Widget bereits gerendert ist
Tutorial startet nicht¶
- Prüfen ob
hasSeenTutorialkorrekt gesetzt ist - BLoC State überprüfen
- Console-Logs für Fehler prüfen
Step wird übersprungen¶
pauseDurationhinzufügen wenn Navigation benötigt wird- Sicherstellen dass Target-Widget existiert
Zukünftige Erweiterungen¶
- [ ] Tutorial-Kategorien (Basis, Erweitert, Admin)
- [ ] Tutorial wiederholen für spezifische Bereiche
- [ ] Video-Tutorials integrieren
- [ ] Multi-Language Support für Tutorial-Texte
- [ ] Tutorial-Statistiken (welche Steps werden übersprungen?)
- [ ] Adaptive Tutorials basierend auf Benutzerrolle
- [ ] Interactive Tutorials (User muss Aktionen ausführen)
Autoren¶
Entwickelt für EasySale ERP System Version: 2.0
SAM KI Chatbot - Implementierung¶
✅ Erfolgreich implementiert¶
📁 Neue Dateien:¶
lib/services/chatbot_service.dart- FAQ-basierter Service mit 20+ Fragen & Antworten
- Kategorien: Kunden, Artikel, Bestellungen, Zuweisung, Einstellungen, Allgemein
- Pattern-Matching für Keyword-Suche
-
Schnellvorschläge
-
lib/pages/widgets/dialogs/chatbot_dialog.dart - Verschiebbarer Dialog (Drag & Drop)
- Chat-Interface mit User/Bot-Nachrichten
- Scrollbare Chat-Historie
- Eingabefeld mit Enter-Support
- Schnellvorschläge als Chips
🔧 Geänderte Dateien:¶
lib/pages/application/widgets/app_nav_bar.dart- Neuer "SAM KI" Button in der Navbar (oben bei den Action-Buttons)
- Icon: Sparkles ✨ (CupertinoIcons.sparkles)
- Farbe: Deep Purple
- Öffnet verschiebbaren Dialog
📋 FAQ-Kategorien & Fragen¶
🙋 Kunden (5 Fragen)¶
- Wie erstelle ich einen neuen Kunden?
- Wie lösche ich einen Kunden?
- Was sind Kundenkategorien?
📦 Artikel (3 Fragen)¶
- Wie erstelle ich einen neuen Artikel?
- Wie lade ich Artikelbilder hoch?
- Wie lösche ich einen Artikel?
🔗 Artikelzuweisung (3 Fragen)¶
- Wie funktioniert die automatische Artikelzuweisung?
- Wie weise ich Artikel manuell zu Kunden zu?
- Was ist der Unterschied zwischen automatischer und manueller Zuweisung?
📝 Bestellungen (3 Fragen)¶
- Wie lege ich eine neue Bestellung an?
- Wie ändere ich den Status einer Bestellung?
- Wie kann ich Bestellungen filtern?
⚙️ Einstellungen (3 Fragen)¶
- Wo finde ich die Einstellungen?
- Wie erstelle ich einen neuen Benutzer?
- Was sind FeatureFlags?
💡 Allgemein (3 Fragen)¶
- Was ist EasySale ERP?
- Wie funktioniert die Suche?
- Kann ich Daten exportieren?
🎨 Features¶
✅ Verschiebbarer Dialog - Drag & Drop an beliebige Position - Bleibt innerhalb des Bildschirms - Hintergrund nicht blockiert (transparent barrier)
✅ Intelligente Suche - Keyword-basiertes Matching - Fallback-Antwort wenn nichts gefunden - Case-insensitive
✅ User Experience - Willkommensnachricht beim Öffnen - Schnellvorschläge für häufige Fragen - Chat-Bubble Design (User rechts, Bot links) - Icons: User-Icon & Sparkles-Icon - Auto-Scroll zu neuen Nachrichten
✅ Erweiterbar - Einfach neue FAQ-Einträge hinzufügen - Kategorien-System vorhanden - Später einfach mit OpenAI/GPT erweiterbar
🚀 Verwendung¶
- Button in Navbar finden
- Linke Sidebar → ganz unten
-
"SAM KI" Button mit ✨ Icon
-
Dialog öffnen
- Klick auf Button öffnet verschiebbaren Dialog
-
Dialog kann per Drag bewegt werden
-
Fragen stellen
- Frage ins Eingabefeld tippen
- Enter drücken oder Send-Button klicken
-
Bot antwortet nach kurzer Verzögerung (500ms)
-
Schnellvorschläge nutzen
- Beim ersten Öffnen erscheinen Vorschläge als Chips
- Klick auf Chip fügt Frage ein und sendet sie
🔮 Zukünftige Erweiterungen¶
- [ ] OpenAI GPT-Integration für natürlichere Antworten
- [ ] Chat-Historie speichern in localStorage
- [ ] Mehr FAQ-Einträge basierend auf User-Feedback
- [ ] Sprach-Eingabe (Speech-to-Text)
- [ ] Direkte Aktionen (z.B. "Erstelle einen Kunden" öffnet Dialog)
- [ ] Kontext-bewusste Antworten (weiß wo User gerade ist)
- [ ] Statistiken: Häufigste Fragen tracken