颤振如何一一上传文件

时间:2020-06-24 17:08:40

标签: flutter dart file-upload audio-recording flutter-dependencies

在这里,我有一个应用程序,其中有多个页面的故事。因此,我使用了Pageview Builder用户来显示页面。在每个页面上,我都可以记录故事,并在完成所有记录后将其上载到服务器。

所以现在发布当我上传文件时它会一起上传,然后在我们播放录音时它会被随机播放。就是说在另一页上播放一页录音。

所以我想以同步方式一个接一个地上传音频文件。我已经使用异步并等待。但这没用。

希望您能理解问题,而您几乎没有帮助可以使我过得开心:)

这是我尝试过的代码

在此代码中, storyDe​​tailRepository.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;
  }

0 个答案:

没有答案