The difference in Flutter is that stateless widgets can be defined entirely by the constructor arguments. If you use the same arguments to build two stateless widgets, they will be identical.
A stateful widget, on the other hand, is not always the same as one created with the identical constructor arguments. It’s possible that it’s in a different state. A stateful widget is immutable stateless) in and of itself, but as mentioned in the StatefulWidget doc, Flutter manages a separate state object and associates it with the widget. This means that when Flutter rebuilds a stateful widget, it will check to see if a prior state object should be reused and, if so, will connect that state object to the widget. To help you visualize here is a representation:
It is important in developing applications to know the difference between them and to maximize the potential of both the widgets. If your are going to use the function setState, you will need to use Stateful widget because you cannot use it in Stateless. That is why you better know your widgets before creating projects in flutter.