I am building a flutter application where I am trying to upload an image to the firebase database but getting an error LateInitializationError: Field '_pickedImage' has not been initialized. Error: Unexpected null value.
I have checked the null value as well using the ?
operator too but I do not know what I am missing.
import 'dart:io';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_storage/firebase_storage.dart';
import 'package:get/get.dart';
import 'package:image_picker/image_picker.dart';
class AuthController extends GetxController {
static AuthController instance = Get.find();
late Rx<User?> _user;
late Rx<File?> _pickedImage;
File? get profilePhoto => _pickedImage.value;
User get user => _user.value!;
@override
void onReady() {
super.onReady();
_user = Rx<User?>(firebaseAuth.currentUser);
_user.bindStream(firebaseAuth.authStateChanges());
ever(_user, _setInitialScreen);
}
_setInitialScreen(User? user) {
if (user == null) {
Get.offAll(() => LoginScreen());
} else {
Get.offAll(() => const HomeScreen());
}
}
void pickImage() async {
final pickedImage =
await ImagePicker().pickImage(source: ImageSource.gallery);
if (pickedImage != null) {
Get.snackbar('Profile Picture',
'You have successfully selected your profile picture!');
}
_pickedImage = Rx<File?>(File(pickedImage!.path));
}
// upload to firebase storage
Future<String> _uploadToStorage(File image) async {
Reference ref = firebaseStorage
.ref()
.child('profilePics')
.child(firebaseAuth.currentUser!.uid);
UploadTask uploadTask = ref.putFile(image);
TaskSnapshot snap = await uploadTask;
String downloadUrl = await snap.ref.getDownloadURL();
return downloadUrl;
}
}
2
Answers
change
late Rx<File?> _pickedImage;
toRxn<File> _pickedImage = Rxn<File>();
Rxn<File>()
is equivalent toRx<File?>(null)
;You have to remove late added before _pickImage or have to initialize in init state