From ece9164d93c601dbad29c4ab7b374d956c9453a5 Mon Sep 17 00:00:00 2001 From: Pierre HUBERT Date: Fri, 12 Mar 2021 21:19:40 +0100 Subject: [PATCH] Fix audio record --- lib/ui/dialogs/record_audio_dialog.dart | 22 ++++++++++++--------- lib/utils/permission_utils.dart | 26 +++++++++++++++++++++++++ pubspec.lock | 20 ++++++++++++++++--- pubspec.yaml | 5 ++++- 4 files changed, 60 insertions(+), 13 deletions(-) create mode 100644 lib/utils/permission_utils.dart diff --git a/lib/ui/dialogs/record_audio_dialog.dart b/lib/ui/dialogs/record_audio_dialog.dart index 2f4a114..0fa8c5e 100644 --- a/lib/ui/dialogs/record_audio_dialog.dart +++ b/lib/ui/dialogs/record_audio_dialog.dart @@ -4,11 +4,13 @@ import 'dart:typed_data'; import 'package:comunic/ui/dialogs/alert_dialog.dart'; import 'package:comunic/utils/intl_utils.dart'; import 'package:comunic/utils/log_utils.dart'; +import 'package:comunic/utils/permission_utils.dart'; import 'package:comunic/utils/ui_utils.dart'; import 'package:flutter/material.dart'; import 'package:path/path.dart' as path; import 'package:path_provider/path_provider.dart'; -import 'package:record/record.dart'; +import 'package:permission_handler/permission_handler.dart'; +import 'package:record_mp3/record_mp3.dart'; import 'package:video_player/video_player.dart'; /// Record audio dialog @@ -17,9 +19,9 @@ import 'package:video_player/video_player.dart'; /// Record audio Future showRecordAudioDialog(BuildContext context) async { - if (!await Record.hasPermission()) { - await alert( - context, "Permission d'accéder au périphérique audio refusée !"); + // Request record permission + if (!await requestPermission(context, Permission.microphone)) { + alert(context, tr("Did not get permission to access microphone!")); return null; } @@ -32,8 +34,6 @@ Future showRecordAudioDialog(BuildContext context) async { barrierDismissible: false, ); - if (await Record.isRecording()) await Record.stop(); - return res; } @@ -67,6 +67,7 @@ class __RecordAudioDialogState extends State<_RecordAudioDialog> { @override void dispose() { _disposePlayer(); + RecordMp3.instance.stop(); super.dispose(); } @@ -168,9 +169,12 @@ class __RecordAudioDialogState extends State<_RecordAudioDialog> { final dir = await getTemporaryDirectory(); - _recordPath = path.join(dir.absolute.path, "tmp-audio-record.m4a"); + _recordPath = path.join(dir.absolute.path, "tmp-audio-record.mp3"); - await Record.start(path: _recordPath); + RecordMp3.instance.start(_recordPath, (fail) { + print(fail); + snack(context, tr("Failed to start recording!")); + }); setState(() => _recording = true); } catch (e, s) { @@ -181,7 +185,7 @@ class __RecordAudioDialogState extends State<_RecordAudioDialog> { void _stopRecording() async { try { - await Record.stop(); + RecordMp3.instance.stop(); setState(() => _recording = false); } catch (e, s) { diff --git a/lib/utils/permission_utils.dart b/lib/utils/permission_utils.dart new file mode 100644 index 0000000..45b47ae --- /dev/null +++ b/lib/utils/permission_utils.dart @@ -0,0 +1,26 @@ +import 'package:comunic/utils/log_utils.dart'; +import 'package:flutter/material.dart'; +import 'package:permission_handler/permission_handler.dart'; + +/// Permission utilities +/// +/// @author Pierre Hubert + +/// Request a permission, if it has not been granted yet +Future requestPermission( + BuildContext context, Permission permission) async { + try { + if (await permission.isPermanentlyDenied) { + return false; + } + + if (await permission.isGranted) return true; + + if (await permission.request() != PermissionStatus.granted) return false; + + return true; + } catch (e, s) { + logError(e, s); + return false; + } +} diff --git a/pubspec.lock b/pubspec.lock index b2b510d..1cc7a64 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -415,6 +415,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.9.2" + permission_handler: + dependency: "direct main" + description: + name: permission_handler + url: "https://pub.dartlang.org" + source: hosted + version: "5.1.0+2" + permission_handler_platform_interface: + dependency: transitive + description: + name: permission_handler_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.2" petitparser: dependency: transitive description: @@ -464,13 +478,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.0" - record: + record_mp3: dependency: "direct main" description: - name: record + name: record_mp3 url: "https://pub.dartlang.org" source: hosted - version: "1.0.2" + version: "2.1.0" rxdart: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 387b168..350da50 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -113,7 +113,10 @@ dependencies: video_thumbnail: ^0.2.5+1 # Record audio file - record: ^1.0.2 + record_mp3: ^2.1.0 + + # Request permissions + permission_handler: ^5.1.0+2 dev_dependencies: flutter_test: