diff --git a/packages/flutter/lib/src/cupertino/nav_bar.dart b/packages/flutter/lib/src/cupertino/nav_bar.dart
index 7afbe4f..75d6905 100644
--- a/packages/flutter/lib/src/cupertino/nav_bar.dart
+++ b/packages/flutter/lib/src/cupertino/nav_bar.dart
@@ -2027,11 +2027,7 @@
       child: Padding(
         padding: EdgeInsetsDirectional.only(start: padding?.start ?? _kNavBarEdgePadding),
         child: MediaQuery(
-          data: MediaQueryData(
-            textScaler: MediaQuery.textScalerOf(
-              context,
-            ).clamp(minScaleFactor: 1.0, maxScaleFactor: _kMaxScaleFactor),
-          ),
+          data: MediaQuery.of(context).copyWith(textScaler: _clampedTextScaler(context)),
           child: IconTheme.merge(data: const IconThemeData(size: 32.0), child: leadingContent),
         ),
       ),
@@ -2057,11 +2053,7 @@
     return KeyedSubtree(
       key: backChevronKey,
       child: MediaQuery(
-        data: MediaQueryData(
-          textScaler: MediaQuery.textScalerOf(
-            context,
-          ).clamp(minScaleFactor: 1.0, maxScaleFactor: _kMaxScaleFactor),
-        ),
+        data: MediaQuery.of(context).copyWith(textScaler: _clampedTextScaler(context)),
         child: const _BackChevron(),
       ),
     );
@@ -2089,11 +2081,7 @@
     return KeyedSubtree(
       key: backLabelKey,
       child: MediaQuery(
-        data: MediaQueryData(
-          textScaler: MediaQuery.textScalerOf(
-            context,
-          ).clamp(minScaleFactor: 1.0, maxScaleFactor: _kMaxScaleFactor),
-        ),
+        data: MediaQuery.of(context).copyWith(textScaler: _clampedTextScaler(context)),
         child: _BackLabel(specifiedPreviousTitle: previousPageTitle, route: route),
       ),
     );
@@ -2136,11 +2124,7 @@
     return KeyedSubtree(
       key: middleKey,
       child: MediaQuery(
-        data: MediaQueryData(
-          textScaler: MediaQuery.textScalerOf(
-            context,
-          ).clamp(minScaleFactor: 1.0, maxScaleFactor: _kMaxScaleFactor),
-        ),
+        data: MediaQuery.of(context).copyWith(textScaler: _clampedTextScaler(context)),
         child: middleContent,
       ),
     );
@@ -2162,11 +2146,7 @@
       child: Padding(
         padding: EdgeInsetsDirectional.only(end: padding?.end ?? _kNavBarEdgePadding),
         child: MediaQuery(
-          data: MediaQueryData(
-            textScaler: MediaQuery.textScalerOf(
-              context,
-            ).clamp(minScaleFactor: 1.0, maxScaleFactor: _kMaxScaleFactor),
-          ),
+          data: MediaQuery.of(context).copyWith(textScaler: _clampedTextScaler(context)),
           child: IconTheme.merge(data: const IconThemeData(size: 32.0), child: userTrailing),
         ),
       ),
@@ -2200,7 +2180,7 @@
     return KeyedSubtree(
       key: largeTitleKey,
       child: MediaQuery(
-        data: MediaQueryData(
+        data: MediaQuery.of(context).copyWith(
           textScaler: TextScaler.linear(
             _dampScaleFactor(
               MediaQuery.textScalerOf(context).scale(_kNavBarLargeTitleHeightExtension),
@@ -2223,11 +2203,17 @@
     return KeyedSubtree(
       key: navBarBottomKey,
       child: MediaQuery(
-        data: MediaQueryData(textScaler: MediaQuery.textScalerOf(context)),
+        data: MediaQuery.of(context).copyWith(textScaler: MediaQuery.textScalerOf(context)),
         child: userBottom ?? const SizedBox.shrink(),
       ),
     );
   }
+
+  static TextScaler _clampedTextScaler(BuildContext context) {
+    return MediaQuery.textScalerOf(
+      context,
+    ).clamp(minScaleFactor: 1.0, maxScaleFactor: _kMaxScaleFactor);
+  }
 }
 
 /// A nav bar back button typically used in [CupertinoNavigationBar].
diff --git a/packages/flutter/test/cupertino/nav_bar_test.dart b/packages/flutter/test/cupertino/nav_bar_test.dart
index 7e2a12e..ea2fcd7 100644
--- a/packages/flutter/test/cupertino/nav_bar_test.dart
+++ b/packages/flutter/test/cupertino/nav_bar_test.dart
@@ -451,6 +451,52 @@
     expect(count, 0x010101);
   });
 
+  testWidgets('Nav bar static components respect MediaQueryData', (WidgetTester tester) async {
+    // This is a regression test for https://github.com/flutter/flutter/issues/174642
+    const double value = 10.0;
+
+    void expectCustomMediaQueryData(BuildContext context) {
+      expect(MediaQuery.platformBrightnessOf(context), Brightness.dark);
+      expect(MediaQuery.devicePixelRatioOf(context), value);
+      expect(MediaQuery.viewInsetsOf(context), const EdgeInsets.all(value));
+    }
+
+    await tester.pumpWidget(
+      CupertinoApp(
+        home: MediaQuery(
+          data: const MediaQueryData(
+            devicePixelRatio: value,
+            viewInsets: EdgeInsets.all(value),
+            platformBrightness: Brightness.dark,
+          ),
+          child: CupertinoNavigationBar(
+            leading: Builder(
+              builder: (BuildContext context) {
+                expectCustomMediaQueryData(context);
+                return CupertinoButton(onPressed: () {}, child: const Text('leading'));
+              },
+            ),
+            middle: Builder(
+              builder: (BuildContext context) {
+                expectCustomMediaQueryData(context);
+                return CupertinoButton(onPressed: () {}, child: const Text('middle'));
+              },
+            ),
+            trailing: Builder(
+              builder: (BuildContext context) {
+                expectCustomMediaQueryData(context);
+                return CupertinoButton(onPressed: () {}, child: const Text('trailing'));
+              },
+            ),
+          ),
+        ),
+      ),
+    );
+    expect(find.text('leading'), findsOneWidget);
+    expect(find.text('middle'), findsOneWidget);
+    expect(find.text('trailing'), findsOneWidget);
+  });
+
   testWidgets('No slivers with no large titles', (WidgetTester tester) async {
     await tester.pumpWidget(
       const CupertinoApp(
