fix: resolve DarwinAudioError on iOS using temporary .mp3 extension and upgrade mock Voice Note base64 to valid silent MP3
This commit is contained in:
@@ -257,12 +257,12 @@ class ChatScreen extends StatelessWidget {
|
|||||||
label: 'Voice Note',
|
label: 'Voice Note',
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Get.back();
|
Get.back();
|
||||||
// Real WhatsApp voice note Ogg/Opus snippet base64
|
// 100% valid MP3 silent audio base64 snippet to prevent getAudioDuration errors
|
||||||
const base64Audio = 'T2dnUwACAAAAAAAAAABkAAAAAAAAADI5MFABE09wdXNIZWFkAQE4AYA+AAAAAABPZ2dTAAAAAAAAAAAAAGQAAAABAAAAWxHrFgEYT3B1c1RhZ3MIAAAAV2hhdHNBcHAAAAAAT2dnUwAAuFIBAAAAAABkAAAAAgAAAMW1RVAcs/8S/xf/C/8W/1X/K/9E/xn/HNH/Dv8P/z3/PEuGBwgTMC0L5ME27MWAB8lyJ+FE6lCAAoCJwmN8nmEoWpnN+vTMmxKRivTjVzyKgC8kq+xU2t9BmYsnP6PiOVb9FSBIclbkE+UQqmpijsWqPKSgqfrb/axQjKz+XqwPUt2yyxIoWNB7gp/NUv8QB8AEzwy9Jb9ZFBPoQ8UljPRzhbjRp8YCjZxOxxP5eLIUrPxlftPv1tu98HUPVsf7zjtZczAbrMtZ7S8RP/BBveWrUZRAS4YvLiwpK45K82R2giPnAouP77D0aXkd3aEek/leJE7lRwH4oHyI0kPXsUbT9kNKi6g7c3SAjqK2HFw8qYXpIaL';
|
const base64Audio = 'SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4Ljc2LjEwMAAAAAAAAAAAAAAA/+M4wAAAAAAAAAAAAEluZm8AAAAPAAAAAwAAAbAAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV////////////////////////////////////////////AAAAAExhdmM1OC4xMwAAAAAAAAAAAAAAACQDkAAAAAAAAAGw9wrNaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+MYxAAAAANIAAAAAExBTUUzLjEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV/+MYxDsAAANIAAAAAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV/+MYxHYAAANIAAAAAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV';
|
||||||
ctrl.sendMediaMessage(
|
ctrl.sendMediaMessage(
|
||||||
base64Audio,
|
base64Audio,
|
||||||
'audio/ogg',
|
'audio/mp3',
|
||||||
'voice_note.ogg',
|
'voice_note.mp3',
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
import 'dart:io';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:intl/intl.dart';
|
import 'package:intl/intl.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
@@ -210,7 +211,16 @@ class _InteractiveMediaWidgetState extends State<InteractiveMediaWidget> {
|
|||||||
await _player.pause();
|
await _player.pause();
|
||||||
} else {
|
} else {
|
||||||
final bytes = base64Decode(base64Data);
|
final bytes = base64Decode(base64Data);
|
||||||
await _player.play(BytesSource(bytes));
|
// Clean special characters from ID to construct a safe filename
|
||||||
|
final safeId = widget.message.id.replaceAll(RegExp(r'[^a-zA-Z0-9]'), '');
|
||||||
|
final tempDir = Directory.systemTemp;
|
||||||
|
final tempFile = File('${tempDir.path}/voice_$safeId.mp3');
|
||||||
|
|
||||||
|
if (!await tempFile.exists()) {
|
||||||
|
await tempFile.writeAsBytes(bytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
await _player.play(DeviceFileSource(tempFile.path));
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
print('[AUDIO PLAYBACK ERROR] $e');
|
print('[AUDIO PLAYBACK ERROR] $e');
|
||||||
|
|||||||
Reference in New Issue
Block a user