There are a number of ways to convert or wrap the map.
The two primary ones are the Map.cast method and the Map.from constructor.
Map<Object, Object> original = ...;
Map<String, Object> wrapped = original.cast<String, Object>();
Map<String, Object> newMap = Map<String, Object>.from(first);
The wrapped map created by Map.cast is a wrapper around the original map. If the original map changes, so does wrapped. It is simple to use but comes with an extra type check on every access (because the wrapper checks the types at run-time, and it has to check every time because the original map may have changed).
The map created by Map.from is a new map, which means all the data from the original map are copied and type checked when the map is created, but afterwards it's a separate map that is not connected to the original.