Activate InkSparkle on CanvasKit (#138545)
## Description This PR activates the M3 `InkSparkle` splash animation on Android + CanvasKit. Before it `InkSparkle` was only activated on native Android. ## Related Issue Fixes https://github.com/flutter/flutter/issues/138487 ## Tests Updates several existing tests.
This commit is contained in:
parent
9f8fe3f04c
commit
7f811fb444
@ -410,7 +410,7 @@ class ThemeData with Diagnosticable {
|
|||||||
scrollbarTheme ??= const ScrollbarThemeData();
|
scrollbarTheme ??= const ScrollbarThemeData();
|
||||||
visualDensity ??= VisualDensity.defaultDensityForPlatform(platform);
|
visualDensity ??= VisualDensity.defaultDensityForPlatform(platform);
|
||||||
useMaterial3 ??= true;
|
useMaterial3 ??= true;
|
||||||
final bool useInkSparkle = platform == TargetPlatform.android && !kIsWeb;
|
final bool useInkSparkle = platform == TargetPlatform.android && (!kIsWeb || isCanvasKit);
|
||||||
splashFactory ??= useMaterial3
|
splashFactory ??= useMaterial3
|
||||||
? useInkSparkle ? InkSparkle.splashFactory : InkRipple.splashFactory
|
? useInkSparkle ? InkSparkle.splashFactory : InkRipple.splashFactory
|
||||||
: InkSplash.splashFactory;
|
: InkSplash.splashFactory;
|
||||||
|
@ -1514,7 +1514,7 @@ void main() {
|
|||||||
matching: find.byType(InkWell),
|
matching: find.byType(InkWell),
|
||||||
));
|
));
|
||||||
|
|
||||||
if (debugDefaultTargetPlatformOverride! == TargetPlatform.android && !kIsWeb) {
|
if (debugDefaultTargetPlatformOverride! == TargetPlatform.android && (!kIsWeb || isCanvasKit)) {
|
||||||
expect(buttonInkWell.splashFactory, equals(InkSparkle.splashFactory));
|
expect(buttonInkWell.splashFactory, equals(InkSparkle.splashFactory));
|
||||||
} else {
|
} else {
|
||||||
expect(buttonInkWell.splashFactory, equals(InkRipple.splashFactory));
|
expect(buttonInkWell.splashFactory, equals(InkRipple.splashFactory));
|
||||||
|
@ -1649,7 +1649,7 @@ void main() {
|
|||||||
matching: find.byType(InkWell),
|
matching: find.byType(InkWell),
|
||||||
));
|
));
|
||||||
|
|
||||||
if (debugDefaultTargetPlatformOverride! == TargetPlatform.android && !kIsWeb) {
|
if (debugDefaultTargetPlatformOverride! == TargetPlatform.android && (!kIsWeb || isCanvasKit)) {
|
||||||
expect(buttonInkWell.splashFactory, equals(InkSparkle.splashFactory));
|
expect(buttonInkWell.splashFactory, equals(InkSparkle.splashFactory));
|
||||||
} else {
|
} else {
|
||||||
expect(buttonInkWell.splashFactory, equals(InkRipple.splashFactory));
|
expect(buttonInkWell.splashFactory, equals(InkRipple.splashFactory));
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
library;
|
library;
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter/src/foundation/capabilities.dart';
|
||||||
import 'package:flutter/src/foundation/constants.dart';
|
import 'package:flutter/src/foundation/constants.dart';
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
|
|
||||||
@ -29,7 +30,7 @@ void main() {
|
|||||||
await tester.pump();
|
await tester.pump();
|
||||||
await tester.pumpAndSettle();
|
await tester.pumpAndSettle();
|
||||||
},
|
},
|
||||||
skip: kIsWeb, // [intended] shaders are not yet supported for web.
|
skip: kIsWeb && !isCanvasKit, // [intended] shaders are not supported for the HTML renderer.
|
||||||
);
|
);
|
||||||
|
|
||||||
testWidgets('InkSparkle default splashFactory paints with drawRect when bounded', (WidgetTester tester) async {
|
testWidgets('InkSparkle default splashFactory paints with drawRect when bounded', (WidgetTester tester) async {
|
||||||
@ -58,7 +59,7 @@ void main() {
|
|||||||
// ink feature is disposed.
|
// ink feature is disposed.
|
||||||
expect((material as dynamic).debugInkFeatures, isEmpty);
|
expect((material as dynamic).debugInkFeatures, isEmpty);
|
||||||
},
|
},
|
||||||
skip: kIsWeb, // [intended] shaders are not yet supported for web.
|
skip: kIsWeb && !isCanvasKit, // [intended] shaders are not supported for the HTML renderer.
|
||||||
);
|
);
|
||||||
|
|
||||||
testWidgets('InkSparkle default splashFactory paints with drawPaint when unbounded', (WidgetTester tester) async {
|
testWidgets('InkSparkle default splashFactory paints with drawPaint when unbounded', (WidgetTester tester) async {
|
||||||
@ -81,7 +82,7 @@ void main() {
|
|||||||
final MaterialInkController material = Material.of(tester.element(buttonFinder));
|
final MaterialInkController material = Material.of(tester.element(buttonFinder));
|
||||||
expect(material, paintsExactlyCountTimes(#drawPaint, 1));
|
expect(material, paintsExactlyCountTimes(#drawPaint, 1));
|
||||||
},
|
},
|
||||||
skip: kIsWeb, // [intended] shaders are not yet supported for web.
|
skip: kIsWeb && !isCanvasKit, // [intended] shaders are not supported for the HTML renderer.
|
||||||
);
|
);
|
||||||
|
|
||||||
/////////////
|
/////////////
|
||||||
@ -91,37 +92,37 @@ void main() {
|
|||||||
testWidgets('Material2 - InkSparkle renders with sparkles when top left of button is tapped', (WidgetTester tester) async {
|
testWidgets('Material2 - InkSparkle renders with sparkles when top left of button is tapped', (WidgetTester tester) async {
|
||||||
await _runTest(tester, 'top_left', 0.2);
|
await _runTest(tester, 'top_left', 0.2);
|
||||||
},
|
},
|
||||||
skip: kIsWeb, // [intended] shaders are not yet supported for web.
|
skip: kIsWeb && !isCanvasKit, // [intended] shaders are not supported for the HTML renderer.
|
||||||
);
|
);
|
||||||
|
|
||||||
testWidgets('Material3 - InkSparkle renders with sparkles when top left of button is tapped', (WidgetTester tester) async {
|
testWidgets('Material3 - InkSparkle renders with sparkles when top left of button is tapped', (WidgetTester tester) async {
|
||||||
await _runM3Test(tester, 'top_left', 0.2);
|
await _runM3Test(tester, 'top_left', 0.2);
|
||||||
},
|
},
|
||||||
skip: kIsWeb, // [intended] shaders are not yet supported for web.
|
skip: kIsWeb && !isCanvasKit, // [intended] shaders are not supported for the HTML renderer.
|
||||||
);
|
);
|
||||||
|
|
||||||
testWidgets('Material2 - InkSparkle renders with sparkles when center of button is tapped', (WidgetTester tester) async {
|
testWidgets('Material2 - InkSparkle renders with sparkles when center of button is tapped', (WidgetTester tester) async {
|
||||||
await _runTest(tester, 'center', 0.5);
|
await _runTest(tester, 'center', 0.5);
|
||||||
},
|
},
|
||||||
skip: kIsWeb, // [intended] shaders are not yet supported for web.
|
skip: kIsWeb && !isCanvasKit, // [intended] shaders are not supported for the HTML renderer.
|
||||||
);
|
);
|
||||||
|
|
||||||
testWidgets('Material3 - InkSparkle renders with sparkles when center of button is tapped', (WidgetTester tester) async {
|
testWidgets('Material3 - InkSparkle renders with sparkles when center of button is tapped', (WidgetTester tester) async {
|
||||||
await _runM3Test(tester, 'center', 0.5);
|
await _runM3Test(tester, 'center', 0.5);
|
||||||
},
|
},
|
||||||
skip: kIsWeb, // [intended] shaders are not yet supported for web.
|
skip: kIsWeb && !isCanvasKit, // [intended] shaders are not supported for the HTML renderer.
|
||||||
);
|
);
|
||||||
|
|
||||||
testWidgets('Material2 - InkSparkle renders with sparkles when bottom right of button is tapped', (WidgetTester tester) async {
|
testWidgets('Material2 - InkSparkle renders with sparkles when bottom right of button is tapped', (WidgetTester tester) async {
|
||||||
await _runTest(tester, 'bottom_right', 0.8);
|
await _runTest(tester, 'bottom_right', 0.8);
|
||||||
},
|
},
|
||||||
skip: kIsWeb, // [intended] shaders are not yet supported for web.
|
skip: kIsWeb && !isCanvasKit, // [intended] shaders are not supported for the HTML renderer.
|
||||||
);
|
);
|
||||||
|
|
||||||
testWidgets('Material3 - InkSparkle renders with sparkles when bottom right of button is tapped', (WidgetTester tester) async {
|
testWidgets('Material3 - InkSparkle renders with sparkles when bottom right of button is tapped', (WidgetTester tester) async {
|
||||||
await _runM3Test(tester, 'bottom_right', 0.8);
|
await _runM3Test(tester, 'bottom_right', 0.8);
|
||||||
},
|
},
|
||||||
skip: kIsWeb, // [intended] shaders are not yet supported for web.
|
skip: kIsWeb && !isCanvasKit, // [intended] shaders are not supported for the HTML renderer.
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1691,7 +1691,7 @@ void main() {
|
|||||||
matching: find.byType(InkWell),
|
matching: find.byType(InkWell),
|
||||||
));
|
));
|
||||||
|
|
||||||
if (debugDefaultTargetPlatformOverride! == TargetPlatform.android && !kIsWeb) {
|
if (debugDefaultTargetPlatformOverride! == TargetPlatform.android && (!kIsWeb || isCanvasKit)) {
|
||||||
expect(buttonInkWell.splashFactory, equals(InkSparkle.splashFactory));
|
expect(buttonInkWell.splashFactory, equals(InkSparkle.splashFactory));
|
||||||
} else {
|
} else {
|
||||||
expect(buttonInkWell.splashFactory, equals(InkRipple.splashFactory));
|
expect(buttonInkWell.splashFactory, equals(InkRipple.splashFactory));
|
||||||
|
@ -1468,7 +1468,7 @@ void main() {
|
|||||||
matching: find.byType(InkWell),
|
matching: find.byType(InkWell),
|
||||||
));
|
));
|
||||||
|
|
||||||
if (debugDefaultTargetPlatformOverride! == TargetPlatform.android && !kIsWeb) {
|
if (debugDefaultTargetPlatformOverride! == TargetPlatform.android && (!kIsWeb || isCanvasKit)) {
|
||||||
expect(buttonInkWell.splashFactory, equals(InkSparkle.splashFactory));
|
expect(buttonInkWell.splashFactory, equals(InkSparkle.splashFactory));
|
||||||
} else {
|
} else {
|
||||||
expect(buttonInkWell.splashFactory, equals(InkRipple.splashFactory));
|
expect(buttonInkWell.splashFactory, equals(InkRipple.splashFactory));
|
||||||
|
@ -409,7 +409,7 @@ void main() {
|
|||||||
|
|
||||||
switch (debugDefaultTargetPlatformOverride!) {
|
switch (debugDefaultTargetPlatformOverride!) {
|
||||||
case TargetPlatform.android:
|
case TargetPlatform.android:
|
||||||
if (kIsWeb) {
|
if (kIsWeb && !isCanvasKit) {
|
||||||
expect(theme.splashFactory, equals(InkRipple.splashFactory));
|
expect(theme.splashFactory, equals(InkRipple.splashFactory));
|
||||||
} else {
|
} else {
|
||||||
expect(theme.splashFactory, equals(InkSparkle.splashFactory));
|
expect(theme.splashFactory, equals(InkSparkle.splashFactory));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user