animated_switcher.0.dart 1.89 KB
Newer Older
1 2 3 4 5 6
// 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';

7
/// Flutter code sample for [AnimatedSwitcher].
8

9
void main() => runApp(const AnimatedSwitcherExampleApp());
10

11 12
class AnimatedSwitcherExampleApp extends StatelessWidget {
  const AnimatedSwitcherExampleApp({super.key});
13 14 15 16

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
17
      home: AnimatedSwitcherExample(),
18 19 20 21
    );
  }
}

22 23
class AnimatedSwitcherExample extends StatefulWidget {
  const AnimatedSwitcherExample({super.key});
24 25

  @override
26
  State<AnimatedSwitcherExample> createState() => _AnimatedSwitcherExampleState();
27 28
}

29
class _AnimatedSwitcherExampleState extends State<AnimatedSwitcherExample> {
30 31 32 33
  int _count = 0;

  @override
  Widget build(BuildContext context) {
34
    return ColoredBox(
35 36 37 38 39 40 41
      color: Colors.white,
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          AnimatedSwitcher(
            duration: const Duration(milliseconds: 500),
            transitionBuilder: (Widget child, Animation<double> animation) {
42
              return ScaleTransition(scale: animation, child: child);
43 44 45 46 47 48 49
            },
            child: Text(
              '$_count',
              // This key causes the AnimatedSwitcher to interpret this as a "new"
              // child each time the count changes, so that it will begin its animation
              // when the count changes.
              key: ValueKey<int>(_count),
50
              style: Theme.of(context).textTheme.headlineMedium,
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
            ),
          ),
          ElevatedButton(
            child: const Text('Increment'),
            onPressed: () {
              setState(() {
                _count += 1;
              });
            },
          ),
        ],
      ),
    );
  }
}