diff --git a/packages/animations/lib/src/open_container.dart b/packages/animations/lib/src/open_container.dart
index 2454b3a..f9ba91a 100644
--- a/packages/animations/lib/src/open_container.dart
+++ b/packages/animations/lib/src/open_container.dart
@@ -620,16 +620,10 @@
       _currentAnimationStatus = status;
       switch (status) {
         case AnimationStatus.dismissed:
-          if (hideableKey?.currentState != null) {
-            hideableKey.currentState
-              ..placeholderSize = null
-              ..isVisible = true;
-          }
+          _toggleHideable(hide: false);
           break;
         case AnimationStatus.completed:
-          hideableKey.currentState
-            ..placeholderSize = null
-            ..isVisible = false;
+          _toggleHideable(hide: true);
           break;
         case AnimationStatus.forward:
         case AnimationStatus.reverse:
@@ -649,6 +643,25 @@
     return super.didPop(result);
   }
 
+  @override
+  void dispose() {
+    if (hideableKey?.currentState?.isVisible == false) {
+      // This route may be disposed without dismissing its animation if it is
+      // removed by the navigator.
+      SchedulerBinding.instance
+          .addPostFrameCallback((Duration d) => _toggleHideable(hide: false));
+    }
+    super.dispose();
+  }
+
+  void _toggleHideable({bool hide}) {
+    if (hideableKey?.currentState != null) {
+      hideableKey.currentState
+        ..placeholderSize = null
+        ..isVisible = !hide;
+    }
+  }
+
   void _takeMeasurements({
     BuildContext navigatorContext,
     bool delayForSourceRoute = false,
diff --git a/packages/animations/test/open_container_test.dart b/packages/animations/test/open_container_test.dart
index 2628fbe..e276f45 100644
--- a/packages/animations/test/open_container_test.dart
+++ b/packages/animations/test/open_container_test.dart
@@ -1733,6 +1733,47 @@
       expect(modalRoute.settings, routeSettings);
     },
   );
+
+  // Regression test for https://github.com/flutter/flutter/issues/72238.
+  testWidgets(
+    'OpenContainer\'s source widget is visible in closed container route if '
+    'open container route is pushed from not using the OpenContainer itself',
+    (WidgetTester tester) async {
+      final Widget openContainer = OpenContainer(
+        closedBuilder: (BuildContext context, VoidCallback action) {
+          return GestureDetector(
+            onTap: action,
+            child: const Text('Closed'),
+          );
+        },
+        openBuilder: (BuildContext context, VoidCallback action) {
+          return GestureDetector(
+            onTap: action,
+            child: const Text('Open'),
+          );
+        },
+      );
+      await tester.pumpWidget(_boilerplate(child: openContainer));
+      expect(_getOpacity(tester, 'Closed'), 1.0);
+
+      // Open the container
+      await tester.tap(find.text('Closed'));
+      await tester.pumpAndSettle();
+
+      final Element container = tester.element(
+        find.byType(OpenContainer, skipOffstage: false),
+      );
+      // Replace the open container route.
+      Navigator.pushReplacement<void, void>(container,
+          MaterialPageRoute<void>(builder: (_) => const Placeholder()));
+      await tester.pumpAndSettle();
+      // Go back to the main page and verify the closed builder is showed.
+      Navigator.pop(container);
+      await tester.pumpAndSettle();
+
+      expect(_getOpacity(tester, 'Closed'), 1.0);
+    },
+  );
 }
 
 Color _getScrimColor(WidgetTester tester) {
