Snack color (#23255)

* added test
diff --git a/packages/flutter/lib/src/material/snack_bar.dart b/packages/flutter/lib/src/material/snack_bar.dart
index ccb217a..55c88ff 100644
--- a/packages/flutter/lib/src/material/snack_bar.dart
+++ b/packages/flutter/lib/src/material/snack_bar.dart
@@ -81,12 +81,21 @@
   /// The [label] and [onPressed] arguments must be non-null.
   const SnackBarAction({
     Key key,
+    this.textColor,
+    this.disabledTextColor,
     @required this.label,
     @required this.onPressed,
   }) : assert(label != null),
        assert(onPressed != null),
        super(key: key);
 
+  /// The button label color. If not provided, defaults to [accentColor].
+  final Color textColor;
+
+  /// The button disabled label color. This color is shown after the
+  /// [snackBarAction] is dismissed.
+  final Color disabledTextColor;
+
   /// The button label.
   final String label;
 
@@ -118,6 +127,8 @@
     return FlatButton(
       onPressed: _haveTriggeredAction ? null : _handlePressed,
       child: Text(widget.label),
+      textColor: widget.textColor,
+      disabledTextColor: widget.disabledTextColor,
     );
   }
 }
diff --git a/packages/flutter/test/material/snack_bar_test.dart b/packages/flutter/test/material/snack_bar_test.dart
index cf1d55d..38e403e 100644
--- a/packages/flutter/test/material/snack_bar_test.dart
+++ b/packages/flutter/test/material/snack_bar_test.dart
@@ -296,6 +296,50 @@
     expect(tapCount, equals(1));
   });
 
+  testWidgets('Snackbar labels can be colored', (WidgetTester tester) async {
+    await tester.pumpWidget(
+      MaterialApp(
+        home: Scaffold(
+          body: Builder(
+            builder: (BuildContext context) {
+              return GestureDetector(
+                onTap: () {
+                  Scaffold.of(context).showSnackBar(
+                    SnackBar(
+                      content: const Text('I am a snack bar.'),
+                      duration: const Duration(seconds: 2),
+                      action: SnackBarAction(
+                        textColor: Colors.lightBlue,
+                        disabledTextColor: Colors.red,
+                        label: 'ACTION',
+                        onPressed: () {},
+                      ),
+                    ),
+                  );
+                },
+                child: const Text('X')
+              );
+            }
+          ),
+        ),
+      ),
+    );
+
+    await tester.tap(find.text('X'));
+    await tester.pump(); // start animation
+    await tester.pump(const Duration(milliseconds: 750));
+
+    final Element actionTextBox = tester.element(find.text('ACTION'));
+    final Widget textWidget = actionTextBox.widget;
+    final DefaultTextStyle defaultTextStyle = DefaultTextStyle.of(actionTextBox);
+    if (textWidget is Text) {
+      TextStyle effectiveStyle = textWidget.style;
+      effectiveStyle = defaultTextStyle.style.merge(textWidget.style);
+      expect(effectiveStyle.color, Colors.lightBlue);
+    } else
+      expect(false, true);
+  });
+
   testWidgets('SnackBar button text alignment', (WidgetTester tester) async {
     await tester.pumpWidget(MaterialApp(
       home: MediaQuery(