44 lines
1.1 KiB
Dart
44 lines
1.1 KiB
Dart
import 'package:audioplayers/audioplayers.dart';
|
|
import 'package:file_picker/file_picker.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:path/path.dart';
|
|
|
|
class SoundPicker extends StatefulWidget {
|
|
const SoundPicker({super.key, required this.onSelect, required this.path});
|
|
|
|
final Function(String path) onSelect;
|
|
final String? path;
|
|
|
|
@override
|
|
createState() => _SoundPickerState();
|
|
}
|
|
|
|
class _SoundPickerState extends State<SoundPicker> {
|
|
final audioPlayer = AudioPlayer();
|
|
|
|
@override
|
|
void dispose() {
|
|
audioPlayer.dispose();
|
|
super.dispose();
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return ElevatedButton(
|
|
onPressed: () async {
|
|
FilePickerResult? result = await FilePicker.platform.pickFiles(
|
|
type: FileType.audio,
|
|
);
|
|
if (result == null) return;
|
|
final path = result.files.first.path;
|
|
if (path == null) return;
|
|
await audioPlayer.play(DeviceFileSource(path));
|
|
widget.onSelect(path);
|
|
},
|
|
child: Text(widget.path != null
|
|
? "Sound: ${basename(widget.path!)}"
|
|
: 'Alarm sound'),
|
|
);
|
|
}
|
|
}
|