Honor more of the Theme for CircleAvatar with backgroundColor (#12333)
This commit is contained in:
parent
f40d09e166
commit
21899ce62f
@ -5,9 +5,10 @@
|
|||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
|
|
||||||
|
import 'colors.dart';
|
||||||
import 'constants.dart';
|
import 'constants.dart';
|
||||||
import 'theme.dart';
|
import 'theme.dart';
|
||||||
import 'typography.dart';
|
import 'theme_data.dart';
|
||||||
|
|
||||||
// Examples can assume:
|
// Examples can assume:
|
||||||
// String userAvatarUrl;
|
// String userAvatarUrl;
|
||||||
@ -91,9 +92,19 @@ class CircleAvatar extends StatelessWidget {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final ThemeData theme = Theme.of(context);
|
final ThemeData theme = Theme.of(context);
|
||||||
final TextStyle textStyle = backgroundColor != null ?
|
TextStyle textStyle = theme.primaryTextTheme.title;
|
||||||
new Typography(platform: theme.platform).white.title :
|
if (foregroundColor != null) {
|
||||||
theme.primaryTextTheme.title;
|
textStyle = textStyle.copyWith(color: foregroundColor);
|
||||||
|
} else if (backgroundColor != null) {
|
||||||
|
switch (ThemeData.estimateBrightnessForColor(backgroundColor)) {
|
||||||
|
case Brightness.dark:
|
||||||
|
textStyle = textStyle.copyWith(color: Colors.white);
|
||||||
|
break;
|
||||||
|
case Brightness.light:
|
||||||
|
textStyle = textStyle.copyWith(color: Colors.black);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
return new AnimatedContainer(
|
return new AnimatedContainer(
|
||||||
width: radius * 2.0,
|
width: radius * 2.0,
|
||||||
height: radius * 2.0,
|
height: radius * 2.0,
|
||||||
|
@ -7,8 +7,8 @@ import 'package:flutter/rendering.dart';
|
|||||||
import 'package:flutter_test/flutter_test.dart';
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
testWidgets('CircleAvatar with background color', (WidgetTester tester) async {
|
testWidgets('CircleAvatar with dark background color', (WidgetTester tester) async {
|
||||||
final Color backgroundColor = Colors.blue.shade400;
|
final Color backgroundColor = Colors.blue.shade900;
|
||||||
await tester.pumpWidget(
|
await tester.pumpWidget(
|
||||||
wrap(
|
wrap(
|
||||||
child: new CircleAvatar(
|
child: new CircleAvatar(
|
||||||
@ -30,6 +30,29 @@ void main() {
|
|||||||
expect(paragraph.text.style.color, equals(Colors.white));
|
expect(paragraph.text.style.color, equals(Colors.white));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
testWidgets('CircleAvatar with light background color', (WidgetTester tester) async {
|
||||||
|
final Color backgroundColor = Colors.blue.shade100;
|
||||||
|
await tester.pumpWidget(
|
||||||
|
wrap(
|
||||||
|
child: new CircleAvatar(
|
||||||
|
backgroundColor: backgroundColor,
|
||||||
|
radius: 50.0,
|
||||||
|
child: const Text('Z'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
final RenderConstrainedBox box = tester.renderObject(find.byType(CircleAvatar));
|
||||||
|
expect(box.size.width, equals(100.0));
|
||||||
|
expect(box.size.height, equals(100.0));
|
||||||
|
final RenderDecoratedBox child = box.child;
|
||||||
|
final BoxDecoration decoration = child.decoration;
|
||||||
|
expect(decoration.color, equals(backgroundColor));
|
||||||
|
|
||||||
|
final RenderParagraph paragraph = tester.renderObject(find.text('Z'));
|
||||||
|
expect(paragraph.text.style.color, equals(Colors.black));
|
||||||
|
});
|
||||||
|
|
||||||
testWidgets('CircleAvatar with foreground color', (WidgetTester tester) async {
|
testWidgets('CircleAvatar with foreground color', (WidgetTester tester) async {
|
||||||
final Color foregroundColor = Colors.red.shade100;
|
final Color foregroundColor = Colors.red.shade100;
|
||||||
await tester.pumpWidget(
|
await tester.pumpWidget(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user