dispose method
Closes all fake streams. Calling this again is safe.
Implementation
Future<void> dispose() async {
if (_disposed) return;
_disposed = true;
for (final view in _views.values) {
view.layout.close();
view.angles.close();
}
_views.clear();
}