updated_card (#16187)
diff --git a/examples/flutter_gallery/lib/demo/material/cards_demo.dart b/examples/flutter_gallery/lib/demo/material/cards_demo.dart
index 831d1fa..09435cf 100644
--- a/examples/flutter_gallery/lib/demo/material/cards_demo.dart
+++ b/examples/flutter_gallery/lib/demo/material/cards_demo.dart
@@ -47,12 +47,13 @@
];
class TravelDestinationItem extends StatelessWidget {
- TravelDestinationItem({ Key key, @required this.destination })
+ TravelDestinationItem({ Key key, @required this.destination, this.shape })
: assert(destination != null && destination.isValid),
super(key: key);
static const double height = 366.0;
final TravelDestination destination;
+ final ShapeBorder shape;
@override
Widget build(BuildContext context) {
@@ -67,6 +68,7 @@
padding: const EdgeInsets.all(8.0),
height: height,
child: new Card(
+ shape: shape,
child: new Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
@@ -149,14 +151,39 @@
}
}
-class CardsDemo extends StatelessWidget {
+
+class CardsDemo extends StatefulWidget {
static const String routeName = '/material/cards';
@override
+ _CardsDemoState createState() => new _CardsDemoState();
+}
+
+class _CardsDemoState extends State<CardsDemo> {
+ ShapeBorder _shape;
+
+ @override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
- title: const Text('Travel stream')
+ title: const Text('Travel stream'),
+ actions: <Widget>[
+ new IconButton(
+ icon: const Icon(Icons.sentiment_very_satisfied),
+ onPressed: () {
+ setState(() {
+ _shape = _shape != null ? null : const RoundedRectangleBorder(
+ borderRadius: const BorderRadius.only(
+ topLeft: const Radius.circular(16.0),
+ topRight: const Radius.circular(16.0),
+ bottomLeft: const Radius.circular(2.0),
+ bottomRight: const Radius.circular(2.0),
+ ),
+ );
+ });
+ },
+ ),
+ ],
),
body: new ListView(
itemExtent: TravelDestinationItem.height,
@@ -164,7 +191,10 @@
children: destinations.map((TravelDestination destination) {
return new Container(
margin: const EdgeInsets.only(bottom: 8.0),
- child: new TravelDestinationItem(destination: destination)
+ child: new TravelDestinationItem(
+ destination: destination,
+ shape: _shape,
+ ),
);
}).toList()
)
diff --git a/packages/flutter/lib/src/material/card.dart b/packages/flutter/lib/src/material/card.dart
index a4ce73a..12940a8 100644
--- a/packages/flutter/lib/src/material/card.dart
+++ b/packages/flutter/lib/src/material/card.dart
@@ -5,6 +5,7 @@
import 'package:flutter/widgets.dart';
import 'material.dart';
+import 'theme.dart';
/// A material design card. A card has slightly rounded corners and a shadow.
///
@@ -62,24 +63,39 @@
const Card({
Key key,
this.color,
- this.elevation: 2.0,
+ this.elevation,
+ this.shape,
this.child,
}) : super(key: key);
- /// The widget below this widget in the tree.
+ /// The card's background color.
///
- /// {@macro flutter.widgets.child}
- final Widget child;
-
- /// The color of material used for this card.
+ /// Defines the card's [Material.color].
+ ///
+ /// The default color is defined by the ambient [Theme]: [ThemeData.cardColor].
final Color color;
/// The z-coordinate at which to place this card. This controls the size of
/// the shadow below the card.
///
- /// Defaults to 2, the appropriate elevation for cards.
+ /// Defines the card's [Material.elevation].
+ ///
+ /// The default elevation is 1.0.
final double elevation;
+ /// The shape of the card's [Material].
+ ///
+ /// Defines the card's [Material.shape].
+ ///
+ /// The default shape is a [RoundedRectangleBorder] with a circular corner
+ /// radius of 4.0.
+ final ShapeBorder shape;
+
+ /// The widget below this widget in the tree.
+ ///
+ /// {@macro flutter.widgets.child}
+ final Widget child;
+
@override
Widget build(BuildContext context) {
return new Semantics(
@@ -87,11 +103,14 @@
child: new Container(
margin: const EdgeInsets.all(4.0),
child: new Material(
- color: color,
type: MaterialType.card,
- elevation: elevation,
- child: child
- )
+ color: color ?? Theme.of(context).cardColor,
+ elevation: elevation ?? 1.0,
+ shape: shape ?? const RoundedRectangleBorder(
+ borderRadius: const BorderRadius.all(const Radius.circular(4.0)),
+ ),
+ child: child,
+ ),
),
);
}