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 method '-' was called on null error on initial load. Error resolves on hot reload. #139

Open
Shantaviae opened this issue Oct 13, 2019 · 6 comments

Comments

@Shantaviae
Copy link

When I run my app with the Swiper configured as such I get the error below. This error goes not throw (or "fixes itself") when I reload the app. If I change layout to SwiperLayout.DEFAULT I do not get this error.

LimitedBox(
maxHeight: cardSize.height,
child: Swiper(
itemBuilder: (BuildContext context, int index) {
if (goalsRepository.goals.length > 0) {
Goal goal = goalsRepository.goals[index];
return GoalCard(
goal: goal,
cardSize: cardSize,
key: ValueKey(goal.id));
}
return null;
},
itemCount: goalsRepository.goals.length,
layout: SwiperLayout.STACK,
itemWidth: cardSize.width,
itemHeight: cardSize.height,
controller: SwiperController(),
onIndexChanged: (index) =>
goalsRepository.updateViewingGoal(index),
),
),

ERROR Log:

I/flutter (12736): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter (12736): The following NoSuchMethodError was thrown building Swiper(state: _SwiperState#677cd):
I/flutter (12736): The method '-' was called on null.
I/flutter (12736): Receiver: null
I/flutter (12736): Tried calling: -(349.7142857142857)
I/flutter (12736):
I/flutter (12736): User-created ancestor of the error-causing widget was:
I/flutter (12736): LimitedBox file:///Users/shantaviaewynn/Projects/nudged/lib/screens/home_screen.dart:28:15
I/flutter (12736):
I/flutter (12736): When the exception was thrown, this was the stack:
I/flutter (12736): #0 Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
I/flutter (12736): #1 _StackViewState._updateValues (package:flutter_swiper/src/swiper.dart:864:36)
I/flutter (12736): #2 _StackViewState.didUpdateWidget (package:flutter_swiper/src/swiper.dart:874:5)
I/flutter (12736): #3 StatefulElement.update (package:flutter/src/widgets/framework.dart:4103:58)
I/flutter (12736): #4 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #5 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3961:16)
I/flutter (12736): #6 Element.rebuild (package:flutter/src/widgets/framework.dart:3738:5)
I/flutter (12736): #7 StatefulElement.update (package:flutter/src/widgets/framework.dart:4120:5)
I/flutter (12736): #8 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #9 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5134:14)
I/flutter (12736): #10 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #11 RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:4852:32)
I/flutter (12736): #12 MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5243:17)
I/flutter (12736): #13 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #14 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5134:14)
I/flutter (12736): #15 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #16 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3961:16)
I/flutter (12736): #17 Element.rebuild (package:flutter/src/widgets/framework.dart:3738:5)
I/flutter (12736): #18 StatelessElement.update (package:flutter/src/widgets/framework.dart:4016:5)
I/flutter (12736): #19 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #20 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3961:16)
I/flutter (12736): #21 Element.rebuild (package:flutter/src/widgets/framework.dart:3738:5)
I/flutter (12736): #22 ProxyElement.update (package:flutter/src/widgets/framework.dart:4254:5)
I/flutter (12736): #23 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #24 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3961:16)
I/flutter (12736): #25 Element.rebuild (package:flutter/src/widgets/framework.dart:3738:5)
I/flutter (12736): #26 ProxyElement.update (package:flutter/src/widgets/framework.dart:4254:5)
I/flutter (12736): #27 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #28 RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:4852:32)
I/flutter (12736): #29 MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5243:17)
I/flutter (12736): #30 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #31 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3961:16)
I/flutter (12736): #32 Element.rebuild (package:flutter/src/widgets/framework.dart:3738:5)
I/flutter (12736): #33 StatefulElement.update (package:flutter/src/widgets/framework.dart:4120:5)
I/flutter (12736): #34 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #35 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3961:16)
I/flutter (12736): #36 Element.rebuild (package:flutter/src/widgets/framework.dart:3738:5)
I/flutter (12736): #37 ProxyElement.update (package:flutter/src/widgets/framework.dart:4254:5)
I/flutter (12736): #38 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #39 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3961:16)
I/flutter (12736): #40 Element.rebuild (package:flutter/src/widgets/framework.dart:3738:5)
I/flutter (12736): #41 StatefulElement.update (package:flutter/src/widgets/framework.dart:4120:5)
I/flutter (12736): #42 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #43 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5134:14)
I/flutter (12736): #44 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #45 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3961:16)
I/flutter (12736): #46 Element.rebuild (package:flutter/src/widgets/framework.dart:3738:5)
I/flutter (12736): #47 StatelessElement.update (package:flutter/src/widgets/framework.dart:4016:5)
I/flutter (12736): #48 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #49 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5134:14)
I/flutter (12736): #50 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #51 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3961:16)
I/flutter (12736): #52 Element.rebuild (package:flutter/src/widgets/framework.dart:3738:5)
I/flutter (12736): #53 StatefulElement.update (package:flutter/src/widgets/framework.dart:4120:5)
I/flutter (12736): #54 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #55 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3961:16)
I/flutter (12736): #56 Element.rebuild (package:flutter/src/widgets/framework.dart:3738:5)
I/flutter (12736): #57 StatefulElement.update (package:flutter/src/widgets/framework.dart:4120:5)
I/flutter (12736): #58 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #59 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3961:16)
I/flutter (12736): #60 Element.rebuild (package:flutter/src/widgets/framework.dart:3738:5)
I/flutter (12736): #61 ProxyElement.update (package:flutter/src/widgets/framework.dart:4254:5)
I/flutter (12736): #62 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #63 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3961:16)
I/flutter (12736): #64 Element.rebuild (package:flutter/src/widgets/framework.dart:3738:5)
I/flutter (12736): #65 ProxyElement.update (package:flutter/src/widgets/framework.dart:4254:5)
I/flutter (12736): #66 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #67 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3961:16)
I/flutter (12736): #68 Element.rebuild (package:flutter/src/widgets/framework.dart:3738:5)
I/flutter (12736): #69 StatefulElement.update (package:flutter/src/widgets/framework.dart:4120:5)
I/flutter (12736): #70 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #71 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3961:16)
I/flutter (12736): #72 Element.rebuild (package:flutter/src/widgets/framework.dart:3738:5)
I/flutter (12736): #73 ProxyElement.update (package:flutter/src/widgets/framework.dart:4254:5)
I/flutter (12736): #74 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #75 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5134:14)
I/flutter (12736): #76 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #77 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3961:16)
I/flutter (12736): #78 Element.rebuild (package:flutter/src/widgets/framework.dart:3738:5)
I/flutter (12736): #79 StatelessElement.update (package:flutter/src/widgets/framework.dart:4016:5)
I/flutter (12736): #80 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #81 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3961:16)
I/flutter (12736): #82 Element.rebuild (package:flutter/src/widgets/framework.dart:3738:5)
I/flutter (12736): #83 StatelessElement.update (package:flutter/src/widgets/framework.dart:4016:5)
I/flutter (12736): #84 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #85 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5134:14)
I/flutter (12736): #86 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #87 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3961:16)
I/flutter (12736): #88 Element.rebuild (package:flutter/src/widgets/framework.dart:3738:5)
I/flutter (12736): #89 StatelessElement.update (package:flutter/src/widgets/framework.dart:4016:5)
I/flutter (12736): #90 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #91 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5134:14)
I/flutter (12736): #92 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #93 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5134:14)
I/flutter (12736): #94 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #95 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5134:14)
I/flutter (12736): #96 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #97 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5134:14)
I/flutter (12736): #98 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #99 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3961:16)
I/flutter (12736): #100 Element.rebuild (package:flutter/src/widgets/framework.dart:3738:5)
I/flutter (12736): #101 StatefulElement.update (package:flutter/src/widgets/framework.dart:4120:5)
I/flutter (12736): #102 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #103 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3961:16)
I/flutter (12736): #104 Element.rebuild (package:flutter/src/widgets/framework.dart:3738:5)
I/flutter (12736): #105 StatelessElement.update (package:flutter/src/widgets/framework.dart:4016:5)
I/flutter (12736): #106 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #107 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3961:16)
I/flutter (12736): #108 Element.rebuild (package:flutter/src/widgets/framework.dart:3738:5)
I/flutter (12736): #109 StatefulElement.update (package:flutter/src/widgets/framework.dart:4120:5)
I/flutter (12736): #110 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #111 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5134:14)
I/flutter (12736): #112 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #113 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3961:16)
I/flutter (12736): #114 Element.rebuild (package:flutter/src/widgets/framework.dart:3738:5)
I/flutter (12736): #115 ProxyElement.update (package:flutter/src/widgets/framework.dart:4254:5)
I/flutter (12736): #116 _InheritedNotifierElement.update (package:flutter/src/widgets/inherited_notifier.dart:94:11)
I/flutter (12736): #117 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #118 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5134:14)
I/flutter (12736): #119 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #120 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3961:16)
I/flutter (12736): #121 Element.rebuild (package:flutter/src/widgets/framework.dart:3738:5)
I/flutter (12736): #122 StatefulElement.update (package:flutter/src/widgets/framework.dart:4120:5)
I/flutter (12736): #123 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #124 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3961:16)
I/flutter (12736): #125 Element.rebuild (package:flutter/src/widgets/framework.dart:3738:5)
I/flutter (12736): #126 StatelessElement.update (package:flutter/src/widgets/framework.dart:4016:5)
I/flutter (12736): #127 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #128 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5134:14)
I/flutter (12736): #129 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #130 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3961:16)
I/flutter (12736): #131 Element.rebuild (package:flutter/src/widgets/framework.dart:3738:5)
I/flutter (12736): #132 ProxyElement.update (package:flutter/src/widgets/framework.dart:4254:5)
I/flutter (12736): #133 Element.updateChild (package:flutter/src/widgets/framework.dart:2893:15)
I/flutter (12736): #134 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3961:16)
I/flutter (12736): #135 Element.rebuild (package:flutter/src/widgets/framework.dart:3738:5)
I/flutter (12736): #136 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2348:33)
I/flutter (12736): #137 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:760:20)
I/flutter (12736): #138 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:280:5)
I/flutter (12736): #139 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1033:15)
I/flutter (12736): #140 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:975:9)
D/EGL_emulation(12736): eglMakeCurrent: 0x9f405480: ver 3 0 (tinfo 0x9f4033c0)
I/flutter (12736): #141 SchedulerBinding.scheduleWarmUpFrame. (package:flutter/src/scheduler/binding.dart:784:7)
I/flutter (12736): #150 _Timer._runTimers (dart:isolate-patch/timer_impl.dart:382:19)
I/flutter (12736): #151 _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:416:5)
I/flutter (12736): #152 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:172:12)
I/flutter (12736): (elided 8 frames from package dart:async and package dart:async-patch)
I/flutter (12736):
I/flutter (12736):

@mario202k
Copy link

mario202k commented Oct 16, 2019

Just add return goalsRepository.goals.isNotEmpty? Swiper(....
#47 (comment)

@Shantaviae
Copy link
Author

The goals list is initialized prior to the build and I've tested that it has content. I'm pretty sure its an issue specifically with the stack layout because when I go back to the default layout (without changing anything else) this error isn't thrown.

@mario202k
Copy link

No. It's not the culprit(stack layout ) I know that changing layout (SwiperLayout.TINDER) occured an error unless the default.
You must test your list (itemCount) before !!!!! Swiper.
Not as you've done into the itemBuilder.

itemBuilder: (BuildContext context, int index) { if (goalsRepository.goals.length > 0) {

@Shantaviae
Copy link
Author

Shantaviae commented Oct 16, 2019

Hi,

I refactored my code to clean it up a bit. Let me know if I've still misinterpreted your suggestion. It's still throwing the same error as above when I run my app in debug mode (it doesn't when I do a hot reload). When I change the bold line to layout: SwiperLayout.DEFAULT, and hard restart the app in debug mode, I do not get an error. That's why I was concerned it's an issue with STACK layout. From the documentation, they don't appear to require different parameters, so I'm really stuck on how to figure out what's wrong with my code. Thanks for your help by the way!

class CustomSwiper extends StatelessWidget {
  GoalsRepository goalsRepository;
  Size cardSize;
  CustomSwiper({@required this.goalsRepository, @required this.cardSize});

  @override
  Widget build(BuildContext context) {
    print('number of goals ${goalsRepository.goals.length.toString()}');
    if (goalsRepository.goals.length > 0) {
      return LimitedBox(
        maxHeight: cardSize.height,
        child: Swiper(
          itemBuilder: (BuildContext context, int index) {
            Goal goal = goalsRepository.goals[index];
            return GoalCard(
                goal: goal, cardSize: cardSize, key: ValueKey(goal.id));
          },
          itemCount: goalsRepository.goals.length,
          layout: SwiperLayout.STACK,
          itemWidth: cardSize.width,
          itemHeight: cardSize.height,
          controller: SwiperController(),
          onIndexChanged: (index) => goalsRepository.updateViewingGoal(index),
        ),
      );
    } else {
      return LimitedBox(
        maxHeight: cardSize.height,
        child: CircularProgressIndicator(),
      );
    }
  }
}

@mario202k
Copy link

mario202k commented Oct 17, 2019

I would change limitedBox by ConstrainedBox or SizedBox Because LimitedBox : A box that limits its size only when it's unconstrained whereas Swiper have itemWidth and itemHeight.
I've spent days on that issue
If the data from the internet why don't you use StreamBuilder?
Take a sneak peek on my code.

StreamBuilder(
stream: slides,
initialData: [],
builder: (context, AsyncSnapshot snap) {
List slideList = snap.data.toList();
if (slideList.isNotEmpty) {
slideList.forEach((f) {
events.add(MonEvent.fromMap(f));
});
}
return Hero(
tag: '123',
child: slideList.isNotEmpty
? Swiper(
itemBuilder: (BuildContext context, int index) {
return Image.network(
slideList[index]['image'],
fit: BoxFit.fill,
);
},
itemCount: slideList.length,
pagination: SwiperPagination(),
control: SwiperControl(),
onTap: (index) {
Navigator.pushNamed(context, '/details',
arguments: events[index]);
},
itemWidth: MediaQuery.of(context).size.width -
MediaQuery.of(context).size.width * 0.1,
itemHeight: MediaQuery.of(context).size.height -
MediaQuery.of(context).size.height * 0.1,
layout: SwiperLayout.TINDER,
loop: true,
outer: true,
autoplay: true,
autoplayDisableOnInteraction: false,
)
: Center(
child: CircularProgressIndicator(),
),
);
})`

@FronnieSW
Copy link

FronnieSW commented Nov 14, 2019

This rly might be a plugins bug. The problem is that at one frame the _swiperHeight is null so it crashes.
I solved this by creating my own layout, that looks almost exactly same as the STACK one.

layout: SwiperLayout.CUSTOM,
 customLayoutOption: new CustomLayoutOption(
          startIndex: ITEMS_COUNT - 3,
          stateCount: 5
      ).addScale([
          0.7,
          0.8,
          0.9,
          1.0,
          1.0,
      ], Alignment.center).addTranslate([
          Offset(0.0, -45.0),
          Offset(0.0, -45.0),
          Offset(0.0, -20.0),
          Offset(0.0, 0.0),
          Offset(0.0, ITEM_HEIGHT),
      ]).addOpacity([
          0.0,
          0.75,
          0.95,
          1.0,
          0.0,
      ]),

If you use MediaQuery.of(context).size.height * X for itemHeight, then change values in .addTransalte for % values as well..

for example:

_maxHeight = MediaQuery.of(context).size.height;
_itemHeight = _maxHeight  * 0.4;

.addTranslate([
         new Offset(0.0, -_maxHeight * 0.1),
         new Offset(0.0, -_maxHeight * 0.085),
         new Offset(0.0, -_maxHeight * 0.04),
         new Offset(0.0, 0.0),
         new Offset(0.0, _itemHeight),
       ])

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

3 participants