Fix menu width issue for `DropdownMenu` (#123823)

diff --git a/packages/flutter/lib/src/material/dropdown_menu.dart b/packages/flutter/lib/src/material/dropdown_menu.dart
index 7292634..350eb9b 100644
--- a/packages/flutter/lib/src/material/dropdown_menu.dart
+++ b/packages/flutter/lib/src/material/dropdown_menu.dart
@@ -19,6 +19,7 @@
 import 'menu_style.dart';
 import 'text_field.dart';
 import 'theme.dart';
+import 'theme_data.dart';
 
 
 // Navigation shortcuts to move the selected menu items up or down.
@@ -535,10 +536,10 @@
             );
 
             return _DropdownMenuBody(
-              key: _anchorKey,
               width: widget.width,
               children: <Widget>[
                 TextField(
+                  key: _anchorKey,
                   mouseCursor: effectiveMouseCursor,
                   canRequestFocus: canRequestFocus(),
                   enableInteractiveSelection: canRequestFocus(),
@@ -607,7 +608,6 @@
 
 class _DropdownMenuBody extends MultiChildRenderObjectWidget {
   const _DropdownMenuBody({
-    super.key,
     super.children,
     this.width,
   });
@@ -826,6 +826,7 @@
     return const MenuStyle(
       minimumSize: MaterialStatePropertyAll<Size>(Size(_kMinimumWidth, 0.0)),
       maximumSize: MaterialStatePropertyAll<Size>(Size.infinite),
+      visualDensity: VisualDensity.standard,
     );
   }
 
diff --git a/packages/flutter/test/material/dropdown_menu_test.dart b/packages/flutter/test/material/dropdown_menu_test.dart
index 83be9e9..62da023 100644
--- a/packages/flutter/test/material/dropdown_menu_test.dart
+++ b/packages/flutter/test/material/dropdown_menu_test.dart
@@ -1058,6 +1058,58 @@
     await gesture.moveTo(tester.getCenter(textFieldFinder));
     expect(RendererBinding.instance.mouseTracker.debugDeviceActiveCursor(1), SystemMouseCursors.click);
   });
+
+  testWidgets('The menu has the same width as the input field in ListView', (WidgetTester tester) async {
+    // Regression test for https://github.com/flutter/flutter/issues/123631
+    await tester.pumpWidget(MaterialApp(
+      home: Scaffold(
+        body: ListView(
+          children: <Widget>[
+            DropdownMenu<TestMenu>(
+              dropdownMenuEntries: menuChildren,
+            ),
+          ],
+        ),
+      ),
+    ));
+
+    final Rect textInput = tester.getRect(find.byType(TextField));
+
+    await tester.tap(find.byType(TextField));
+    await tester.pumpAndSettle();
+
+    final Finder findMenu = find.byWidgetPredicate((Widget widget) {
+      return widget.runtimeType.toString() == '_MenuPanel';
+    });
+    final Rect menu = tester.getRect(findMenu);
+    expect(textInput.width, menu.width);
+
+    await tester.pumpWidget(Container());
+    await tester.pumpWidget(MaterialApp(
+      home: Scaffold(
+        body: ListView(
+          children: <Widget>[
+            DropdownMenu<TestMenu>(
+              width: 200,
+              dropdownMenuEntries: menuChildren,
+            ),
+          ],
+        ),
+      ),
+    ));
+
+    final Rect textInput1 = tester.getRect(find.byType(TextField));
+
+    await tester.tap(find.byType(TextField));
+    await tester.pumpAndSettle();
+
+    final Finder findMenu1 = find.byWidgetPredicate((Widget widget) {
+      return widget.runtimeType.toString() == '_MenuPanel';
+    });
+    final Rect menu1 = tester.getRect(findMenu1);
+    expect(textInput1.width, 200);
+    expect(menu1.width, 200);
+  });
 }
 
 enum TestMenu {