About Future.forEach

"""
Perform an async operation for each element of the iterable, in turn. 

Runs f for each element in input in order, moving to the next element only when the Future returned by f completes. Returns a Future that completes when all elements have been processed. 

The return values of all Futures are discarded. Any errors will cause the iteration to stop and will be piped through the returned Future.
"""

Thus, Each function run in Future.forEach needs to complete first. Since we are not using completers, Future.forEach will not know when the function is complete if we do not return. I think if this is breaking the code, there is some other error.