Unverified Commit 02b2c2cd authored by Taha Tesser's avatar Taha Tesser Committed by GitHub

Fix `IconTheme` is not inherited when `Icon` is provided to `ListTile.title`...

Fix `IconTheme` is not inherited when `Icon` is provided to `ListTile.title` and `ListTile.subtitle` (#100757)
parent 89cc0200
......@@ -694,11 +694,10 @@ class ListTile extends StatelessWidget {
assert(debugCheckHasMaterial(context));
final ThemeData theme = Theme.of(context);
final ListTileThemeData tileTheme = ListTileTheme.of(context);
final IconThemeData iconThemeData = IconThemeData(color: _iconColor(theme, tileTheme));
IconThemeData? iconThemeData;
TextStyle? leadingAndTrailingTextStyle;
if (leading != null || trailing != null) {
iconThemeData = IconThemeData(color: _iconColor(theme, tileTheme));
leadingAndTrailingTextStyle = _trailingAndLeadingTextStyle(theme, tileTheme);
}
......@@ -707,10 +706,7 @@ class ListTile extends StatelessWidget {
leadingIcon = AnimatedDefaultTextStyle(
style: leadingAndTrailingTextStyle!,
duration: kThemeChangeDuration,
child: IconTheme.merge(
data: iconThemeData!,
child: leading!,
),
);
}
......@@ -737,10 +733,7 @@ class ListTile extends StatelessWidget {
trailingIcon = AnimatedDefaultTextStyle(
style: leadingAndTrailingTextStyle!,
duration: kThemeChangeDuration,
child: IconTheme.merge(
data: iconThemeData!,
child: trailing!,
),
);
}
......@@ -782,6 +775,8 @@ class ListTile extends StatelessWidget {
top: false,
bottom: false,
minimum: resolvedContentPadding,
child: IconTheme.merge(
data: iconThemeData,
child: _ListTile(
leading: leadingIcon,
title: titleText,
......@@ -800,6 +795,7 @@ class ListTile extends StatelessWidget {
),
),
),
),
);
}
}
......
......@@ -2085,6 +2085,8 @@ void main() {
const ColorScheme lightColorScheme = ColorScheme.light();
const ColorScheme darkColorScheme = ColorScheme.dark();
final Key leadingKey = UniqueKey();
final Key titleKey = UniqueKey();
final Key subtitleKey = UniqueKey();
final Key trailingKey = UniqueKey();
Widget buildFrame({ required Brightness brightness, required bool selected }) {
......@@ -2098,6 +2100,8 @@ void main() {
child: ListTile(
selected: selected,
leading: TestIcon(key: leadingKey),
title: TestIcon(key: titleKey),
subtitle: TestIcon(key: subtitleKey),
trailing: TestIcon(key: trailingKey),
),
),
......@@ -2109,21 +2113,29 @@ void main() {
await tester.pumpWidget(buildFrame(brightness: Brightness.light, selected: true));
expect(iconColor(leadingKey), lightColorScheme.primary);
expect(iconColor(titleKey), lightColorScheme.primary);
expect(iconColor(subtitleKey), lightColorScheme.primary);
expect(iconColor(trailingKey), lightColorScheme.primary);
await tester.pumpWidget(buildFrame(brightness: Brightness.light, selected: false));
expect(iconColor(leadingKey), Colors.black45);
expect(iconColor(titleKey), Colors.black45);
expect(iconColor(subtitleKey), Colors.black45);
expect(iconColor(trailingKey), Colors.black45);
await tester.pumpWidget(buildFrame(brightness: Brightness.dark, selected: true));
await tester.pumpAndSettle(); // Animated theme change
expect(iconColor(leadingKey), darkColorScheme.primary);
expect(iconColor(titleKey), darkColorScheme.primary);
expect(iconColor(subtitleKey), darkColorScheme.primary);
expect(iconColor(trailingKey), darkColorScheme.primary);
// For this configuration, ListTile defers to the default IconTheme.
// The default dark theme's IconTheme has color:white
await tester.pumpWidget(buildFrame(brightness: Brightness.dark, selected: false));
expect(iconColor(leadingKey), Colors.white);
expect(iconColor(titleKey), Colors.white);
expect(iconColor(subtitleKey), Colors.white);
expect(iconColor(trailingKey), Colors.white);
});
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment