Fix issue with account drawer header arrow rotating when setState is called (#29980)

The UserAccountsDrawerHeader had a bug with the arrow rotating whenever setState was called on its parent. This change makes sure that we check that the state actually changed before allowing the animation to trigger.

Fixes #25801
diff --git a/packages/flutter/lib/src/material/user_accounts_drawer_header.dart b/packages/flutter/lib/src/material/user_accounts_drawer_header.dart
index 0efde2b..0f88add 100644
--- a/packages/flutter/lib/src/material/user_accounts_drawer_header.dart
+++ b/packages/flutter/lib/src/material/user_accounts_drawer_header.dart
@@ -113,8 +113,12 @@
   @override
   void didUpdateWidget (_AccountDetails oldWidget) {
     super.didUpdateWidget(oldWidget);
-    if (_animation.status == AnimationStatus.dismissed ||
-        _animation.status == AnimationStatus.reverse) {
+    // If the state of the arrow did not change, there is no need to trigger the animation
+    if (oldWidget.isOpen == widget.isOpen) {
+      return;
+    }
+
+    if (widget.isOpen) {
       _controller.forward();
     } else {
       _controller.reverse();
diff --git a/packages/flutter/test/material/user_accounts_drawer_header_test.dart b/packages/flutter/test/material/user_accounts_drawer_header_test.dart
index 6d99736..5a9387c 100644
--- a/packages/flutter/test/material/user_accounts_drawer_header_test.dart
+++ b/packages/flutter/test/material/user_accounts_drawer_header_test.dart
@@ -139,6 +139,42 @@
     expect(transformWidget.transform.getRotation()[4], 1.0);
   });
 
+  // Regression test for https://github.com/flutter/flutter/issues/25801.
+  testWidgets('UserAccountsDrawerHeader icon does not rotate after setState', (WidgetTester tester) async {
+    StateSetter testSetState;
+    await tester.pumpWidget(MaterialApp(
+      home: Material(
+        child: StatefulBuilder(
+          builder: (BuildContext context, StateSetter setState) {
+            testSetState = setState;
+            return UserAccountsDrawerHeader(
+              onDetailsPressed: () { },
+              accountName: const Text('name'),
+              accountEmail: const Text('email'),
+            );
+          },
+        ),
+      ),
+    ));
+
+    Transform transformWidget = tester.firstWidget(find.byType(Transform));
+
+    // Icon is right side up.
+    expect(transformWidget.transform.getRotation()[0], 1.0);
+    expect(transformWidget.transform.getRotation()[4], 1.0);
+
+    testSetState(() { });
+    await tester.pump(const Duration(milliseconds: 10));
+    expect(tester.hasRunningAnimations, isFalse);
+
+    await tester.pumpAndSettle();
+    transformWidget = tester.firstWidget(find.byType(Transform));
+
+    // Icon has not rotated.
+    expect(transformWidget.transform.getRotation()[0], 1.0);
+    expect(transformWidget.transform.getRotation()[4], 1.0);
+  });
+
   testWidgets('UserAccountsDrawerHeader icon rotation test speeeeeedy', (WidgetTester tester) async {
     await pumpTestWidget(tester);
     Transform transformWidget = tester.firstWidget(find.byType(Transform));