I am creating a screen for updating place details, where admin can view and delete existing images for that place or upload new images
This is my GridView.builder: [dart file]
GridView.builder(
shrinkWrap: true,
itemCount: _newImages.length + provider.getImagesForPlace(widget.place.id).length,
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3,
crossAxisSpacing: 4.0,
mainAxisSpacing: 4.0,
),
itemBuilder: (BuildContext context, int index) {
if (index < _newImages.length) {
// Render new images
return Stack(
fit: StackFit.expand,
children: [
Image.file(
_newImages[index],
fit: BoxFit.cover,
),
Positioned(
right: 5,
top: 5,
child: GestureDetector(
onTap: () {
setState(() {
_newImages.removeAt(index);
});
},
child: const Icon(
Icons.cancel,
color: Colors.red,
),
),
),
],
);
} else {
// Render existing images
final existingImages = provider.getImagesForPlace(widget.place.id);
final existingImageIndex = index - _newImages.length;
return existingImages.isEmpty
? Container() // Empty container if no existing images
: Image.memory(existingImages[existingImageIndex].bytes);
}
},
),
Now, in above code:
1. _newImages is defined as:
final List<File> _newImages = [];
2. a. getImagesForPlace function is from where downloaded images can be retrieved. provider is used for state management, this how the function is :
List<MemoryImage> getImagesForPlace(String placeId) {
return _placeImages[placeId] ?? [];
}
b. _placeImages is defined as:
final Map<String, List<MemoryImage>> _placeImages = {};
where downloaded images are stored
Now, I am getting error in GridView at itemCount
Error: The argument type 'num' can't be assigned to the parameter type 'int?'.
itemCount: _newImages.length + provider.getImagesForPlace(widget.place.id).length