audio_picker_utils.dart 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import 'dart:io';
  2. import 'package:file_picker/file_picker.dart';
  3. import 'package:photo_manager/photo_manager.dart';
  4. class AudioPickerUtils {
  5. AudioPickerUtils._();
  6. //申请权限
  7. static Future<bool> requestPermissionExtend() async {
  8. final PermissionState ps = await PhotoManager.requestPermissionExtend(
  9. requestOption: const PermissionRequestOption(
  10. androidPermission: AndroidPermission(
  11. type: RequestType.audio,
  12. mediaLocation: false,
  13. )));
  14. return ps.hasAccess;
  15. }
  16. //是否有权限
  17. static Future<bool> hasPermission() async {
  18. final PermissionState ps = await PhotoManager.getPermissionState(
  19. requestOption: const PermissionRequestOption());
  20. return ps.hasAccess;
  21. }
  22. //获取AssetPathEntity
  23. static Future<List<AssetPathEntity>> getAssetPathList() async {
  24. final PMFilter filter = FilterOptionGroup(
  25. audioOption: const FilterOption(
  26. sizeConstraint: SizeConstraint(ignoreSize: true),
  27. ),
  28. );
  29. final List<AssetPathEntity> paths = await PhotoManager.getAssetPathList(
  30. onlyAll: true,
  31. type: RequestType.audio,
  32. filterOption: filter,
  33. );
  34. return paths;
  35. }
  36. //获取本地音频资源列表
  37. static Future<List<AssetEntity>> getAssetList(AssetPathEntity path, int page,
  38. {int size = 300}) async {
  39. final List<AssetEntity> entities = await path.getAssetListPaged(
  40. page: page,
  41. size: size,
  42. );
  43. return entities;
  44. }
  45. //根据id获取AssetEntity
  46. static Future<AssetEntity?> getAssetEntity(String? id) async {
  47. if (id == null) {
  48. return null;
  49. }
  50. return await AssetEntity.fromId(id);
  51. }
  52. //根据id获取文件
  53. static Future<File?> getAssetFile(String? id) async {
  54. if (id == null) {
  55. return null;
  56. }
  57. AssetEntity? assetEntity = await AssetEntity.fromId(id);
  58. return await assetEntity?.file;
  59. }
  60. //通过平台文件管理器的方式选择单一文件
  61. static Future<File?> pickSingleFileByPlatform() async {
  62. FilePickerResult? result = await FilePicker.platform
  63. .pickFiles(type: FileType.custom, allowedExtensions: [
  64. 'wav',
  65. 'mp3',
  66. 'm4a',
  67. 'flv',
  68. 'mp4',
  69. 'wma',
  70. '3gp',
  71. 'amr',
  72. 'aac',
  73. 'ogg-opus',
  74. 'flac'
  75. ]);
  76. if (result != null) {
  77. String filePath = result.files.single.path!;
  78. File file = File(filePath);
  79. return file;
  80. }
  81. return null;
  82. }
  83. }