This is the widget the error is pointing to
Container(
height: 350,
child: GetBuilder<AddProductCtrl>(
id: imageContainer,
builder: (_) {
if (addProductCtrl.imageContainerList.length > 0 ) {
return Scrollbar(
isAlwaysShown: true,
controller: addProductCtrl.scrollController,
child: ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: addProductCtrl
.imageContainerList.length,
itemBuilder: (_, index) {
return addProductCtrl
.imageContainerList[index];
}),
);
} else {
return Center(
child:
Text('Add photos for your product'),
);
}
})
),
This is the getx controller class which I am using. Can someone please point out the error The error happens when I add some images and go back and then reenter into the page having the widget . Even if I don't upload any images it throws out this null error .
import 'dart:io';
import 'package:clothy/constants/string_constants.dart';
import 'package:clothy/model/product_model.dart';
import 'package:clothy/pagesforadmin/add_product/pages/upload_image.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:logger/logger.dart';
import 'package:uuid/uuid.dart';
import 'package:image_picker/image_picker.dart';
import 'package:firebase_storage/firebase_storage.dart' as firebase_storage;
//Always remember to upload to local list and then finally send the stuff to the net;
class AddProductCtrl extends GetxController {
ScrollController scrollController = ScrollController();
firebase_storage.FirebaseStorage storage =
firebase_storage.FirebaseStorage.instance;
ProductModel product =
ProductModel(sizes: [], photoUrl: [], price: [], quantity: []);
TextEditingController? sizeCtrl = TextEditingController();
TextEditingController? qtyCtrl = TextEditingController();
TextEditingController? priceCtrl = TextEditingController();
List<ImageContainer> imageContainerList = [];
List<File> imageList = [];
var logger = Logger();
bool isUploading = false;
addImages() {
if (imageContainerList.length >= 5) {
Get.snackbar(
"limt exceedd","exceedd");
return;
}
imageContainerList.add(ImageContainer(
file: file,
));
imageList.add(file!);
// product.photoUrl!.add("s");
update([imageContainer]);
clearImage();
}
removeOneImageContainer() {
if (imageContainerList.length > 0) {
imageContainerList.removeLast();
update([imageContainer]);
}
}
handleTakePhoto() async {
Get.back();
final uploadedFile = await ImagePicker().getImage(
source: ImageSource.camera,
maxHeight: 675,
maxWidth: 960,
imageQuality: 85);
if (uploadedFile != null) {
file = File(uploadedFile.path);
addImages();
}
}
handleChooseFromGallery() async {
Get.back();
final uploadedFile = await ImagePicker()
.getImage(source: ImageSource.gallery, imageQuality: 85);
if (uploadedFile != null) {
file = File(uploadedFile.path);
addImages();
}
}
selectImage(parentContext) {
return showDialog(
context: parentContext,
builder: (context) {
return SimpleDialog(
title: Text('Upload Image'),
children: <Widget>[
SimpleDialogOption(
child: Text('Camera'),
onPressed: () => handleTakePhoto(),
),
SimpleDialogOption(
child: Text('Gallery'),
onPressed: () => handleChooseFromGallery(),
),
SimpleDialogOption(
child: Text('Cancel'),
onPressed: () => Get.back(),
)
],
);
});
}
}