mirror of
				https://gitlab.com/comunic/comunicmobile
				synced 2025-11-04 04:04:18 +00:00 
			
		
		
		
	Fix audio record
This commit is contained in:
		@@ -4,11 +4,13 @@ import 'dart:typed_data';
 | 
				
			|||||||
import 'package:comunic/ui/dialogs/alert_dialog.dart';
 | 
					import 'package:comunic/ui/dialogs/alert_dialog.dart';
 | 
				
			||||||
import 'package:comunic/utils/intl_utils.dart';
 | 
					import 'package:comunic/utils/intl_utils.dart';
 | 
				
			||||||
import 'package:comunic/utils/log_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:comunic/utils/ui_utils.dart';
 | 
				
			||||||
import 'package:flutter/material.dart';
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
import 'package:path/path.dart' as path;
 | 
					import 'package:path/path.dart' as path;
 | 
				
			||||||
import 'package:path_provider/path_provider.dart';
 | 
					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';
 | 
					import 'package:video_player/video_player.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Record audio dialog
 | 
					/// Record audio dialog
 | 
				
			||||||
@@ -17,9 +19,9 @@ import 'package:video_player/video_player.dart';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/// Record audio
 | 
					/// Record audio
 | 
				
			||||||
Future<Uint8List> showRecordAudioDialog(BuildContext context) async {
 | 
					Future<Uint8List> showRecordAudioDialog(BuildContext context) async {
 | 
				
			||||||
  if (!await Record.hasPermission()) {
 | 
					  // Request record permission
 | 
				
			||||||
    await alert(
 | 
					  if (!await requestPermission(context, Permission.microphone)) {
 | 
				
			||||||
        context, "Permission d'accéder au périphérique audio refusée !");
 | 
					    alert(context, tr("Did not get permission to access microphone!"));
 | 
				
			||||||
    return null;
 | 
					    return null;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -32,8 +34,6 @@ Future<Uint8List> showRecordAudioDialog(BuildContext context) async {
 | 
				
			|||||||
    barrierDismissible: false,
 | 
					    barrierDismissible: false,
 | 
				
			||||||
  );
 | 
					  );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (await Record.isRecording()) await Record.stop();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  return res;
 | 
					  return res;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -67,6 +67,7 @@ class __RecordAudioDialogState extends State<_RecordAudioDialog> {
 | 
				
			|||||||
  @override
 | 
					  @override
 | 
				
			||||||
  void dispose() {
 | 
					  void dispose() {
 | 
				
			||||||
    _disposePlayer();
 | 
					    _disposePlayer();
 | 
				
			||||||
 | 
					    RecordMp3.instance.stop();
 | 
				
			||||||
    super.dispose();
 | 
					    super.dispose();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -168,9 +169,12 @@ class __RecordAudioDialogState extends State<_RecordAudioDialog> {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      final dir = await getTemporaryDirectory();
 | 
					      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);
 | 
					      setState(() => _recording = true);
 | 
				
			||||||
    } catch (e, s) {
 | 
					    } catch (e, s) {
 | 
				
			||||||
@@ -181,7 +185,7 @@ class __RecordAudioDialogState extends State<_RecordAudioDialog> {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  void _stopRecording() async {
 | 
					  void _stopRecording() async {
 | 
				
			||||||
    try {
 | 
					    try {
 | 
				
			||||||
      await Record.stop();
 | 
					      RecordMp3.instance.stop();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      setState(() => _recording = false);
 | 
					      setState(() => _recording = false);
 | 
				
			||||||
    } catch (e, s) {
 | 
					    } catch (e, s) {
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										26
									
								
								lib/utils/permission_utils.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								lib/utils/permission_utils.dart
									
									
									
									
									
										Normal file
									
								
							@@ -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<bool> 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;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										20
									
								
								pubspec.lock
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								pubspec.lock
									
									
									
									
									
								
							@@ -415,6 +415,20 @@ packages:
 | 
				
			|||||||
      url: "https://pub.dartlang.org"
 | 
					      url: "https://pub.dartlang.org"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "1.9.2"
 | 
					    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:
 | 
					  petitparser:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
@@ -464,13 +478,13 @@ packages:
 | 
				
			|||||||
      url: "https://pub.dartlang.org"
 | 
					      url: "https://pub.dartlang.org"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "2.1.0"
 | 
					    version: "2.1.0"
 | 
				
			||||||
  record:
 | 
					  record_mp3:
 | 
				
			||||||
    dependency: "direct main"
 | 
					    dependency: "direct main"
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
      name: record
 | 
					      name: record_mp3
 | 
				
			||||||
      url: "https://pub.dartlang.org"
 | 
					      url: "https://pub.dartlang.org"
 | 
				
			||||||
    source: hosted
 | 
					    source: hosted
 | 
				
			||||||
    version: "1.0.2"
 | 
					    version: "2.1.0"
 | 
				
			||||||
  rxdart:
 | 
					  rxdart:
 | 
				
			||||||
    dependency: transitive
 | 
					    dependency: transitive
 | 
				
			||||||
    description:
 | 
					    description:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -113,7 +113,10 @@ dependencies:
 | 
				
			|||||||
  video_thumbnail: ^0.2.5+1
 | 
					  video_thumbnail: ^0.2.5+1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  # Record audio file
 | 
					  # Record audio file
 | 
				
			||||||
  record: ^1.0.2
 | 
					  record_mp3: ^2.1.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Request permissions
 | 
				
			||||||
 | 
					  permission_handler: ^5.1.0+2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
dev_dependencies:
 | 
					dev_dependencies:
 | 
				
			||||||
  flutter_test:
 | 
					  flutter_test:
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user