scobro_foundation_flutter_voice 0.0.1
scobro_foundation_flutter_voice: ^0.0.1 copied to clipboard
Widgets for voice input and output
ScoBro Foundation Flutter Voice #
A Flutter package providing voice input widgets with speech-to-text functionality. This package offers a seamless voice input experience across mobile and web platforms with a push-to-talk interface.
Features #
- Cross-platform voice input: Works on both mobile and web platforms
- Push-to-talk interface: Hold to speak, release to send
- Seamless text/voice switching: Users can type or use voice input interchangeably
- Real-time transcription: See your speech converted to text as you speak
- Web-optimized: Special handling for web platforms including context menu management
- Customizable UI: Configurable hint text, button text, and styling
- Auto-submission: Voice input automatically submits when you stop speaking
- Error handling: Graceful handling of speech recognition errors and unavailability
Platform Support #
- ✅ Android: Full speech-to-text support
- ✅ iOS: Full speech-to-text support
- ✅ Web: Enhanced with mouse interaction and context menu management
- ✅ Desktop: Basic functionality (platform dependent on speech recognition availability)
Getting Started #
Prerequisites #
- Flutter SDK 1.17.0 or higher
- Dart SDK 3.6.1 or higher
Installation #
Add this package to your pubspec.yaml:
dependencies:
scobro_foundation_flutter_voice: ^0.0.1
Permissions #
For mobile platforms, you'll need to add microphone permissions:
Android (android/app/src/main/AndroidManifest.xml):
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />
iOS (ios/Runner/Info.plist):
<key>NSMicrophoneUsageDescription</key>
<string>This app needs access to microphone for voice input</string>
<key>NSSpeechRecognitionUsageDescription</key>
<string>This app needs access to speech recognition for voice input</string>
Usage #
Basic Implementation #
import 'package:flutter/material.dart';
import 'package:scobro_foundation_flutter_voice/widgets/voice_or_type_input.dart';
class ChatScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Voice Chat')),
body: Column(
children: [
Expanded(
child: Container(), // Your chat messages here
),
VoiceOrTypeInput(
onMessageSubmitted: (String message) {
// Handle the submitted message
print('Message: $message');
},
),
],
),
);
}
}
Advanced Configuration #
VoiceOrTypeInput(
hintText: 'Ask me anything...',
submitButtonText: 'Send',
enabled: true,
maxLines: 3,
controller: myTextController, // Optional: provide your own controller
onMessageSubmitted: (String message) {
// Process the message
handleUserMessage(message);
},
)
With Custom Controller #
class MyWidget extends StatefulWidget {
@override
_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
final TextEditingController _controller = TextEditingController();
@override
Widget build(BuildContext context) {
return VoiceOrTypeInput(
controller: _controller,
hintText: 'Type or speak your message...',
onMessageSubmitted: (message) {
// Handle message
print('Received: $message');
// Controller is automatically cleared after submission
},
);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
}
Widget Properties #
| Property | Type | Default | Description |
|---|---|---|---|
onMessageSubmitted |
Function(String) |
Required | Callback when message is submitted |
hintText |
String |
'Type a message or tap the mic...' |
Placeholder text for input field |
controller |
TextEditingController? |
null |
Optional text controller |
enabled |
bool |
true |
Whether the widget is enabled |
maxLines |
int? |
1 |
Maximum lines for text input |
submitButtonText |
String |
'Send' |
Text for submit button |
How It Works #
- Text Mode: Users can type normally in the text field
- Voice Mode: Hold the microphone button to start speech recognition
- Real-time Transcription: Speech is converted to text and shown in the input field
- Auto-submit: When you release the microphone button, the message is automatically submitted
- Fallback: If voice recognition is unavailable, the widget gracefully falls back to text-only mode
Platform-Specific Features #
Web Platform #
- Uses
Listenerwidget for precise mouse interaction control - Automatically manages context menus during voice input
- Enhanced visual feedback for press-and-hold interaction
Mobile Platforms #
- Uses
GestureDetectorfor touch-optimized interaction - Native speech recognition integration
- Haptic feedback support
Error Handling #
The widget handles various error scenarios:
- Speech recognition unavailable
- Microphone permission denied
- Network connectivity issues
- Platform-specific speech recognition errors
When errors occur, the widget will:
- Show appropriate visual feedback
- Log errors for debugging
- Gracefully fall back to text input mode
Contributing #
This package is part of the ScoBro Foundation Flutter ecosystem. For contributions, issues, or feature requests, please visit our GitHub repository.
License #
This project is licensed under the MIT License - see the LICENSE file for details.