| // 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/widgets.dart'; |
| |
| /// A tile in a material design grid list. |
| /// |
| /// A grid list is a [GridView] of tiles in a vertical and horizontal |
| /// array. Each tile typically contains some visually rich content (e.g., an |
| /// image) together with a [GridTileBar] in either a [header] or a [footer]. |
| /// |
| /// See also: |
| /// |
| /// * [GridView], which is a scrollable grid of tiles. |
| /// * [GridTileBar], which is typically used in either the [header] or |
| /// [footer]. |
| /// * <https://material.io/design/components/image-lists.html> |
| class GridTile extends StatelessWidget { |
| /// Creates a grid tile. |
| /// |
| /// Must have a child. Does not typically have both a header and a footer. |
| const GridTile({ |
| Key key, |
| this.header, |
| this.footer, |
| @required this.child, |
| }) : assert(child != null), |
| super(key: key); |
| |
| /// The widget to show over the top of this grid tile. |
| /// |
| /// Typically a [GridTileBar]. |
| final Widget header; |
| |
| /// The widget to show over the bottom of this grid tile. |
| /// |
| /// Typically a [GridTileBar]. |
| final Widget footer; |
| |
| /// The widget that fills the tile. |
| /// |
| /// {@macro flutter.widgets.child} |
| final Widget child; |
| |
| @override |
| Widget build(BuildContext context) { |
| if (header == null && footer == null) |
| return child; |
| |
| return Stack( |
| children: <Widget>[ |
| Positioned.fill( |
| child: child, |
| ), |
| if (header != null) |
| Positioned( |
| top: 0.0, |
| left: 0.0, |
| right: 0.0, |
| child: header, |
| ), |
| if (footer != null) |
| Positioned( |
| left: 0.0, |
| bottom: 0.0, |
| right: 0.0, |
| child: footer, |
| ), |
| ], |
| ); |
| } |
| } |