flutter_logo.dart 3.05 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
// Copyright 2016 The Chromium 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/widgets.dart';

import 'icon_theme.dart';
import 'icon_theme_data.dart';
import 'colors.dart';

/// The Flutter logo, in widget form. This widget respects the [IconTheme].
///
/// See also:
///
///  * [IconTheme], which provides ambient configuration for icons.
///  * [Icon], for showing icons the Material design icon library.
///  * [ImageIcon], for showing icons from [AssetImage]s or other [ImageProvider]s.
class FlutterLogo extends StatelessWidget {
  /// Creates a widget that paints the Flutter logo.
  ///
21
  /// The [size] defaults to the value given by the current [IconTheme].
22 23 24 25
  const FlutterLogo({
    Key key,
    this.size,
    this.swatch: Colors.blue,
26
    this.textColor: const Color(0xFF616161),
27 28
    this.style: FlutterLogoStyle.markOnly,
    this.duration: const Duration(milliseconds: 750),
29
    this.curve: Curves.fastOutSlowIn,
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
  }) : super(key: key);

  /// The size of the logo in logical pixels.
  ///
  /// The logo will be fit into a square this size.
  ///
  /// Defaults to the current [IconTheme] size, if any. If there is no
  /// [IconTheme], or it does not specify an explicit size, then it defaults to
  /// 24.0.
  final double size;

  /// The colors to use to paint the logo. This map should contain at least two
  /// values, one for 400 and one for 900.
  ///
  /// If possible, the default should be used. It corresponds to the
  /// [Colors.blue] swatch.
  ///
  /// If for some reason that color scheme is impractical, the [Colors.amber],
  /// [Colors.red], or [Colors.indigo] swatches can be used. These are Flutter's
  /// secondary colors.
  ///
  /// In extreme cases where none of those four color schemes will work,
  /// [Colors.pink], [Colors.purple], or [Colors.cyan] swatches can be used.
  /// These are Flutter's tertiary colors.
  final Map<int, Color> swatch;

56 57 58 59 60 61
  /// The color used to paint the "Flutter" text on the logo, if [style] is
  /// [FlutterLogoStyle.horizontal] or [FlutterLogoStyle.stacked]. The
  /// appropriate color is `const Color(0xFF616161)` (a medium gray), against a
  /// white background.
  final Color textColor;

62 63 64 65
  /// Whether and where to draw the "Flutter" text. By default, only the logo
  /// itself is drawn.
  final FlutterLogoStyle style;

66 67
  /// The length of time for the animation if the [style], [swatch], or
  /// [textColor] properties are changed.
68 69
  final Duration duration;

70 71 72 73
  /// The curve for the logo animation if the [style], [swatch], or [textColor]
  /// change.
  final Curve curve;

74 75 76 77 78 79 80 81
  @override
  Widget build(BuildContext context) {
    final IconThemeData iconTheme = IconTheme.of(context).fallback();
    final double iconSize = size ?? iconTheme.size;
    return new AnimatedContainer(
      width: iconSize,
      height: iconSize,
      duration: duration,
82
      curve: curve,
83 84 85
      decoration: new FlutterLogoDecoration(
        swatch: swatch,
        style: style,
86
        textColor: textColor,
87 88 89 90
      ),
    );
  }
}