fix: implement speaker/earpiece toggle on voice call page

Use Hardware.instance.setSpeakerphoneOn() to switch between speaker
and earpiece modes. Default to speaker on.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
hailin 2026-02-28 11:11:29 -08:00
parent 23b5bce983
commit 46a2d06be3
1 changed files with 13 additions and 7 deletions

View File

@ -37,8 +37,9 @@ class _AgentCallPageState extends ConsumerState<AgentCallPage>
final List<double> _waveHeights = List.generate(20, (_) => 0.3); final List<double> _waveHeights = List.generate(20, (_) => 0.3);
Timer? _waveTimer; Timer? _waveTimer;
// Mute state // Mute & speaker state
bool _isMuted = false; bool _isMuted = false;
bool _isSpeaker = true;
// Prevent double-actions // Prevent double-actions
bool _userEndedCall = false; bool _userEndedCall = false;
@ -193,6 +194,13 @@ class _AgentCallPageState extends ConsumerState<AgentCallPage>
setState(() {}); setState(() {});
} }
/// Toggle speaker / earpiece.
void _toggleSpeaker() {
_isSpeaker = !_isSpeaker;
Hardware.instance.setSpeakerphoneOn(_isSpeaker);
setState(() {});
}
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// Build // Build
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
@ -429,12 +437,10 @@ class _AgentCallPageState extends ConsumerState<AgentCallPage>
), ),
const SizedBox(width: 24), const SizedBox(width: 24),
_CircleButton( _CircleButton(
icon: Icons.volume_up, icon: _isSpeaker ? Icons.volume_up : Icons.hearing,
label: '扬声器', label: _isSpeaker ? '扬声器' : '听筒',
isActive: false, isActive: _isSpeaker,
onTap: () { onTap: _toggleSpeaker,
// WebRTC handles audio routing automatically
},
), ),
], ],
); );