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