Skip to content

[web]: Flare animations throw unimplemented error #39352

@johnpryan

Description

@johnpryan

Flare animations don't work in Flutter for web apps. The two issues I see are that DDC seems to think that ImageShader from dart:uiis not a subclass ofShaderand_addPathWithMatrix` is not implemented.

  1. Casting to a Shader makes the exception go away but the analyzer shows an "unnecessary cast" warning. (see below)
  2. The app throws an UnimplementedError during rendering (see below)

Steps to Reproduce

  1. Clone https://github.com/2d-inc/Flare-Flutter
  2. go to example/simple project
  3. run flutter create --web . and flutter run -d chrome
  4. Go to flare_flutter/lib/flare.dart and cast ImageShader to Shader on line 973 and line 1035:
            ? ui.ImageShader(images[textureIndex], ui.TileMode.clamp,
                ui.TileMode.clamp, _identityMatrix) as Shader
          ? ui.ImageShader(
              image, ui.TileMode.clamp, ui.TileMode.clamp, _identityMatrix) as Shader
  1. observe UnimplmentedError thrown in console output

Logs


                    packages/flare_flutter/flare.dart:971:13: Error: A value of type 'ImageShader' can't be assigned to a variable of type 'Shader'.
                     - 'ImageShader' is from 'dart:ui'.
                     - 'Shader' is from 'dart:ui'.
                    Try changing the type of the left hand side, or casting the right hand side to 'Shader'.
                                ? ui.ImageShader(images[textureIndex], ui.TileMode.clamp,
                                ^
                    packages/flare_flutter/flare.dart:1033:11: Error: A value of type 'ImageShader' can't be assigned to a variable of type 'Shader'.
                     - 'ImageShader' is from 'dart:ui'.
                     - 'Shader' is from 'dart:ui'.
                    Try changing the type of the left hand side, or casting the right hand side to 'Shader'.
                              ? ui.ImageShader(
                              ^
[ +367 ms] ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
[   +7 ms] The following UnimplementedError was thrown during paint():
[        ] Cannot add path with transform matrix
[        ] User-created ancestor of the error-causing widget was:
[        ] Expanded org-dartlang-app:///packages/flare_example/main.dart:39:15
[        ] When the exception was thrown, this was the stack:
[        ] package:build_web_compilers/src/dev_compiler/dart_sdk.js 3992:11    throw_
[        ] package:build_web_compilers/src/dev_compiler/dart_sdk.js 129294:17  [_addPathWithMatrix]
[        ] package:build_web_compilers/src/dev_compiler/dart_sdk.js 129281:33  addPath
[        ] package:flare_flutter/flare.dart 219:17                             get path
[        ] package:flare_flutter/flare.dart 235:26                             draw
[        ] package:flare_flutter/flare.dart 733:18                             draw
[        ] package:flare_flutter/flare_actor.dart 397:15                       paintFlare
[        ] package:flare_flutter/flare_render_box.dart 226:7                   paint
[        ] package:flutter/src/rendering/object.dart 2193:7                    [_paintWithContext]
[        ] package:flutter/src/rendering/object.dart 184:12                    paintChild
[        ] package:flutter/src/rendering/box.dart 2501:14                      defaultPaint
[        ] package:flutter/src/rendering/flex.dart 948:7                       paint
[        ] package:flutter/src/rendering/object.dart 2193:7                    [_paintWithContext]
[        ] package:flutter/src/rendering/object.dart 184:12                    paintChild
[        ] package:flutter/src/rendering/shifted_box.dart 70:14                paint
[        ] package:flutter/src/rendering/object.dart 2193:7                    [_paintWithContext]
[        ] package:flutter/src/rendering/object.dart 184:12                    paintChild
[        ] package:flutter/src/rendering/box.dart 2501:14                      defaultPaint
[  +16 ms] package:flutter/src/rendering/custom_layout.dart 361:5              paint
[        ] package:flutter/src/rendering/object.dart 2193:7                    [_paintWithContext]
[        ] package:flutter/src/rendering/object.dart 184:12                    paintChild
[        ] package:flutter/src/rendering/proxy_box.dart 123:14                 paint
[        ] package:flutter/src/material/material.dart 550:11                   paint
[        ] package:flutter/src/rendering/object.dart 2193:7                    [_paintWithContext]
[        ] package:flutter/src/rendering/object.dart 184:12                    paintChild
[        ] package:flutter/src/rendering/proxy_box.dart 123:14                 paint
[        ] package:flutter/src/rendering/object.dart 384:12                    pushLayer
[        ] package:flutter/src/rendering/proxy_box.dart 1755:14                paint
[        ] package:flutter/src/rendering/object.dart 2193:7                    [_paintWithContext]
[        ] package:flutter/src/rendering/object.dart 184:12                    paintChild
[        ] package:flutter/src/rendering/proxy_box.dart 123:14                 paint
[        ] package:flutter/src/rendering/object.dart 2193:7                    [_paintWithContext]
[        ] package:flutter/src/rendering/object.dart 184:12                    paintChild
[        ] package:flutter/src/rendering/proxy_box.dart 123:14                 paint
[        ] package:flutter/src/rendering/object.dart 2193:7                    [_paintWithContext]
[        ] package:flutter/src/rendering/object.dart 135:10                    _repaintCompositedChild
[        ] package:flutter/src/rendering/object.dart 95:5                      repaintCompositedChild
[        ] package:flutter/src/rendering/object.dart 937:29                    flushPaint
[        ] package:flutter/src/rendering/binding.dart 343:19                   drawFrame
[        ] package:flutter/src/widgets/binding.dart 774:13                     drawFrame
[        ] package:flutter/src/rendering/binding.dart 280:5                    [_handlePersistentFrameCallback]
[        ] package:flutter/src/scheduler/binding.dart 1035:15                  [_invokeFrameCallback]
[        ] package:flutter/src/scheduler/binding.dart 977:9                    handleDrawFrame
[        ] package:flutter/src/scheduler/binding.dart 893:5                    [_handleDrawFrame]
[        ] package:build_web_compilers/src/dev_compiler/dart_sdk.js 153169:23  <fn>
[        ] The following RenderObject was being processed when the exception was fired: FlareActorRenderObject#5aae6:
[        ] creator: FlareActor ← Expanded ← Column ← Center ← _BodyBuilder ← MediaQuery ←
[        ] LayoutId-[<_ScaffoldSlot.body>] ← CustomMultiChildLayout ← AnimatedBuilder ← DefaultTextStyle ←
[        ] AnimatedDefaultTextStyle ← _InkFeatures-[GlobalKey#389cd ink renderer] ← ⋯
[        ] parentData: offset=Offset(0.0, 0.0); flex=1; fit=FlexFit.tight (can use size)
[        ] constraints: BoxConstraints(0.0<=w<=1200.0, h=1238.0)
[        ] size: Size(1200.0, 1238.0)
[        ] This RenderObject has no descendants.
[        ] ════════════════════════════════════════════════════════════════════════════════════════════════════
[        ] Another exception was thrown: UnimplementedError: Cannot add path with transform matrix
[        ] Another exception was thrown: UnimplementedError: Cannot add path with transform matrix
[   +9 ms] Another exception was thrown: UnimplementedError: Cannot add path with transform matrix

Metadata

Metadata

Assignees

Labels

c: renderingUI glitches reported at the engine/skia or impeller rendering levelplatform-webWeb applications specifically

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions