LateInitializationError: Field has not been initialized

LateInitializationError: Field 'controller' has not been initialized.

Quick Answer

A field declared with late was accessed before it was assigned a value.

Why This Happens

In Dart, the late keyword promises the compiler that a variable will be initialized before use. If you access it before assignment, a LateInitializationError is thrown. This often happens when initState logic is skipped or an async initialization has not completed.

The Problem

class _MyWidgetState extends State<MyWidget> {
  late TextEditingController controller;

  @override
  Widget build(BuildContext context) {
    return TextField(controller: controller); // Not initialized!
  }
}

The Fix

class _MyWidgetState extends State<MyWidget> {
  late TextEditingController controller;

  @override
  void initState() {
    super.initState();
    controller = TextEditingController();
  }

  @override
  Widget build(BuildContext context) {
    return TextField(controller: controller);
  }
}

Step-by-Step Fix

  1. 1

    Identify the error

    Look at the error message: LateInitializationError: Field 'X' has not been initialized. This tells you which late field was accessed before assignment.

  2. 2

    Find the cause

    Check if the field is being initialized in initState() or the constructor, and verify it runs before the field is accessed.

  3. 3

    Apply the fix

    Initialize the late field in initState() or the constructor, or change it to a nullable type with a default value.

Bugsly catches this automatically

Bugsly's AI analyzes this error pattern in real-time, explains what went wrong in plain English, and suggests the exact fix — before your users even report it.

Try Bugsly free