Reputation: 1
I'm making an application to hide messages in pictures, everything is running smoothly and i have declared everything, but there is a problem i'm having "LateError (LateInitializationError: Field 'image' has not been initialized.)". can anyone help me?
import 'dart:io';
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:hideimage/action/decode_req.dart';
import 'package:hideimage/action/encode_req.dart';
import 'package:hideimage/fight/decode.dart';
import 'package:hideimage/fight/encode.dart';
import 'package:image_picker/image_picker.dart';
class HomeScreen extends StatefulWidget {
HomeScreen({Key? key}) : super(key: key);
@override
State<HomeScreen> createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
final picker = ImagePicker();
late Uint8List image;
String text = "Example";
bool isLoading = false;
Future getImage() async {
final pickedFile = await picker.getImage(source: ImageSource.camera);
if (pickedFile != null) {
setState(() {
isLoading = true;
});
File _image = File(pickedFile.path);
EncodeRequest request =
EncodeRequest(_image.readAsBytesSync(), "", key: "");
image = await encodeMessageIntoImageAsync(request);
setState(() {
isLoading = false;
});
} else {
print('No Image Selected');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(text),
),
body: Center(
child: isLoading
? CircularProgressIndicator()
: image != null
? Text('No Image Selected')
: GestureDetector(
child: Image.memory(image),
onTap: () async {
setState(() {
isLoading = true;
});
DecodeRequest request = DecodeRequest(image, key: "");
text = await decodeMessageFromImageAsync(request);
setState(() {
isLoading = false;
});
},
)
),
floatingActionButton: FloatingActionButton(
onPressed: getImage,
tooltip: 'Pick Image',
child: Icon(Icons.add_a_photo),
),
);
}
}
Upvotes: 0
Views: 832
Reputation: 1989
you have a misunderstanding, late
variables are not nullable, you are only telling the compiler that you will assign its value later but still before using it.
here you are checking if image != null
so image has not been initialized yet, thus you get this error.
what you need here is making image
nullable not late
i.e change the declaration to this
Uint8List? image;
Upvotes: 2