我有一个Flutter应用,我想从图库中挑选图像。我不想使用image_picker,因为我想在应用程序中实现图像并在其中选择它。
喜欢instagram:
我使用image_gallery插件尝试了以下操作:
class PickImagesFromGalleryScreen extends StatefulWidget {
static const routeName = '/pick-images-from-gallery-screen';
@override
State<PickImagesFromGalleryScreen> createState() =>
_PickImagesFromGalleryScreenState();
}
class _PickImagesFromGalleryScreenState
extends State<PickImagesFromGalleryScreen> {
List<File> _allImages = [];
List<File> _selectedImages = [];
void _imageSelected(int index) {
if (_selectedImages.contains(_allImages[index])) {
setState(() {
_selectedImages.remove(_allImages[index]);
});
} else {
setState(() {
_selectedImages.add(_allImages[index]);
});
}
}
void _returnWithImages() {
Navigator.pop(context, _selectedImages);
}
Future<void> _loadImageList() async {
Map<dynamic, dynamic> allImageTemp;
allImageTemp = await FlutterGallaryPlugin.getAllImages;
List tempAllImageURIs = allImageTemp['URIList'] as List;
List<File> tempAllImageFiles = [];
tempAllImageURIs.forEach((image) {
tempAllImageFiles.add(File(image.toString()));
});
setState(() {
_allImages = tempAllImageFiles; // App crashes here
});
}
GestureDetector _buildGridTile(int index) {
return GestureDetector(
onTap: () => _imageSelected(index),
child: Column(
mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Image.file(
_allImages[index],
fit: BoxFit.contain,
),
Text(_selectedImages.contains(_allImages[index])
? 'Selected'
: 'Not selected')
],
),
);
}
@override
void initState() {
super.initState();
_loadImageList();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: GridView.builder(
scrollDirection: Axis.vertical,
gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 3),
itemCount: _allImages.length,
itemBuilder: (context, index) => _buildGridTile(index),
),
floatingActionButton: FloatingActionButton(
onPressed: _returnWithImages,
),
);
}
}
从图库中加载图像。当我想用图像重建屏幕时,应用程序崩溃。
日志:
E/ ( 1668): getAllImageList: /storage/2862-17EF/DCIM/Camera/IMG_20200322_095128.jpg
E/ ( 1668): getAllImageList: IMG_20200322_095128.jpg
E/ ( 1668): getAllImageList: 1586286068
E/ ( 1668): getAllImageList: IMG_20200322_095128
E/ ( 1668): getAllImageList: /storage/2862-17EF/DCIM/Camera/IMG_20200318_122356.jpg
E/ ( 1668): getAllImageList: IMG_20200318_122356.jpg
E/ ( 1668): getAllImageList: 1586286069
E/ ( 1668): getAllImageList: IMG_20200318_122356
E/ ( 1668): getAllImageList: /storage/2862-17EF/DCIM/Camera/IMG_20200322_095134.jpg
... // a lot of images
E/ ( 1668): getAllImageList: IMG-20200423-WA0003.jpg
E/ ( 1668): getAllImageList: 1587648989
E/ ( 1668): getAllImageList: IMG-20200423-WA0003
E/ ( 1668): getAllImageList: /storage/emulated/0/DCIM/Camera/IMG_20200423_212507.jpg
E/ ( 1668): getAllImageList: IMG_20200423_212507.jpg
E/ ( 1668): getAllImageList: 1587669908
E/ ( 1668): getAllImageList: IMG_20200423_212507
Lost connection to device.
Exited (sigterm)
是因为图像过多(超过900张)吗?我不知道为什么应用程序崩溃。我使用GridView.builder构造函数,因此该应用程序不会一次渲染它们。