Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

The getter 'iterator' was called on null #40

Closed
ricsmania opened this issue Feb 4, 2019 · 6 comments
Closed

The getter 'iterator' was called on null #40

ricsmania opened this issue Feb 4, 2019 · 6 comments

Comments

@ricsmania
Copy link
Contributor

ricsmania commented Feb 4, 2019

When creating a FlareActor with one specific animation I get this error: The getter 'iterator' was called on null.

This is the Flare file that causes the problem: https://www.2dimensions.com/a/uxteam/files/flare/progress_circle_v2

And this is the code, it's very simple:

import 'package:flare_flutter/flare_actor.dart';
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: Container(
      decoration: BoxDecoration(color: Colors.purple),
      child: Container(
        height: 300,
        child: FlareActor(
          "assets/progress_circle.flr",
          alignment: Alignment.center,
          fit: BoxFit.contain,
          animation: "progress",
        ),
      ),
    ));
  }
}

This is the full error stack:

Initializing gradle...                                              1,2s
Resolving dependencies...                                           7,1s
Running Gradle task 'assembleDebug'...
Running Gradle task 'assembleDebug'... Done                        14,3s
Built build\app\outputs\apk\debug\app-debug.apk.
Installing build\app\outputs\apk\app.apk...                         2,5s
D/EGL_emulation( 7074): eglCreateContext: 0xb20b8e40: maj 3 min 0 rcv 3
D/EGL_emulation( 7074): eglMakeCurrent: 0xb20b8e40: ver 3 0 (tinfo 0x975ba5b0)
I/Choreographer( 7074): Skipped 34 frames!  The application may be doing too much work on its main thread.
D/EGL_emulation( 7074): eglMakeCurrent: 0xaa805900: ver 3 0 (tinfo 0xaa803880)
I/flutter ( 7074): ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
I/flutter ( 7074): The following NoSuchMethodError was thrown during paint():
I/flutter ( 7074): The getter 'iterator' was called on null.
I/flutter ( 7074): Receiver: null
I/flutter ( 7074): Tried calling: iterator
I/flutter ( 7074):
I/flutter ( 7074): When the exception was thrown, this was the stack:
I/flutter ( 7074): #0      Object.noSuchMethod (dart:core/runtime/libobject_patch.dart:50:5)
I/flutter ( 7074): #1      FlutterActorShape.path (package:flare_flutter/flare.dart:61:28)
I/flutter ( 7074): #2      FlutterActorShape.draw (package:flare_flutter/flare.dart:108:26)
I/flutter ( 7074): #3      FlutterActorArtboard.draw (package:flare_flutter/flare.dart:529:18)
I/flutter ( 7074): #4      FlareActorRenderObject.paint (package:flare_flutter/flare_actor.dart:438:17)
I/flutter ( 7074): #5      RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2094:7)
I/flutter ( 7074): #6      PaintingContext.paintChild (package:flutter/src/rendering/object.dart:173:13)
I/flutter ( 7074): #7      _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:122:15)
I/flutter ( 7074): #8      RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2094:7)
I/flutter ( 7074): #9      PaintingContext.paintChild (package:flutter/src/rendering/object.dart:173:13)
I/flutter ( 7074): #10     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:122:15)
I/flutter ( 7074): #11     RenderDecoratedBox.paint (package:flutter/src/rendering/proxy_box.dart:1980:11)
I/flutter ( 7074): #12     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2094:7)
I/flutter ( 7074): #13     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:173:13)
I/flutter ( 7074): #14     _RenderCustomMultiChildLayoutBox&RenderBox&ContainerRenderObjectMixin&RenderBoxContainerDefaultsMixin.defaultPaint (package:flutter/src/rendering/box.dart:2273:15)
I/flutter ( 7074): #15     RenderCustomMultiChildLayoutBox.paint (package:flutter/src/rendering/custom_layout.dart:361:5)
I/flutter ( 7074): #16     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2094:7)
I/flutter ( 7074): #17     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:173:13)
I/flutter ( 7074): #18     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:122:15)
I/flutter ( 7074): #19     _RenderInkFeatures.paint (package:flutter/src/material/material.dart:491:11)
I/flutter ( 7074): #20     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2094:7)
I/flutter ( 7074): #21     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:173:13)
I/flutter ( 7074): #22     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:122:15)
I/flutter ( 7074): #23     RenderPhysicalModel.paint.<anonymous closure> (package:flutter/src/rendering/proxy_box.dart:1730:88)
I/flutter ( 7074): #24     ClipContext._clipAndPaint (package:flutter/src/painting/clip.dart:29:12)
I/flutter ( 7074): #25     ClipContext.clipRRectAndPaint (package:flutter/src/painting/clip.dart:49:5)
I/flutter ( 7074): #26     RenderPhysicalModel.paint (package:flutter/src/rendering/proxy_box.dart:1730:17)
I/flutter ( 7074): #27     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2094:7)
I/flutter ( 7074): #28     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:173:13)
I/flutter ( 7074): #29     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:122:15)
I/flutter ( 7074): #30     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2094:7)
I/flutter ( 7074): #31     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:173:13)
I/flutter ( 7074): #32     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:122:15)
I/flutter ( 7074): #33     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2094:7)
I/flutter ( 7074): #34     PaintingContext._repaintCompositedChild (package:flutter/src/rendering/object.dart:128:11)
I/flutter ( 7074): #35     PaintingContext.repaintCompositedChild (package:flutter/src/rendering/object.dart:96:5)
I/flutter ( 7074): #36     PaintingContext._compositeChild (package:flutter/src/rendering/object.dart:190:7)
I/flutter ( 7074): #37     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:171:7)
I/flutter ( 7074): #38     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:122:15)
I/flutter ( 7074): #39     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2094:7)
I/flutter ( 7074): #40     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:173:13)
I/flutter ( 7074): #41     RenderAnimatedOpacity.paint (package:flutter/src/rendering/proxy_box.dart:909:17)
I/flutter ( 7074): #42     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2094:7)
I/flutter ( 7074): #43     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:173:13)
I/flutter ( 7074): #44     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:122:15)
I/flutter ( 7074): #45     RenderFractionalTranslation.paint (package:flutter/src/rendering/proxy_box.dart:2441:13)
I/flutter ( 7074): #46     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2094:7)
I/flutter ( 7074): #47     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:173:13)
I/flutter ( 7074): #48     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:122:15)
I/flutter ( 7074): #49     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2094:7)
I/flutter ( 7074): #50     PaintingContext._repaintCompositedChild (package:flutter/src/rendering/object.dart:128:11)
I/flutter ( 7074): #51     PaintingContext.repaintCompositedChild (package:flutter/src/rendering/object.dart:96:5)
I/flutter ( 7074): #52     PaintingContext._compositeChild (package:flutter/src/rendering/object.dart:190:7)
I/flutter ( 7074): #53     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:171:7)
I/flutter ( 7074): #54     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:122:15)
I/flutter ( 7074): #55     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2094:7)
I/flutter ( 7074): #56     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:173:13)
I/flutter ( 7074): #57     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:122:15)
I/flutter ( 7074): #58     RenderOffstage.paint (package:flutter/src/rendering/proxy_box.dart:2919:11)
I/flutter ( 7074): #59     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2094:7)
I/flutter ( 7074): #60     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:173:13)
I/flutter ( 7074): #61     _RenderStack&RenderBox&ContainerRenderObjectMixin&RenderBoxContainerDefaultsMixin.defaultPaint (package:flutter/src/rendering/box.dart:2273:15)
I/flutter ( 7074): #62     RenderStack.paintStack (package:flutter/src/rendering/stack.dart:594:5)
I/flutter ( 7074): #63     RenderStack.paint (package:flutter/src/rendering/stack.dart:602:7)
I/flutter ( 7074): #64     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2094:7)
I/flutter ( 7074): #65     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:173:13)
I/flutter ( 7074): #66     __RenderTheatre&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:122:15)
I/flutter ( 7074): #67     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2094:7)
I/flutter ( 7074): #68     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:173:13)
I/flutter ( 7074): #69     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:122:15)
I/flutter ( 7074): #70     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2094:7)
I/flutter ( 7074): #71     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:173:13)
I/flutter ( 7074): #72     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:122:15)
I/flutter ( 7074): #73     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2094:7)
I/flutter ( 7074): #74     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:173:13)
I/flutter ( 7074): #75     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:122:15)
I/flutter ( 7074): #76     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2094:7)
I/flutter ( 7074): #77     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:173:13)
I/flutter ( 7074): #78     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:122:15)
I/flutter ( 7074): #79     RenderCustomPaint.paint (package:flutter/src/rendering/custom_paint.dart:562:11)
I/flutter ( 7074): #80     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2094:7)
I/flutter ( 7074): #81     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:173:13)
I/flutter ( 7074): #82     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:122:15)
I/flutter ( 7074): #83     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2094:7)
I/flutter ( 7074): #84     PaintingContext.paintChild (package:flutter/src/rendering/object.dart:173:13)
I/flutter ( 7074): #85     RenderView.paint (package:flutter/src/rendering/view.dart:178:15)
I/flutter ( 7074): #86     RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:2094:7)
I/flutter ( 7074): #87     PaintingContext._repaintCompositedChild (package:flutter/src/rendering/object.dart:128:11)
I/flutter ( 7074): #88     PaintingContext.repaintCompositedChild (package:flutter/src/rendering/object.dart:96:5)
I/flutter ( 7074): #89     PipelineOwner.flushPaint (package:flutter/src/rendering/object.dart:855:29)
I/flutter ( 7074): #90     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:283:19)
I/flutter ( 7074): #91     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:692:13)
I/flutter ( 7074): #92     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:219:5)
I/flutter ( 7074): #93     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:990:15)
I/flutter ( 7074): #94     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:930:9)
I/flutter ( 7074): #95     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:751:7)
I/flutter ( 7074): #104    _Timer._runTimers (dart:isolate/runtime/libtimer_impl.dart:382:19)
I/flutter ( 7074): #105    _Timer._handleMessage (dart:isolate/runtime/libtimer_impl.dart:416:5)
I/flutter ( 7074): #106    _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:171:12)
I/flutter ( 7074): (elided 8 frames from package dart:async)
I/flutter ( 7074):
I/flutter ( 7074): The following RenderObject was being processed when the exception was fired:
I/flutter ( 7074):   FlareActorRenderObject#03c05
I/flutter ( 7074):   creator: FlareActor ← ConstrainedBox ← Container ← DecoratedBox ← Container ← MediaQuery ←
I/flutter ( 7074):   LayoutId-[<_ScaffoldSlot.body>] ← CustomMultiChildLayout ← AnimatedBuilder ← DefaultTextStyle ←
I/flutter ( 7074):   AnimatedDefaultTextStyle ← _InkFeatures-[GlobalKey#4e969 ink renderer] ← ⋯
I/flutter ( 7074):   parentData: <none> (can use size)
I/flutter ( 7074):   constraints: BoxConstraints(0.0<=w<=360.0, h=300.0)
I/flutter ( 7074):   size: Size(360.0, 300.0)
I/flutter ( 7074): This RenderObject has no descendants.
ricsmania pushed a commit to megasistemas/Flare-Flutter that referenced this issue Feb 4, 2019
@ricsmania
Copy link
Contributor Author

I created a PR with a suggested solution.

@umberto-sonnino
Copy link
Contributor

umberto-sonnino commented Feb 4, 2019

Hey @ricsmania thanks so much for the PR, this is another great catch!

We reviewed it, and it happens quite often, in complex rigs, that people use empty nodes as targets. It would be beneficial to save the extra memory and check for the nullness of the item before calling the iterator:

if(children != null) {
  for (ActorNode in children) {
    [...]
  }
}

Feel free to update your PR with this, and we'll merge it!

ricsmania pushed a commit to megasistemas/Flare-Flutter that referenced this issue Feb 5, 2019
@luigi-rosso
Copy link
Contributor

Thanks for your continued contributions @ricsmania!

@ricsmania
Copy link
Contributor Author

@umberto-sonnino I updated the PR with your suggestion. I also saw another unchecked part here on actor_node.dart:

bool all(NodeWalkCallback cb) {
    if (cb(this) == false) {
      return false;
    }

    // here
    for (ActorNode child in _children) {
      if (cb(child) == false) {
        return false;
      }

      child.eachChildRecursive(cb);
    }

    return true;
  }

I didn't get any errors there, so I left it alone, but if you think that should also be checked I can add it too.

@luigi-rosso no problem, I'm happy to help!

@vidu171
Copy link

vidu171 commented Feb 12, 2019

Hey, I came across this error while I was making an app, is there any solution that i can implement?, Like I tried to delete all the empty nodes from my flare file. But it did not do anything

@vidu171
Copy link

vidu171 commented Feb 12, 2019

@ricsmania , thanks a lot your solution worked I would also like to point out that in the flare.dart file there is a similar problem and I made the following changes



if (children != null) {
      for (ActorNode node in children) {
        FlutterPath flutterPath = node as FlutterPath;
        if (flutterPath != null) {
          Mat2D transform = (node as ActorBasePath).pathTransform;
          _path.addPath(flutterPath.path, ui.Offset.zero,
              matrix4: transform == null ? null : transform.mat4);
        }
      }
    }

which is now working completely fine. I will make a PR for it soon.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants