From 974aaf12b9a340471996f1b91ff9308269acd868 Mon Sep 17 00:00:00 2001 From: Taha Tesser Date: Sat, 8 Apr 2023 05:39:28 +0300 Subject: [PATCH] Replace `MaterialButton` in the `AnimatedBuilder` sample (#1729) --- .../lib/src/basics/animated_builder.dart | 9 ++- .../test/basics/animated_builder_test.dart | 64 +++++++++++++++++++ 2 files changed, 68 insertions(+), 5 deletions(-) create mode 100644 animations/test/basics/animated_builder_test.dart diff --git a/animations/lib/src/basics/animated_builder.dart b/animations/lib/src/basics/animated_builder.dart index 494c6470e..bf5a850e4 100644 --- a/animations/lib/src/basics/animated_builder.dart +++ b/animations/lib/src/basics/animated_builder.dart @@ -23,7 +23,6 @@ class _AnimatedBuilderDemoState extends State @override void initState() { super.initState(); - controller = AnimationController(vsync: this, duration: duration); animation = ColorTween(begin: beginColor, end: endColor).animate(controller); @@ -49,10 +48,10 @@ class _AnimatedBuilderDemoState extends State child: AnimatedBuilder( animation: animation, builder: (context, child) { - return MaterialButton( - color: animation.value, - height: 50, - minWidth: 100, + return ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: animation.value, + ), child: child, onPressed: () { if (controller.status == AnimationStatus.completed) { diff --git a/animations/test/basics/animated_builder_test.dart b/animations/test/basics/animated_builder_test.dart new file mode 100644 index 000000000..e1f4b8146 --- /dev/null +++ b/animations/test/basics/animated_builder_test.dart @@ -0,0 +1,64 @@ +// Copyright 2023 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:animations/src/basics/basics.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +Widget createAnimatedBuilderDemoScreen() => const MaterialApp( + home: AnimatedBuilderDemo(), + ); + +void main() { + group('AnimatedBuilder Tests', () { + testWidgets('AnimatedBuilder changes button color', (tester) async { + await tester.pumpWidget(createAnimatedBuilderDemoScreen()); + + // Get the initial color of the button. + ElevatedButton button = tester.widget(find.byType(ElevatedButton)); + MaterialStateProperty? initialColor = + button.style!.backgroundColor; + + // Tap the button. + await tester.tap(find.byType(ElevatedButton)); + await tester.pumpAndSettle(); + + // Get the updated color of the button. + button = tester.widget(find.byType(ElevatedButton)); + MaterialStateProperty? updatedColor = + button.style!.backgroundColor; + + // Check if the color has changed. + expect(initialColor, isNot(updatedColor)); + }); + + testWidgets('AnimatedBuilder animates button color', (tester) async { + await tester.pumpWidget(createAnimatedBuilderDemoScreen()); + + // Get the initial color of the button. + ElevatedButton button = tester.widget(find.byType(ElevatedButton)); + MaterialStateProperty? initialColor = + button.style!.backgroundColor; + + // Tap the button to trigger the animation but don't wait for it to finish. + await tester.tap(find.byType(ElevatedButton)); + await tester.pump(); + await tester.pump(const Duration(milliseconds: 400)); + + // Check that the color has changed but not to the final color. + button = tester.widget(find.byType(ElevatedButton)); + MaterialStateProperty? changedColor = + button.style!.backgroundColor; + expect(initialColor, isNot(changedColor)); + + // Wait for the animation to finish. + await tester.pump(const Duration(milliseconds: 400)); + + // Check that the color has changed to the final color. + button = tester.widget(find.byType(ElevatedButton)); + MaterialStateProperty? finalColor = button.style!.backgroundColor; + expect(changedColor, isNot(finalColor)); + }); + }); +}