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.