Я пытаюсь заставить работать простой функционал пакета flutter_sound. Я подхожу к этому, сначала имея возможность начать запись. Кажется, что в настоящее время у меня есть проблема, когда, даже когда я включаю Uri, куда я хочу сохранить эти файлы, а также тип аудиоформата, я хочу, чтобы он экспортировал эти файлы, когда я получаю сообщение о проблеме:
flutter: NoSuchMethodError: The method 'startRecorder' was called on null.
Receiver: null
Tried calling: startRecorder(codec: Instance of 't_CODEC', uri: "/Users/<user-name>/Library/Developer/CoreSimulator/Devices/CEC7EE26-9400-479B-85EB-06728074F7C0/data/Containers/Data/Application/4C726628-AE3B-42E7-8C6A-4B239AFDFAE6/Library/Caches/audio.aac")
Я проверил каталог и не вижу файла audio.aac
, поэтому, когда я попытался создать файл через терминал с помощью touch audio.aac
и попытался записать, я все еще получил ту же ошибку , Поэтому я предполагаю, что мне нужно каким-то образом создать этот файл или что я вообще не понимаю, в чем проблема. Я действительно заблудился, когда другие разработчики пытались помочь, и я не могу найти ресурсы о том, как решить эту проблему.
В моем pubspe c .yaml я установил версию flutter_sound, как показано ниже:
dev_dependencies:
flutter_sound: ^2.0.3
Я включил необходимые разрешения в моем Info.plist и в моем AndroidManifest . xml.
Я буду публиковать, что я считаю необходимым кодом ниже.
class _AudioRecorderState extends State<AudioRecorder> {
String _recordedFilePath;
bool _isRecording = false;
bool _isPlaying = false;
StreamSubscription _recorderSubscription;
StreamSubscription _dbPeakSubscription;
StreamSubscription _playerSubscription;
FlutterSound flutterSound;
String _recorderTxt = '00:00:00';
String _playerTxt = '00:00:00';
double _dbLevel;
double sliderCurrentPosition = 0.0;
double maxDuration = 1.0;
@override
void initState() {
super.initState();
FlutterSound flutterSound = new FlutterSound();
flutterSound.setSubscriptionDuration(0.01);
flutterSound.setDbPeakLevelUpdate(0.8);
flutterSound.setDbLevelEnabled(true);
initializeDateFormatting();
}
void startRecorder() async {
try {
Directory tempDir = await getTemporaryDirectory();
File filePath = File('${tempDir.path}/audio.aac');
String path = await flutterSound.startRecorder(uri: filePath.path, codec: t_CODEC.CODEC_AAC);
print('startRecorder: $path');
_recorderSubscription = flutterSound.onRecorderStateChanged.listen((e) {
DateTime date = new DateTime.fromMillisecondsSinceEpoch(
e.currentPosition.toInt(),
isUtc: true);
String txt = DateFormat('mm:ss:SS', 'en_US').format(date);
this.setState(() {
this._recorderTxt = txt.substring(0, 8);
});
});
_dbPeakSubscription =
flutterSound.onRecorderDbPeakChanged.listen((value) {
print("got update -> $value");
setState(() {
this._dbLevel = value;
});
});
this.setState(() {
this._isRecording = true;
});
} catch (err) {
print('startRecorder error: $err');
}
}
Если вы хотите увидеть мой Widget Build(...){...}
или любую другую часть моего кода пожалуйста, дайте мне знать.