// Copyright 2014 The Flutter Authors. 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:flutter/material.dart'; import 'package:flutter_api_samples/material/app/app.0.dart' as example; import 'package:flutter_test/flutter_test.dart'; void main() { testWidgets('Theme animation can be customized using AnimationStyle', (WidgetTester tester) async { await tester.pumpWidget( const example.MaterialAppExample(), ); Material getScaffoldMaterial() { return tester.widget<Material>(find.descendant( of: find.byType(Scaffold), matching: find.byType(Material).first, )); } final ThemeData lightTheme = ThemeData(colorSchemeSeed: Colors.green); final ThemeData darkTheme = ThemeData( colorSchemeSeed: Colors.green, brightness: Brightness.dark, ); // Test the default animation. expect(getScaffoldMaterial().color, lightTheme.colorScheme.background); await tester.tap(find.text( 'Switch Theme Mode')); await tester.pump(); // Advance the animation by half of the default duration. await tester.pump(const Duration(milliseconds: 100)); // The Scaffold background color is updated. expect( getScaffoldMaterial().color, Color.lerp(lightTheme.colorScheme.background, darkTheme.colorScheme.background, 0.5), ); await tester.pumpAndSettle(); // The Scaffold background color is now fully dark. expect(getScaffoldMaterial().color, darkTheme.colorScheme.background); // Test the custom animation curve and duration. await tester.tap(find.text('Custom')); await tester.pumpAndSettle(); await tester.tap(find.text('Switch Theme Mode')); await tester.pump(); // Advance the animation by half of the custom duration. await tester.pump(const Duration(milliseconds: 500)); // The Scaffold background color is updated. expect(getScaffoldMaterial().color, const Color(0xff3c3e3b)); await tester.pumpAndSettle(); // The Scaffold background color is now fully light. expect(getScaffoldMaterial().color, lightTheme.colorScheme.background); // Test the no animation style. await tester.tap(find.text('None')); await tester.pumpAndSettle(); await tester.tap(find.text('Switch Theme Mode')); // Advance the animation by only one frame. await tester.pump(); // The Scaffold background color is updated immediately. expect(getScaffoldMaterial().color, darkTheme.colorScheme.background); }); }