diff --git a/packages/animations/CHANGELOG.md b/packages/animations/CHANGELOG.md
index 9e379ce..619f885 100644
--- a/packages/animations/CHANGELOG.md
+++ b/packages/animations/CHANGELOG.md
@@ -1,3 +1,8 @@
+## 2.0.5
+* Update `OpenContainer` to use `Visibility` widget internally instead of `Opacity`.
+* Update `OpenContainer` to use `FadeTransition` instead of animating an `Opacity`
+  widget internally.
+
 ## 2.0.4
 
 * Updates text theme parameters to avoid deprecation issues.
diff --git a/packages/animations/lib/src/open_container.dart b/packages/animations/lib/src/open_container.dart
index 14c862e..e3f3ef6 100644
--- a/packages/animations/lib/src/open_container.dart
+++ b/packages/animations/lib/src/open_container.dart
@@ -389,8 +389,11 @@
     if (_placeholderSize != null) {
       return SizedBox.fromSize(size: _placeholderSize);
     }
-    return Opacity(
-      opacity: _visible ? 1.0 : 0.0,
+    return Visibility(
+      visible: _visible,
+      maintainSize: true,
+      maintainState: true,
+      maintainAnimation: true,
       child: widget.child,
     );
   }
@@ -819,9 +822,9 @@
                               child: (hideableKey.currentState?.isInTree ??
                                       false)
                                   ? null
-                                  : Opacity(
+                                  : FadeTransition(
                                       opacity: closedOpacityTween!
-                                          .evaluate(animation),
+                                          .animate(animation),
                                       child: Builder(
                                         key: closedBuilderKey,
                                         builder: (BuildContext context) {
@@ -841,8 +844,8 @@
                             child: SizedBox(
                               width: _rectTween.end!.width,
                               height: _rectTween.end!.height,
-                              child: Opacity(
-                                opacity: openOpacityTween!.evaluate(animation),
+                              child: FadeTransition(
+                                opacity: openOpacityTween!.animate(animation),
                                 child: Builder(
                                   key: _openBuilderKey,
                                   builder: (BuildContext context) {
diff --git a/packages/animations/pubspec.yaml b/packages/animations/pubspec.yaml
index e320601..1b767db 100644
--- a/packages/animations/pubspec.yaml
+++ b/packages/animations/pubspec.yaml
@@ -2,7 +2,7 @@
 description: Fancy pre-built animations that can easily be integrated into any Flutter application.
 repository: https://github.com/flutter/packages/tree/main/packages/animations
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+animations%22
-version: 2.0.4
+version: 2.0.5
 
 environment:
   sdk: '>=2.12.0 <3.0.0'
diff --git a/packages/animations/test/open_container_test.dart b/packages/animations/test/open_container_test.dart
index 66fca5d..8cdc892 100644
--- a/packages/animations/test/open_container_test.dart
+++ b/packages/animations/test/open_container_test.dart
@@ -580,6 +580,7 @@
     final NavigatorState navigator = tester.state(find.byType(Navigator));
     navigator.pop();
     await tester.pump();
+    await tester.pump();
 
     expect(find.text('Closed'), findsOneWidget);
     expect(find.text('Open'), findsOneWidget);
@@ -1783,47 +1784,6 @@
       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) {
@@ -1854,11 +1814,13 @@
 }
 
 double _getOpacity(WidgetTester tester, String label) {
-  final Opacity widget = tester.firstWidget(find.ancestor(
+  final FadeTransition widget = tester.firstWidget(find.ancestor(
     of: find.text(label),
-    matching: find.byType(Opacity),
+    matching: find.byType(FadeTransition),
   ));
-  return widget.opacity;
+  // Verify that the correct fade transition is retrieved (i.e. not something from a page transition).
+  assert(widget.child is Builder && widget.child?.key is GlobalKey, '$widget');
+  return widget.opacity.value;
 }
 
 class _TrackedData {
