diff --git a/lib/ui/painting/image_filter.cc b/lib/ui/painting/image_filter.cc index 9d1b7adcd09ce..90105f4054ed1 100644 --- a/lib/ui/painting/image_filter.cc +++ b/lib/ui/painting/image_filter.cc @@ -74,8 +74,11 @@ void ImageFilter::initMatrix(const tonic::Float64List& matrix4, void ImageFilter::initColorFilter(ColorFilter* colorFilter) { FML_DCHECK(colorFilter); - filter_ = - std::make_shared(colorFilter->dl_filter()); + auto dl_filter = colorFilter->dl_filter(); + // Skia may return nullptr if the colorfilter is a no-op. + if (dl_filter) { + filter_ = std::make_shared(dl_filter); + } } void ImageFilter::initComposeFilter(ImageFilter* outer, ImageFilter* inner) { diff --git a/testing/dart/canvas_test.dart b/testing/dart/canvas_test.dart index 7505012fbc350..5870692166767 100644 --- a/testing/dart/canvas_test.dart +++ b/testing/dart/canvas_test.dart @@ -110,6 +110,9 @@ void testNoCrashes() { testCanvas((Canvas canvas) => canvas.drawVertices(Vertices(VertexMode.triangles, [], indices: []), BlendMode.screen, paint)); testCanvas((Canvas canvas) => canvas.drawVertices(Vertices(VertexMode.triangles, [])..dispose(), BlendMode.screen, paint)); + + // Regression test for https://github.com/flutter/flutter/issues/115143 + testCanvas((Canvas canvas) => canvas.drawPaint(Paint()..imageFilter = const ColorFilter.mode(Color(0x00000000), BlendMode.xor))); }); }