@Mattia's answer didn't work for me. Calling map() returns a Map<dynamic, dynamic>, which is also not a subtype of Map<String, String>.
So in addition to calling map(), I found I needed to call cast().
Map<String, dynamic> queryParameters = {"id": 3};
Map<String, String> stringParameters = queryParameters.map(
(key, value) => key, value?.toString())
).cast<String, String>();