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:
Bruno Leroux 2024-02-07 01:28:04 +01:00 committed by GitHub
parent 9f8fe3f04c
commit 7f811fb444
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 16 additions and 15 deletions

View file

@ -410,7 +410,7 @@ class ThemeData with Diagnosticable {
scrollbarTheme ??= const ScrollbarThemeData();
visualDensity ??= VisualDensity.defaultDensityForPlatform(platform);
useMaterial3 ??= true;
final bool useInkSparkle = platform == TargetPlatform.android && !kIsWeb;
final bool useInkSparkle = platform == TargetPlatform.android && (!kIsWeb || isCanvasKit);
splashFactory ??= useMaterial3
? useInkSparkle ? InkSparkle.splashFactory : InkRipple.splashFactory
: InkSplash.splashFactory;

View file

@ -1514,7 +1514,7 @@ void main() {
matching: find.byType(InkWell),
));
if (debugDefaultTargetPlatformOverride! == TargetPlatform.android && !kIsWeb) {
if (debugDefaultTargetPlatformOverride! == TargetPlatform.android && (!kIsWeb || isCanvasKit)) {
expect(buttonInkWell.splashFactory, equals(InkSparkle.splashFactory));
} else {
expect(buttonInkWell.splashFactory, equals(InkRipple.splashFactory));

View file

@ -1649,7 +1649,7 @@ void main() {
matching: find.byType(InkWell),
));
if (debugDefaultTargetPlatformOverride! == TargetPlatform.android && !kIsWeb) {
if (debugDefaultTargetPlatformOverride! == TargetPlatform.android && (!kIsWeb || isCanvasKit)) {
expect(buttonInkWell.splashFactory, equals(InkSparkle.splashFactory));
} else {
expect(buttonInkWell.splashFactory, equals(InkRipple.splashFactory));

View file

@ -8,6 +8,7 @@
library;
import 'package:flutter/material.dart';
import 'package:flutter/src/foundation/capabilities.dart';
import 'package:flutter/src/foundation/constants.dart';
import 'package:flutter_test/flutter_test.dart';
@ -29,7 +30,7 @@ void main() {
await tester.pump();
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 {
@ -58,7 +59,7 @@ void main() {
// ink feature is disposed.
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 {
@ -81,7 +82,7 @@ void main() {
final MaterialInkController material = Material.of(tester.element(buttonFinder));
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 {
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 {
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 {
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 {
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 {
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 {
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.
);
}

View file

@ -1691,7 +1691,7 @@ void main() {
matching: find.byType(InkWell),
));
if (debugDefaultTargetPlatformOverride! == TargetPlatform.android && !kIsWeb) {
if (debugDefaultTargetPlatformOverride! == TargetPlatform.android && (!kIsWeb || isCanvasKit)) {
expect(buttonInkWell.splashFactory, equals(InkSparkle.splashFactory));
} else {
expect(buttonInkWell.splashFactory, equals(InkRipple.splashFactory));

View file

@ -1468,7 +1468,7 @@ void main() {
matching: find.byType(InkWell),
));
if (debugDefaultTargetPlatformOverride! == TargetPlatform.android && !kIsWeb) {
if (debugDefaultTargetPlatformOverride! == TargetPlatform.android && (!kIsWeb || isCanvasKit)) {
expect(buttonInkWell.splashFactory, equals(InkSparkle.splashFactory));
} else {
expect(buttonInkWell.splashFactory, equals(InkRipple.splashFactory));

View file

@ -409,7 +409,7 @@ void main() {
switch (debugDefaultTargetPlatformOverride!) {
case TargetPlatform.android:
if (kIsWeb) {
if (kIsWeb && !isCanvasKit) {
expect(theme.splashFactory, equals(InkRipple.splashFactory));
} else {
expect(theme.splashFactory, equals(InkSparkle.splashFactory));