fluttercommunity / flutter_sticky_headers

Flutter Sticky Headers - Lets you place "sticky headers" into any scrollable content in your Flutter app. No special wrappers or magic required. Maintainer: @slightfoot
https://pub.dev/packages/sticky_headers
MIT License
1.07k stars 130 forks source link

Silent exception occurring when build StickyHeaders. #39

Closed irvine5k closed 2 years ago

irvine5k commented 4 years ago

NoSuchMethodError (NoSuchMethodError: The method '-' was called on null. Receiver: null

Intro

Hi, my team is facing an exception when building a list of StickyHeader. The exception does not affect the user but is polluting our crashlytics.

Images

image image

To reproduce:

Additional Information

xuhongfei commented 3 years ago

Hi @irvine5k , Do you have a solution for this issue? I have the same problem as you. Thanks!

irvine5k commented 3 years ago

Hi, @xuhongfei. No, I don't, unfortunately.

xuhongfei commented 3 years ago

Looking forward to @slightfoot 's reply!

DeD1rk commented 3 years ago

I have the same, but with a different exception:

import 'package:flutter/material.dart';
import 'package:sticky_headers/sticky_headers/widget.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: CustomScrollView(slivers: [
          SliverList(
            delegate: SliverChildBuilderDelegate((context, index) {
              return StickyHeader(
                header: Text('Header $index'),
                content: Text('Content $index'),
              );
            }, childCount: 5),
          ),
        ]),
      ),
    );
  }
}

Will throw Null check operator used on null value in RenderSliverMultiBoxAdaptor.childMainAxisPosition (sliver_multi_box_adaptor.dart line 567):

RenderSliverMultiBoxAdaptor.childMainAxisPosition (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/sliver_multi_box_adaptor.dart:567)
RenderSliverHelpers.applyPaintTransformForBoxChild (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/sliver.dart:1684)
RenderSliverMultiBoxAdaptor.applyPaintTransform (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/sliver_multi_box_adaptor.dart:593)
RenderObject.getTransformTo (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:2398)
RenderBox.localToGlobal (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/box.dart:2551)
RenderStickyHeader.determineStuckOffset (/usr/local/Caskroom/flutter/1.22.4/flutter/.pub-cache/hosted/pub.dartlang.org/sticky_headers-0.2.0/lib/sticky_headers/render.dart:135)
RenderStickyHeader.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/.pub-cache/hosted/pub.dartlang.org/sticky_headers-0.2.0/lib/sticky_headers/render.dart:117)
RenderObject.layout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:1779)
RenderProxyBoxMixin.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/proxy_box.dart:116)
RenderObject.layout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:1779)
RenderProxyBoxMixin.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/proxy_box.dart:116)
RenderObject.layout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:1779)
RenderSliverMultiBoxAdaptor.insertAndLayoutChild (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/sliver_multi_box_adaptor.dart:487)
RenderSliverList.performLayout.advance (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/sliver_list.dart:239)
RenderSliverList.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/sliver_list.dart:282)
RenderObject.layout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:1779)
RenderViewportBase.layoutChildSequence (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/viewport.dart:510)
RenderViewport._attemptLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/viewport.dart:1574)
RenderViewport.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/viewport.dart:1483)
RenderObject.layout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:1779)
RenderProxyBoxMixin.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/proxy_box.dart:116)
RenderObject.layout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:1779)
RenderProxyBoxMixin.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/proxy_box.dart:116)
RenderObject.layout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:1779)
RenderProxyBoxMixin.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/proxy_box.dart:116)
RenderObject.layout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:1779)
RenderProxyBoxMixin.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/proxy_box.dart:116)
RenderObject.layout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:1779)
RenderProxyBoxMixin.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/proxy_box.dart:116)
RenderObject.layout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:1779)
RenderProxyBoxMixin.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/proxy_box.dart:116)
RenderObject.layout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:1779)
MultiChildLayoutDelegate.layoutChild (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/custom_layout.dart:171)
_ScaffoldLayout.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/material/scaffold.dart:937)
MultiChildLayoutDelegate._callPerformLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/custom_layout.dart:240)
RenderCustomMultiChildLayoutBox.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/custom_layout.dart:404)
RenderObject.layout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:1779)
RenderProxyBoxMixin.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/proxy_box.dart:116)
RenderObject.layout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:1779)
RenderProxyBoxMixin.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/proxy_box.dart:116)
_RenderCustomClip.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/proxy_box.dart:1369)
RenderObject.layout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:1779)
RenderProxyBoxMixin.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/proxy_box.dart:116)
RenderObject.layout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:1779)
RenderProxyBoxMixin.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/proxy_box.dart:116)
RenderObject.layout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:1779)
RenderProxyBoxMixin.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/proxy_box.dart:116)
RenderObject.layout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:1779)
ChildLayoutHelper.layoutChild (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/layout_helper.dart:54)
RenderStack._computeSize (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/stack.dart:570)
RenderStack.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/stack.dart:597)
RenderObject.layout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:1779)
RenderProxyBoxMixin.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/proxy_box.dart:116)
RenderObject.layout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:1779)
RenderProxyBoxMixin.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/proxy_box.dart:116)
RenderObject.layout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:1779)
RenderProxyBoxMixin.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/proxy_box.dart:116)
RenderObject.layout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:1779)
RenderProxyBoxMixin.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/proxy_box.dart:116)
RenderObject.layout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:1779)
RenderProxyBoxMixin.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/proxy_box.dart:116)
RenderObject.layout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:1779)
RenderProxyBoxMixin.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/proxy_box.dart:116)
RenderOffstage.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/proxy_box.dart:3370)
RenderObject.layout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:1779)
RenderProxyBoxMixin.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/proxy_box.dart:116)
RenderObject.layout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:1779)
_RenderTheatre.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/widgets/overlay.dart:743)
RenderObject.layout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:1779)
RenderProxyBoxMixin.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/proxy_box.dart:116)
RenderObject.layout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:1779)
RenderProxyBoxMixin.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/proxy_box.dart:116)
RenderObject.layout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:1779)
RenderProxyBoxMixin.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/proxy_box.dart:116)
RenderObject.layout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:1779)
RenderProxyBoxMixin.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/proxy_box.dart:116)
RenderCustomPaint.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/custom_paint.dart:545)
RenderObject.layout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:1779)
RenderProxyBoxMixin.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/proxy_box.dart:116)
RenderObject.layout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:1779)
RenderProxyBoxMixin.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/proxy_box.dart:116)
RenderObject.layout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:1779)
RenderProxyBoxMixin.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/proxy_box.dart:116)
RenderObject.layout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:1779)
RenderView.performLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/view.dart:153)
RenderObject._layoutWithoutResize (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:1636)
PipelineOwner.flushLayout (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/object.dart:881)
RendererBinding.drawFrame (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/binding.dart:462)
WidgetsBinding.drawFrame (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/widgets/binding.dart:876)
RendererBinding._handlePersistentFrameCallback (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/rendering/binding.dart:328)
SchedulerBinding._invokeFrameCallback (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/scheduler/binding.dart:1144)
SchedulerBinding.handleDrawFrame (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/scheduler/binding.dart:1082)
SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (/usr/local/Caskroom/flutter/1.22.4/flutter/packages/flutter/lib/src/scheduler/binding.dart:865)
_rootRun (dart:async/zone.dart:1346)
_CustomZone.run (dart:async/zone.dart:1258)
_CustomZone.runGuarded (dart:async/zone.dart:1162)
_CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1202)
_rootRun (dart:async/zone.dart:1354)
_CustomZone.run (dart:async/zone.dart:1258)
_CustomZone.bindCallback.<anonymous closure> (dart:async/zone.dart:1186)
Timer._createTimer.<anonymous closure> (dart:async-patch/timer_patch.dart:18)
_Timer._runTimers (dart:isolate-patch/timer_impl.dart:395)
_Timer._handleMessage (dart:isolate-patch/timer_impl.dart:426)
_RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:184)

Version info

sticky_headers: 0.2.0

[✓] Flutter (Channel stable, 2.2.3, on macOS 11.1 20C69 darwin-x64, locale nl-NL)
    • Flutter version 2.2.3 at /usr/local/Caskroom/flutter/1.22.4/flutter
    • Framework revision f4abaa0735 (5 weeks ago), 2021-07-01 12:46:11 -0700
    • Engine revision 241c87ad80
    • Dart version 2.13.4

Indeed this is not a problem for the user, but is quite problematic when debugging the rest of an app. Sadly I do not know how this could be solved either.

slightfoot commented 2 years ago

Closing as duplicate of #42