Add audio from existing file

This commit is contained in:
2025-08-02 15:35:18 +08:00
parent 4d4409de2e
commit 2cc6652f75
3 changed files with 29 additions and 4 deletions

View File

@@ -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",

View File

@@ -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: [

View File

@@ -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,
), ),