✨ Add audio from existing file
This commit is contained in:
@@ -146,7 +146,7 @@
|
|||||||
"edited": "Edited",
|
"edited": "Edited",
|
||||||
"addVideo": "Add video",
|
"addVideo": "Add video",
|
||||||
"addPhoto": "Add photo",
|
"addPhoto": "Add photo",
|
||||||
"addVoice": "Add your voice",
|
"addAudio": "Add audio",
|
||||||
"addFile": "Add file",
|
"addFile": "Add file",
|
||||||
"recordAudio": "Record Audio",
|
"recordAudio": "Record Audio",
|
||||||
"linkAttachment": "Link Attachment",
|
"linkAttachment": "Link Attachment",
|
||||||
|
@@ -2,12 +2,14 @@ import 'dart:async';
|
|||||||
import 'dart:developer';
|
import 'dart:developer';
|
||||||
|
|
||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
|
import 'package:file_picker/file_picker.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
import 'package:gap/gap.dart';
|
import 'package:gap/gap.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:island/services/time.dart';
|
import 'package:island/services/time.dart';
|
||||||
|
import 'package:island/widgets/alert.dart';
|
||||||
import 'package:island/widgets/content/sheet.dart';
|
import 'package:island/widgets/content/sheet.dart';
|
||||||
import 'package:material_symbols_icons/symbols.dart';
|
import 'package:material_symbols_icons/symbols.dart';
|
||||||
import 'package:path_provider/path_provider.dart';
|
import 'package:path_provider/path_provider.dart';
|
||||||
@@ -81,8 +83,31 @@ class ComposeRecorder extends HookConsumerWidget {
|
|||||||
if (context.mounted) Navigator.of(context).pop(resultPath.value);
|
if (context.mounted) Navigator.of(context).pop(resultPath.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> addExistingAudio() async {
|
||||||
|
var result = await FilePicker.platform.pickFiles(
|
||||||
|
type: FileType.custom,
|
||||||
|
allowedExtensions: ['mp3', 'm4a', 'wav', 'aac', 'flac', 'ogg', 'opus'],
|
||||||
|
onFileLoading: (status) {
|
||||||
|
if (!context.mounted) return;
|
||||||
|
if (status == FilePickerStatus.picking) {
|
||||||
|
showLoadingModal(context);
|
||||||
|
} else {
|
||||||
|
hideLoadingModal(context);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
);
|
||||||
|
if (result == null || result.count == 0) return;
|
||||||
|
if (context.mounted) Navigator.of(context).pop(result.files.first.path);
|
||||||
|
}
|
||||||
|
|
||||||
return SheetScaffold(
|
return SheetScaffold(
|
||||||
titleText: "recordAudio".tr(),
|
titleText: "recordAudio".tr(),
|
||||||
|
actions: [
|
||||||
|
IconButton(
|
||||||
|
onPressed: addExistingAudio,
|
||||||
|
icon: const Icon(Symbols.upload),
|
||||||
|
),
|
||||||
|
],
|
||||||
child: Column(
|
child: Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.center,
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
|
@@ -24,7 +24,7 @@ class ComposeToolbar extends HookConsumerWidget {
|
|||||||
ComposeLogic.pickVideoMedia(ref, state);
|
ComposeLogic.pickVideoMedia(ref, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
void addYourVoice() {
|
void addAudio() {
|
||||||
ComposeLogic.recordAudioMedia(ref, state, context);
|
ComposeLogic.recordAudioMedia(ref, state, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,8 +77,8 @@ class ComposeToolbar extends HookConsumerWidget {
|
|||||||
color: colorScheme.primary,
|
color: colorScheme.primary,
|
||||||
),
|
),
|
||||||
IconButton(
|
IconButton(
|
||||||
onPressed: addYourVoice,
|
onPressed: addAudio,
|
||||||
tooltip: 'addYourVoice'.tr(),
|
tooltip: 'addAudio'.tr(),
|
||||||
icon: const Icon(Symbols.mic),
|
icon: const Icon(Symbols.mic),
|
||||||
color: colorScheme.primary,
|
color: colorScheme.primary,
|
||||||
),
|
),
|
||||||
|
Reference in New Issue
Block a user