Fix SliverAppBar.large
and SliverAppBar.medium
do not use foregroundColor
(#118322)
This commit is contained in:
parent
f8628b5cb1
commit
44f540338b
@ -1652,6 +1652,7 @@ class SliverAppBar extends StatefulWidget {
|
||||
actions: actions,
|
||||
flexibleSpace: flexibleSpace ?? _ScrollUnderFlexibleSpace(
|
||||
title: title,
|
||||
foregroundColor: foregroundColor,
|
||||
variant: _ScrollUnderFlexibleVariant.medium,
|
||||
centerCollapsedTitle: centerTitle,
|
||||
primary: primary,
|
||||
@ -1753,6 +1754,7 @@ class SliverAppBar extends StatefulWidget {
|
||||
actions: actions,
|
||||
flexibleSpace: flexibleSpace ?? _ScrollUnderFlexibleSpace(
|
||||
title: title,
|
||||
foregroundColor: foregroundColor,
|
||||
variant: _ScrollUnderFlexibleVariant.large,
|
||||
centerCollapsedTitle: centerTitle,
|
||||
primary: primary,
|
||||
@ -2227,12 +2229,14 @@ enum _ScrollUnderFlexibleVariant { medium, large }
|
||||
class _ScrollUnderFlexibleSpace extends StatelessWidget {
|
||||
const _ScrollUnderFlexibleSpace({
|
||||
this.title,
|
||||
this.foregroundColor,
|
||||
required this.variant,
|
||||
this.centerCollapsedTitle,
|
||||
this.primary = true,
|
||||
});
|
||||
|
||||
final Widget? title;
|
||||
final Color? foregroundColor;
|
||||
final _ScrollUnderFlexibleVariant variant;
|
||||
final bool? centerCollapsedTitle;
|
||||
final bool primary;
|
||||
@ -2240,6 +2244,7 @@ class _ScrollUnderFlexibleSpace extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
late final ThemeData theme = Theme.of(context);
|
||||
late final AppBarTheme appBarTheme = AppBarTheme.of(context);
|
||||
final FlexibleSpaceBarSettings settings = context.dependOnInheritedWidgetOfExactType<FlexibleSpaceBarSettings>()!;
|
||||
final double topPadding = primary ? MediaQuery.viewPaddingOf(context).top : 0;
|
||||
final double collapsedHeight = settings.minExtent - topPadding;
|
||||
@ -2259,13 +2264,13 @@ class _ScrollUnderFlexibleSpace extends StatelessWidget {
|
||||
if (title != null) {
|
||||
collapsedTitle = config.collapsedTextStyle != null
|
||||
? DefaultTextStyle(
|
||||
style: config.collapsedTextStyle!,
|
||||
style: config.collapsedTextStyle!.copyWith(color: foregroundColor ?? appBarTheme.foregroundColor),
|
||||
child: title!,
|
||||
)
|
||||
: title;
|
||||
expandedTitle = config.expandedTextStyle != null
|
||||
? DefaultTextStyle(
|
||||
style: config.expandedTextStyle!,
|
||||
style: config.expandedTextStyle!.copyWith(color: foregroundColor ?? appBarTheme.foregroundColor),
|
||||
child: title!,
|
||||
)
|
||||
: title;
|
||||
@ -2286,9 +2291,7 @@ class _ScrollUnderFlexibleSpace extends StatelessWidget {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
centerTitle = centerCollapsedTitle
|
||||
?? theme.appBarTheme.centerTitle
|
||||
?? platformCenter();
|
||||
centerTitle = centerCollapsedTitle ?? appBarTheme.centerTitle ?? platformCenter();
|
||||
}
|
||||
|
||||
final bool isCollapsed = settings.isScrolledUnder ?? false;
|
||||
@ -2307,7 +2310,7 @@ class _ScrollUnderFlexibleSpace extends StatelessWidget {
|
||||
alignment: centerTitle
|
||||
? Alignment.center
|
||||
: AlignmentDirectional.centerStart,
|
||||
child: collapsedTitle
|
||||
child: collapsedTitle,
|
||||
),
|
||||
),
|
||||
),
|
||||
|
@ -574,6 +574,78 @@ void main() {
|
||||
expect(navToolbar.middleSpacing, 40);
|
||||
});
|
||||
|
||||
testWidgets("SliverAppBar.medium's title uses AppBarTheme.foregroundColor", (WidgetTester tester) async {
|
||||
const Color foregroundColor = Color(0xff00ff00);
|
||||
await tester.pumpWidget(MaterialApp(
|
||||
theme: ThemeData(appBarTheme: const AppBarTheme(foregroundColor: foregroundColor)),
|
||||
home: CustomScrollView(
|
||||
slivers: <Widget>[
|
||||
SliverAppBar.medium(
|
||||
title: const Text('Medium Title'),
|
||||
),
|
||||
],
|
||||
),
|
||||
));
|
||||
|
||||
final RichText text = tester.firstWidget(find.byType(RichText));
|
||||
expect(text.text.style!.color, foregroundColor);
|
||||
});
|
||||
|
||||
testWidgets(
|
||||
"SliverAppBar.medium's foregroundColor takes priority over AppBarTheme.foregroundColor", (WidgetTester tester) async {
|
||||
const Color foregroundColor = Color(0xff00ff00);
|
||||
await tester.pumpWidget(MaterialApp(
|
||||
theme: ThemeData(appBarTheme: const AppBarTheme(foregroundColor: Color(0xffff0000))),
|
||||
home: CustomScrollView(
|
||||
slivers: <Widget>[
|
||||
SliverAppBar.medium(
|
||||
foregroundColor: foregroundColor,
|
||||
title: const Text('Medium Title'),
|
||||
),
|
||||
],
|
||||
),
|
||||
));
|
||||
|
||||
final RichText text = tester.firstWidget(find.byType(RichText));
|
||||
expect(text.text.style!.color, foregroundColor);
|
||||
});
|
||||
|
||||
testWidgets("SliverAppBar.large's title uses AppBarTheme.foregroundColor", (WidgetTester tester) async {
|
||||
const Color foregroundColor = Color(0xff00ff00);
|
||||
await tester.pumpWidget(MaterialApp(
|
||||
theme: ThemeData(appBarTheme: const AppBarTheme(foregroundColor: foregroundColor)),
|
||||
home: CustomScrollView(
|
||||
slivers: <Widget>[
|
||||
SliverAppBar.large(
|
||||
title: const Text('Large Title'),
|
||||
),
|
||||
],
|
||||
),
|
||||
));
|
||||
|
||||
final RichText text = tester.firstWidget(find.byType(RichText));
|
||||
expect(text.text.style!.color, foregroundColor);
|
||||
});
|
||||
|
||||
testWidgets(
|
||||
"SliverAppBar.large's foregroundColor takes priority over AppBarTheme.foregroundColor", (WidgetTester tester) async {
|
||||
const Color foregroundColor = Color(0xff00ff00);
|
||||
await tester.pumpWidget(MaterialApp(
|
||||
theme: ThemeData(appBarTheme: const AppBarTheme(foregroundColor: Color(0xffff0000))),
|
||||
home: CustomScrollView(
|
||||
slivers: <Widget>[
|
||||
SliverAppBar.large(
|
||||
foregroundColor: foregroundColor,
|
||||
title: const Text('Large Title'),
|
||||
),
|
||||
],
|
||||
),
|
||||
));
|
||||
|
||||
final RichText text = tester.firstWidget(find.byType(RichText));
|
||||
expect(text.text.style!.color, foregroundColor);
|
||||
});
|
||||
|
||||
testWidgets('Default AppBarTheme debugFillProperties', (WidgetTester tester) async {
|
||||
final DiagnosticPropertiesBuilder builder = DiagnosticPropertiesBuilder();
|
||||
const AppBarTheme().debugFillProperties(builder);
|
||||
|
Loading…
x
Reference in New Issue
Block a user