Wellkit
Wellkit

Reputation: 1

LateError (LateInitializationError: Field 'image' has not been initialized.)

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

Answers (1)

omar hatem
omar hatem

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

Related Questions