Flutter Listview зависает при загрузке миниатюр изображений с URL-адреса видео, и мое приложение упало - PullRequest
0 голосов
/ 12 октября 2019

Я пытаюсь получить изображение из URL-адреса видео, когда мой список прокручивается, но когда я использую библиотеку миниатюр видео и вызываю ее в списке приложений, и мое приложение зависло, это мой код

  Future _loadMore(context) async {

final diractory=Provider.of<DiractoryPath>(context,listen: false);
Provider.of<LoadState>(context).setLoadState(true);
final index= Provider.of<IndexLazyloading>(context);


if(moves.length!=index.oldmove){
  resetlist(context);

}
// Add in an artificial delay


for (var i = index.currentindex; i <= index.currentindex + increment && i<moves.length; i++) {

  File f=new File( "${diractory.diractory}/${moves[i].videourl.split("/").last.replaceAll("mp4", "png")}");
 if(!f.existsSync())
await getimage("${strings.baseurl}/videos/${moves[i].videourl}",context);
  index.setdata(i);
}
await new Future.delayed(const Duration(seconds: 2));
Provider.of<LoadState>(context).setLoadState(false);
index.setcurrentIndex(index.data.length)  ;
index.setoldMove(moves.length);

}

иэто мой плагин, который использовал

Future<Null> getimage(videourl,context)async{
 final uint8list = await VideoThumbnail.thumbnailFile(
 video: videourl,
thumbnailPath: Provider.of<DiractoryPath>(context).diractory,
imageFormat: ImageFormat.WEBP,
maxHeightOrWidth: 0, // the original resolution of the video
quality: 75,
 );
}

я пытаюсь с png, но не работает это мой список, который вызывает эту функцию, что является проблемой в этом коде, пожалуйста, помогите мне

 LazyLoadScrollView(
    isLoading: loadstate.isload,
    onEndOfPage: () => _loadMore(context),
child: ListView.builder(
itemCount: indexlayze.data.length,
itemBuilder: (context, position) {
return _buildProductItem(context,position);
},
));

мой списокполучить 10 миниатюр изображений, когда они доходят до конца списка, но очень медленно справляется с этим

1 Ответ

0 голосов
/ 13 октября 2019

Как насчет того, чтобы посвятить эту работу службе NGINX / NodeJS, работающей в облаке? Пусть приложение просто загружает эскизы из него. Это то, что я делал раньше.

Если вам действительно нужно сгенерировать миниатюры с помощью приложения, попробуйте несколько вещей:

  • Используйте JPG / PNG вместо WebP, потому что это стоит много ЦПна iOS
  • Создание списка или потока для постановки в очередь запросов, отображение эскиза заполнителя до того, как это будет сделано.
  • Приоритет очереди после прекращения прокрутки ListView.
  • Сигнализация компонента изображениякогда миниатюра закончена, также возьмите следующий элемент, чтобы вызвать миниатюру
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...