Fix `DataTable` `_SortArrow` changing orientation when state is updated (#94455)

diff --git a/packages/flutter/lib/src/material/data_table.dart b/packages/flutter/lib/src/material/data_table.dart
index 9fb0dc6..f8972c3 100644
--- a/packages/flutter/lib/src/material/data_table.dart
+++ b/packages/flutter/lib/src/material/data_table.dart
@@ -1139,6 +1139,7 @@
   @override
   void initState() {
     super.initState();
+    _up = widget.up;
     _opacityAnimation = CurvedAnimation(
       parent: _opacityController = AnimationController(
         duration: widget.duration,
diff --git a/packages/flutter/test/material/data_table_test.dart b/packages/flutter/test/material/data_table_test.dart
index aa781ff..1381a68 100644
--- a/packages/flutter/test/material/data_table_test.dart
+++ b/packages/flutter/test/material/data_table_test.dart
@@ -486,6 +486,105 @@
     );
   });
 
+  testWidgets('DataTable sort indicator orientation does not change on state update', (WidgetTester tester) async {
+    // Regression test for https://github.com/flutter/flutter/issues/43724
+    Widget buildTable({String title = 'Name1'}) {
+      return DataTable(
+        sortColumnIndex: 0,
+        columns: <DataColumn>[
+          DataColumn(
+            label: Text(title),
+            tooltip: 'Name',
+            onSort: (int columnIndex, bool ascending) {},
+          ),
+        ],
+        rows: kDesserts.map<DataRow>((Dessert dessert) {
+          return DataRow(
+            cells: <DataCell>[
+              DataCell(
+                Text(dessert.name),
+              ),
+            ],
+          );
+        }).toList(),
+      );
+    }
+
+    // Check for ascending list
+    await tester.pumpWidget(MaterialApp(
+      home: Material(child: buildTable()),
+    ));
+    // The `tester.widget` ensures that there is exactly one upward arrow.
+    final Finder iconFinder = find.widgetWithIcon(Transform, Icons.arrow_upward);
+    Transform transformOfArrow = tester.widget<Transform>(iconFinder);
+    expect(
+      transformOfArrow.transform.getRotation(),
+      equals(Matrix3.identity()),
+    );
+
+    // Cause a rebuild by updating the widget
+    await tester.pumpWidget(MaterialApp(
+      home: Material(child: buildTable(title: 'Name2')),
+    ));
+    await tester.pumpAndSettle();
+    // The `tester.widget` ensures that there is exactly one upward arrow.
+    transformOfArrow = tester.widget<Transform>(iconFinder);
+    expect(
+      transformOfArrow.transform.getRotation(),
+      equals(Matrix3.identity()), // Should not have changed
+    );
+  });
+
+  testWidgets('DataTable sort indicator orientation does not change on state update - reverse', (WidgetTester tester) async {
+    // Regression test for https://github.com/flutter/flutter/issues/43724
+    Widget buildTable({String title = 'Name1'}) {
+      return DataTable(
+        sortColumnIndex: 0,
+        sortAscending: false,
+        columns: <DataColumn>[
+          DataColumn(
+            label: Text(title),
+            tooltip: 'Name',
+            onSort: (int columnIndex, bool ascending) {},
+          ),
+        ],
+        rows: kDesserts.map<DataRow>((Dessert dessert) {
+          return DataRow(
+            cells: <DataCell>[
+              DataCell(
+                Text(dessert.name),
+              ),
+            ],
+          );
+        }).toList(),
+      );
+    }
+
+    // Check for ascending list
+    await tester.pumpWidget(MaterialApp(
+      home: Material(child: buildTable()),
+    ));
+    // The `tester.widget` ensures that there is exactly one upward arrow.
+    final Finder iconFinder = find.widgetWithIcon(Transform, Icons.arrow_upward);
+    Transform transformOfArrow = tester.widget<Transform>(iconFinder);
+    expect(
+      transformOfArrow.transform.getRotation(),
+      equals(Matrix3.rotationZ(math.pi)),
+    );
+
+    // Cause a rebuild by updating the widget
+    await tester.pumpWidget(MaterialApp(
+      home: Material(child: buildTable(title: 'Name2')),
+    ));
+    await tester.pumpAndSettle();
+    // The `tester.widget` ensures that there is exactly one upward arrow.
+    transformOfArrow = tester.widget<Transform>(iconFinder);
+    expect(
+      transformOfArrow.transform.getRotation(),
+      equals(Matrix3.rotationZ(math.pi)), // Should not have changed
+    );
+  });
+
   testWidgets('DataTable row onSelectChanged test', (WidgetTester tester) async {
     await tester.pumpWidget(
       MaterialApp(