问题描述
在我的应用中,我列出了手机存储中的所有视频。在gridview中,我正在显示所有视频。我作为video_thumbnail小部件的父级,是futurebuilder。在模拟器中,它可以正常工作并显示所有带有缩略图的视频,但是当我在手机中进行构建并运行时,它仅显示圆形进度栏。
我的代码:
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;
}
}
解决方法
我认为您应该在 AndroidManifest.xml 文件中使用权限。 在调试模式下运行应用程序时,Android会自行考虑权限。
,首先,您不需要使其成为 Statefull 小部件。只需将该功能分配给 future 属性即可。其次,您的构建器格式错误,并且您没有指定数据类型。这就是你应该做的。最后一定要有回报。
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());
},),);
}
}