There is a [discussion](https://stackoverflow.com/questions/12416507/difference-between-var-and-dynamic-type-in-dart) about `dynamic` and `var` before null-safety. Then what's the `Object?` between each of them?

1. Is `Object? == dynamic`?
2. How about `var?` and `dynamic?`?
3. Any difference between `dynamic?` and `dynamic`?

I see the official [document](https://dart.dev/null-safety/understanding-null-safety) about `null-safety`, but can't find the related topic.