Commit Graph

16 Commits

Author SHA1 Message Date
Max ac234d99ec Fix RecordingButton shape: Both states should be circular
Correction based on user feedback:
- Both idle and recording states use circular shape (BoxShape.circle)
- Remove conditional rectangle shape logic
- Keep color differentiation: blue for idle, red for recording
- Maintain consistent circular InkWell ripple effect

Design now correctly matches the mockup:
🔵 Blue circle (idle/ready to record)
🔴 Red circle (actively recording)

Both buttons maintain the same circular shape with only color changes.
2025-09-09 14:23:47 +08:00
Max 3e8fe73e27 Update RecordingButton design to match UI mockup
Design improvements based on provided mockup:

1. Color Updates:
   - Idle state: Blue (#2196F3) - matches mockup's blue recording button
   - Recording state: Red (#FF5252) - matches mockup's red stop button
   - Disabled state: Light grey (#9E9E9E) for better visibility
   - Processing state: Semi-transparent versions of respective colors

2. Shape Changes:
   - Idle state: Circle (for recording button)
   - Recording state: Rounded rectangle (12px radius) for stop button
   - Smooth transitions between shapes using BoxShape

3. Icon Improvements:
   - Use rounded icons (mic_rounded, stop_rounded) for modern look
   - Adjust icon sizes: recording (40% of button), stop (35% of button)
   - Better proportions matching the design intent

4. Shadow Enhancements:
   - Increased blur radius for idle state (8→12px) for better depth
   - Dynamic shadow based on button state
   - Enhanced spread radius for better visual impact

5. Interactive Elements:
   - InkWell borderRadius adapts to button shape
   - Smooth transitions between circular and rectangular ripple effects

These changes create a modern, professional appearance that matches
common design patterns and provides clear visual feedback for different states.
2025-09-09 14:20:10 +08:00
Max 6146508bed Enhance RecordingButton with haptic feedback and debounce
Major UX improvements to RecordingButton:

1. Haptic Feedback (震动效果):
   - Add HapticFeedback.lightImpact() on button tap
   - Import flutter/services.dart for haptic support
   - Provides tactile confirmation for user interactions

2. Debounce Mechanism (防抖):
   - Add _isProcessing flag to prevent rapid consecutive taps
   - 300ms cooldown period after each tap
   - Protects against accidental double-taps and ensures stable operation

3. Enhanced Visual States:
   - Processing state with semi-transparent color
   - Loading spinner during async operations
   - Better visual feedback for different button states

4. Improved Animations:
   - Trigger scale animation on tap (not just on state change)
   - Smooth forward/reverse animation cycle
   - Better visual response to user interactions

5. Better Error Handling:
   - Proper mounted check before setState
   - Graceful cleanup with finally block
   - Prevents memory leaks and state corruption

These improvements provide:
- Better tactile feedback for users
- Prevention of UI race conditions
- Clearer visual indication of button states
- More responsive and professional user experience
2025-09-09 14:06:43 +08:00
Max 0af37c5b87 Remove final result logic from SDK library
Major SDK simplification by removing redundant final result processing:

1. YxAsrService changes:
   - Remove final result retrieval in stopListening()
   - Remove finalResult parameter from _sendResult()
   - Simplify stop logic to only reset stream state
   - Eliminate duplicate API calls that provided no additional value

2. SpeechRecognitionResult model changes:
   - Remove finalResult property and related logic
   - Update constructor, factory methods, toString, equals, hashCode
   - Remove finalResult from toMap/fromMap serialization
   - Simplify the model to focus on actual recognition data

3. Benefits:
   - Cleaner, more maintainable codebase
   - Reduced complexity and potential bugs
   - Better performance (no redundant API calls)
   - Simpler API for developers to use
   - Real-time text appending works seamlessly without artificial distinctions

The analysis showed that 'final results' were identical to the last real-time result,
making the distinction unnecessary. Now all results are treated uniformly as
real-time updates, providing a smoother and more intuitive user experience.
2025-09-09 11:29:19 +08:00
Max ed51fa89bd Implement real-time text appending to input field
1. Add _baseText variable to track text before recording starts
   - Preserves existing text when starting new recording session
   - Provides foundation for real-time appending

2. Update real-time result processing logic
   - Real-time results now immediately update the text field
   - Combine base text + current recognition text
   - Move cursor to end for better UX
   - Add intelligent spacing between segments

3. Improve final result handling
   - Final results update base text for next recording
   - Clean state management between recording sessions

4. Update recording status change logic
   - Capture base text when recording starts
   - Maintain proper state transitions

Now users can see their speech being converted to text in real-time directly in the input field, providing immediate visual feedback during speech recognition.
2025-09-09 11:24:53 +08:00
Max d1ab67e60e Fix real-time speech recognition display
1. Update UI to show actual _currentText instead of fixed 'realtime recognizing...' text
   - Use Flexible widget to handle text overflow
   - Show actual recognition text when available
   - Fallback to 'realtime recognizing...' when text is empty

2. Fix final result processing logic
   - Don't update _currentText when processing final results
   - Final results only append to text field, don't interfere with real-time display

3. Improve listening status management
   - Clear _currentText when recording stops
   - Ensure clean state transitions between recording sessions

This fixes the issue where users could only see final results without real-time feedback.
2025-09-09 11:22:37 +08:00
Max d63124203b Fix critical bugs in speech recognition system
1. Add finalResult property to SpeechRecognitionResult class
   - Distinguish between real-time and final recognition results
   - Update factory methods, toString, equals, and hashCode
   - Update toMap and fromMap methods

2. Update YxAsrService to support finalResult flag
   - Add finalResult parameter to _sendResult method
   - Mark final results with finalResult: true
   - Keep real-time results as finalResult: false (default)

3. Remove unused methods to clean up codebase
   - Remove unused _toggleRecording method
   - Remove unused _updateTextController method
   - Clean up orphaned comments

These fixes resolve linter errors and ensure proper text appending functionality.
2025-09-09 11:17:13 +08:00
Max ea32370fcc Improve text input behavior: append recognition results to text field
- Change from replacing current text to appending final results
- Distinguish between real-time results (display only) and final results (append to text)
- Add proper spacing between appended text segments
- Maintain history of individual recognition segments
- Clear current text when starting new recording session
2025-09-09 11:08:44 +08:00
Max 36fa796c10 Improve demo: use RecordingButton component instead of custom implementation
- Replace custom FloatingActionButton with RecordingButton widget
- Simplify code by using built-in speech recognition integration
- Demonstrate proper usage of RecordingButton component
- Reduce demo code complexity from 80+ lines to ~40 lines
- Better showcase the plugin's provided components
2025-09-09 11:04:27 +08:00
Max c47ad5c435 Fix Flutter assets configuration: explicitly specify all model files in pubspec.yaml 2025-09-06 17:36:54 +08:00
Max d18c3fc607 Switch back to zh2023 model to fix filename mismatch issue 2025-09-06 17:30:54 +08:00
Max 9053132874 Fix model loading: switch to zh2025 model as recommended by logs 2025-09-06 17:29:11 +08:00
Max 58056c6c09 Fix Kotlin null safety issue: add null check for context in isAvailable method 2025-09-06 17:26:24 +08:00
Max 80d99d6bdd Fix Android namespace issues: add namespace to build.gradle, update AGP and Kotlin versions 2025-09-06 17:25:05 +08:00
Max ae1ec191a8 Fix build issues: remove duplicate gradle files, increase heap size, fix plugin configuration 2025-09-06 17:23:14 +08:00
Max 5c9a8ea6e6 Initial commit: Flutter speech-to-text plugin with Sherpa-ONNX integration 2025-08-27 17:09:36 +08:00