Fix lerp in textTheme to allow for null parameters (#26764)

There's no reason to disallow this as TextStyle can handle lerping between null parameters just fine. This change also adds tests to ensure the correct behavior
This commit is contained in:
rami-a 2019-01-18 14:28:30 -05:00 committed by GitHub
parent 07c592d901
commit 1b0f2015a2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 67 additions and 17 deletions

View file

@ -455,27 +455,23 @@ class TextTheme extends Diagnosticable {
/// Linearly interpolate between two text themes.
///
/// The arguments must not be null.
///
/// {@macro flutter.material.themeData.lerp}
static TextTheme lerp(TextTheme a, TextTheme b, double t) {
assert(a != null);
assert(b != null);
assert(t != null);
return TextTheme(
display4: TextStyle.lerp(a.display4, b.display4, t),
display3: TextStyle.lerp(a.display3, b.display3, t),
display2: TextStyle.lerp(a.display2, b.display2, t),
display1: TextStyle.lerp(a.display1, b.display1, t),
headline: TextStyle.lerp(a.headline, b.headline, t),
title: TextStyle.lerp(a.title, b.title, t),
subhead: TextStyle.lerp(a.subhead, b.subhead, t),
body2: TextStyle.lerp(a.body2, b.body2, t),
body1: TextStyle.lerp(a.body1, b.body1, t),
caption: TextStyle.lerp(a.caption, b.caption, t),
button: TextStyle.lerp(a.button, b.button, t),
subtitle: TextStyle.lerp(a.subtitle, b.subtitle, t),
overline: TextStyle.lerp(a.overline, b.overline, t),
display4: TextStyle.lerp(a?.display4, b?.display4, t),
display3: TextStyle.lerp(a?.display3, b?.display3, t),
display2: TextStyle.lerp(a?.display2, b?.display2, t),
display1: TextStyle.lerp(a?.display1, b?.display1, t),
headline: TextStyle.lerp(a?.headline, b?.headline, t),
title: TextStyle.lerp(a?.title, b?.title, t),
subhead: TextStyle.lerp(a?.subhead, b?.subhead, t),
body2: TextStyle.lerp(a?.body2, b?.body2, t),
body1: TextStyle.lerp(a?.body1, b?.body1, t),
caption: TextStyle.lerp(a?.caption, b?.caption, t),
button: TextStyle.lerp(a?.button, b?.button, t),
subtitle: TextStyle.lerp(a?.subtitle, b?.subtitle, t),
overline: TextStyle.lerp(a?.overline, b?.overline, t),
);
}

View file

@ -152,4 +152,58 @@ void main() {
expect(sizeTheme.overline.fontSize, baseTheme.overline.fontSize * 2.0 + 5.0);
});
test('TextTheme lerp with second parameter null', () {
final TextTheme theme = Typography().black;
final TextTheme lerped = TextTheme.lerp(theme, null, 0.25);
expect(lerped.display4, TextStyle.lerp(theme.display4, null, 0.25));
expect(lerped.display3, TextStyle.lerp(theme.display3, null, 0.25));
expect(lerped.display2, TextStyle.lerp(theme.display2, null, 0.25));
expect(lerped.display1, TextStyle.lerp(theme.display1, null, 0.25));
expect(lerped.caption, TextStyle.lerp(theme.caption, null, 0.25));
expect(lerped.headline, TextStyle.lerp(theme.headline, null, 0.25));
expect(lerped.title, TextStyle.lerp(theme.title, null, 0.25));
expect(lerped.subhead, TextStyle.lerp(theme.subhead, null, 0.25));
expect(lerped.body2, TextStyle.lerp(theme.body2, null, 0.25));
expect(lerped.body1, TextStyle.lerp(theme.body1, null, 0.25));
expect(lerped.button, TextStyle.lerp(theme.button, null, 0.25));
expect(lerped.subtitle, TextStyle.lerp(theme.subtitle, null, 0.25));
expect(lerped.overline, TextStyle.lerp(theme.overline, null, 0.25));
});
test('TextTheme lerp with first parameter null', () {
final TextTheme theme = Typography().black;
final TextTheme lerped = TextTheme.lerp(null, theme, 0.25);
expect(lerped.display4, TextStyle.lerp(null, theme.display4, 0.25));
expect(lerped.display3, TextStyle.lerp(null, theme.display3, 0.25));
expect(lerped.display2, TextStyle.lerp(null, theme.display2, 0.25));
expect(lerped.display1, TextStyle.lerp(null, theme.display1, 0.25));
expect(lerped.caption, TextStyle.lerp(null, theme.caption, 0.25));
expect(lerped.headline, TextStyle.lerp(null, theme.headline, 0.25));
expect(lerped.title, TextStyle.lerp(null, theme.title, 0.25));
expect(lerped.subhead, TextStyle.lerp(null, theme.subhead, 0.25));
expect(lerped.body2, TextStyle.lerp(null, theme.body2, 0.25));
expect(lerped.body1, TextStyle.lerp(null, theme.body1, 0.25));
expect(lerped.button, TextStyle.lerp(null, theme.button, 0.25));
expect(lerped.subtitle, TextStyle.lerp(null, theme.subtitle, 0.25));
expect(lerped.overline, TextStyle.lerp(null, theme.overline, 0.25));
});
test('TextTheme lerp with null parameters', () {
final TextTheme lerped = TextTheme.lerp(null, null, 0.25);
expect(lerped.display4, null);
expect(lerped.display3, null);
expect(lerped.display2, null);
expect(lerped.display1, null);
expect(lerped.caption, null);
expect(lerped.headline, null);
expect(lerped.title, null);
expect(lerped.subhead, null);
expect(lerped.body2, null);
expect(lerped.body1, null);
expect(lerped.button, null);
expect(lerped.subtitle, null);
expect(lerped.overline, null);
});
}