Explain the difference between StatefulWidget and StatelessWidget with examples.

Beginner

Answer

StatelessWidget: Used when the UI doesn't need to change

class WelcomeMessage extends StatelessWidget {
  final String name;
  WelcomeMessage(this.name);
  
  @override
  Widget build(BuildContext context) {
    return Text('Welcome, $name!');
  }
}

StatefulWidget: Used when the UI needs to change based on user interaction or other events

class ToggleButton extends StatefulWidget {
  @override
  _ToggleButtonState createState() => _ToggleButtonState();
}

class _ToggleButtonState extends State<ToggleButton> {
  bool isPressed = false;
  
  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: () => setState(() => isPressed = !isPressed),
      child: Text(isPressed ? 'ON' : 'OFF'),
    );
  }
}