@@ -34,7 +34,8 @@ const Duration _kExpand = Duration(milliseconds: 200);
34
34
/// to the [leading] and [trailing] properties of [ExpansionTile] .
35
35
///
36
36
/// {@tool dartpad}
37
- /// This example demonstrates different configurations of ExpansionTile.
37
+ /// This example demonstrates how the [ExpansionTile] icon's location and appearance
38
+ /// can be customized.
38
39
///
39
40
/// ** See code in examples/api/lib/material/expansion_tile/expansion_tile.0.dart **
40
41
/// {@end-tool}
@@ -216,7 +217,7 @@ class ExpansionTile extends StatefulWidget {
216
217
/// Used to override to the [ListTileThemeData.iconColor] .
217
218
///
218
219
/// If this property is null then [ExpansionTileThemeData.iconColor] is used. If that
219
- /// is also null then the value of [ListTileThemeData.iconColor ] is used.
220
+ /// is also null then the value of [ColorScheme.primary ] is used.
220
221
///
221
222
/// See also:
222
223
///
@@ -227,6 +228,15 @@ class ExpansionTile extends StatefulWidget {
227
228
/// The icon color of tile's expansion arrow icon when the sublist is collapsed.
228
229
///
229
230
/// Used to override to the [ListTileThemeData.iconColor] .
231
+ ///
232
+ /// If this property is null then [ExpansionTileThemeData.collapsedIconColor] is used. If that
233
+ /// is also null and [ThemeData.useMaterial3] is true, [ColorScheme.onSurface] is used. Otherwise,
234
+ /// defaults to [ThemeData.unselectedWidgetColor] color.
235
+ ///
236
+ /// See also:
237
+ ///
238
+ /// * [ExpansionTileTheme.of] , which returns the nearest [ExpansionTileTheme] 's
239
+ /// [ExpansionTileThemeData] .
230
240
final Color ? collapsedIconColor;
231
241
232
242
@@ -235,7 +245,8 @@ class ExpansionTile extends StatefulWidget {
235
245
/// Used to override to the [ListTileThemeData.textColor] .
236
246
///
237
247
/// If this property is null then [ExpansionTileThemeData.textColor] is used. If that
238
- /// is also null then the value of [ListTileThemeData.textColor] is used.
248
+ /// is also null then and [ThemeData.useMaterial3] is true, color of the [TextTheme.bodyLarge]
249
+ /// will be used for the [title] and [subtitle] . Otherwise, defaults to [ColorScheme.primary] color.
239
250
///
240
251
/// See also:
241
252
///
@@ -247,8 +258,10 @@ class ExpansionTile extends StatefulWidget {
247
258
///
248
259
/// Used to override to the [ListTileThemeData.textColor] .
249
260
///
250
- /// If this property is null then [ExpansionTileThemeData.collapsedTextColor] is used. If that
251
- /// is also null then the value of [ListTileThemeData.textColor] is used.
261
+ /// If this property is null then [ExpansionTileThemeData.collapsedTextColor] is used.
262
+ /// If that is also null and [ThemeData.useMaterial3] is true, color of the
263
+ /// [TextTheme.bodyLarge] will be used for the [title] and [subtitle] . Otherwise,
264
+ /// defaults to color of the [TextTheme.titleMedium] .
252
265
///
253
266
/// See also:
254
267
///
@@ -441,7 +454,9 @@ class _ExpansionTileState extends State<ExpansionTile> with SingleTickerProvider
441
454
void didChangeDependencies () {
442
455
final ThemeData theme = Theme .of (context);
443
456
final ExpansionTileThemeData expansionTileTheme = ExpansionTileTheme .of (context);
444
- final ColorScheme colorScheme = theme.colorScheme;
457
+ final ExpansionTileThemeData defaults = theme.useMaterial3
458
+ ? _ExpansionTileDefaultsM3 (context)
459
+ : _ExpansionTileDefaultsM2 (context);
445
460
_borderTween
446
461
..begin = widget.collapsedShape
447
462
?? expansionTileTheme.collapsedShape
@@ -458,13 +473,13 @@ class _ExpansionTileState extends State<ExpansionTile> with SingleTickerProvider
458
473
_headerColorTween
459
474
..begin = widget.collapsedTextColor
460
475
?? expansionTileTheme.collapsedTextColor
461
- ?? theme.textTheme.titleMedium ! .color
462
- ..end = widget.textColor ?? expansionTileTheme.textColor ?? colorScheme.primary ;
476
+ ?? defaults.collapsedTextColor
477
+ ..end = widget.textColor ?? expansionTileTheme.textColor ?? defaults.textColor ;
463
478
_iconColorTween
464
479
..begin = widget.collapsedIconColor
465
480
?? expansionTileTheme.collapsedIconColor
466
- ?? theme.unselectedWidgetColor
467
- ..end = widget.iconColor ?? expansionTileTheme.iconColor ?? colorScheme.primary ;
481
+ ?? defaults.collapsedIconColor
482
+ ..end = widget.iconColor ?? expansionTileTheme.iconColor ?? defaults.iconColor ;
468
483
_backgroundColorTween
469
484
..begin = widget.collapsedBackgroundColor ?? expansionTileTheme.collapsedBackgroundColor
470
485
..end = widget.backgroundColor ?? expansionTileTheme.backgroundColor;
@@ -498,3 +513,54 @@ class _ExpansionTileState extends State<ExpansionTile> with SingleTickerProvider
498
513
);
499
514
}
500
515
}
516
+
517
+ class _ExpansionTileDefaultsM2 extends ExpansionTileThemeData {
518
+ _ExpansionTileDefaultsM2 (this .context);
519
+
520
+ final BuildContext context;
521
+ late final ThemeData _theme = Theme .of (context);
522
+ late final ColorScheme _colorScheme = _theme.colorScheme;
523
+
524
+ @override
525
+ Color ? get textColor => _colorScheme.primary;
526
+
527
+ @override
528
+ Color ? get iconColor => _colorScheme.primary;
529
+
530
+ @override
531
+ Color ? get collapsedTextColor => _theme.textTheme.titleMedium! .color;
532
+
533
+ @override
534
+ Color ? get collapsedIconColor => _theme.unselectedWidgetColor;
535
+ }
536
+
537
+ // BEGIN GENERATED TOKEN PROPERTIES - ExpansionTile
538
+
539
+ // Do not edit by hand. The code between the "BEGIN GENERATED" and
540
+ // "END GENERATED" comments are generated from data in the Material
541
+ // Design token database by the script:
542
+ // dev/tools/gen_defaults/bin/gen_defaults.dart.
543
+
544
+ // Token database version: v0_152
545
+
546
+ class _ExpansionTileDefaultsM3 extends ExpansionTileThemeData {
547
+ _ExpansionTileDefaultsM3 (this .context);
548
+
549
+ final BuildContext context;
550
+ late final ThemeData _theme = Theme .of (context);
551
+ late final ColorScheme _colors = _theme.colorScheme;
552
+
553
+ @override
554
+ Color ? get textColor => Theme .of (context).textTheme.bodyLarge! .color;
555
+
556
+ @override
557
+ Color ? get iconColor => _colors.primary;
558
+
559
+ @override
560
+ Color ? get collapsedTextColor => Theme .of (context).textTheme.bodyLarge! .color;
561
+
562
+ @override
563
+ Color ? get collapsedIconColor => _colors.onSurface;
564
+ }
565
+
566
+ // END GENERATED TOKEN PROPERTIES - ExpansionTile
0 commit comments