在这里,我有一个应用程序,其中有多个页面的故事。因此,我使用了Pageview Builder用户来显示页面。在每个页面上,我都可以记录故事,并在完成所有记录后将其上载到服务器。
所以现在发布当我上传文件时它会一起上传,然后在我们播放录音时它会被随机播放。就是说在另一页上播放一页录音。
所以我想以同步方式一个接一个地上传音频文件。我已经使用异步并等待。但这没用。
希望您能理解问题,而您几乎没有帮助可以使我过得开心:)
这是我尝试过的代码
在此代码中, storyDetailRepository.uploadMedia(audioData,context)用于将文件上传到服务器
_uploadStoryParts(int index, bool islast, int pageNumber) async {
List files = new List();
Directory tempDir = await getTemporaryDirectory();
preferences = await SharedPreferences.getInstance();
String userId = preferences.getString('authId');
final Directory _appDocDirFolder =
Directory('${tempDir.path}/${widget.id}');
files = io.Directory("${_appDocDirFolder.path}").listSync();
List<dynamic> medias = [];
if (widget.continueRecordNumber != null) {
medias = LoginUserSingleton().storyData['media'];
} else {
medias = [];
}
if (widget.continueRecordNumber != null &&
(widget.continueRecordNumber - 1 == medias.length)) {
List<dynamic> newMedias = await _updateMediaObject(files, index, islast);
medias = [...medias, ...newMedias];
} else {
medias = await _updateMediaObject(files, index, islast);
}
Map<String, dynamic> storyObject = await _setStoryObject(medias, userId);
Map<String, dynamic> storyResponse = islast
? await storyDetailRepository.updateStory(storyObject, context)
: await storyDetailRepository.updateStory(storyObject);
setState(() {
if (pageNumber == totalPlot) {
isAudioRecoreded = true;
}
isControllervisible = false;
});
}
_updateMediaObject(List files, int index, bool isLast) async {
List<dynamic> medias = storyData['media'];
int count = 0;
for (File file in files) {
Map<String, dynamic> media = {};
Map audioData = {'file': file};
Map mediaUrl = isLast
? await storyDetailRepository.uploadMedia(audioData, context)
: await storyDetailRepository.uploadMedia(audioData);
media['images'] = (LoginUserSingleton().storyLanguage != null &&
LoginUserSingleton().storyLanguage == "Hindi")
? LoginUserSingleton().currentStory['media'][count]['images_hindi']
: LoginUserSingleton().currentStory['media'][count]['images'];
media['text'] = LoginUserSingleton().currentStory['media'][count]['text'];
media['audio'] = mediaUrl['data'];
media['index'] =
LoginUserSingleton().currentStory['media'][count]['index'];
medias.add(media);
count = count + 1;
}
return medias;
}