in fetchDataTypesFirst
Future<Object?>
can hold a String?
so dart unwraps the Future
automatically and prints the actual value
in fetchDataTypesSecond
Future<Object>
cannot hold a String?
directly
so dart returns the Future
itself instead of unwrapping it.