Приложение для выпуска Flutter не показывает миниатюру
В своем приложении я перечисляю все видео из памяти телефона. В gridview я показываю все видео. Я являюсь родителем будущего виджета video_thumbnail. В эмуляторе он работает правильно и показывает все видео с миниатюрами, но когда я беру сборку и запускаю свой телефон, он показывает только круговую полосу выполнения.
Мой код:
import 'dart:io';
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:video_thumbnail/video_thumbnail.dart';
class VideoWithThumbnail extends StatefulWidget {
final String filePath;
VideoWithThumbnail({@required this.filePath});
@override
_VideoWithThumbnailState createState() => _VideoWithThumbnailState();
}
class _VideoWithThumbnailState extends State<VideoWithThumbnail> {
Future futureThumbnail;
void initState() {
super.initState();
futureThumbnail = getThumbnail();
}
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: futureThumbnail,
builder: (context, snapshot) {
if (ConnectionState.done == snapshot.connectionState) {
return Image.memory(snapshot.data);
} else {
return CircularProgressIndicator();
}
},
);
}
Future<Uint8List> getThumbnail() async {
Uint8List unit8List = await VideoThumbnail.thumbnailData(
video: widget.filePath,
imageFormat: ImageFormat.JPEG,
maxWidth:
128,
quality: 25,
);
return unit8List;
}
}
2 ответа
Прежде всего, вам не нужно делать виджет Statefull. Просто назначьте функцию будущему свойству. Во-вторых, ваш формат компоновщика неверен, и вы не указали тип данных. Вот как вы должны это сделать. Вы всегда должны иметь возврат в конце.
class Example extends StatelessWidget {
final String filePath;
const Example({this.filePath});
@override
Widget build(BuildContext context) {
return Scaffold(
body: FutureBuilder<Uint8List>(
future: getThumbnail(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return Image.memory(snapshot.data);
}
return Center(child: CircularProgressIndicator());
},
),
);
}
}
Я думаю, что есть разрешение, которое вы должны использовать в своем файле AndroidManifest.xml. Android учитывает разрешения при запуске приложения в режиме отладки.