rvamsikrishna / inview_notifier_list

A Flutter package that builds a list view and notifies when the widgets are on screen.
MIT License
677 stars 104 forks source link

InViewNotifierWidget not working inside PageView.builder() #16

Closed AbhayVAshokan closed 4 years ago

AbhayVAshokan commented 4 years ago
        PageView.builder(
              controller: _pageController,
              scrollDirection: Axis.vertical,
              itemBuilder: (context, index) => Stack(
                children: <Widget>[
                  InViewNotifierWidget(
                    id: videos[index].url,
                    builder: (context, isInView, child) => KeepAlive(
                      key: ValueKey<int>(index),
                      child: MyVideoPlayer(play: InViewNotifierList.of(context).inView('$index')),
                ],
              ),
              itemCount: videos.length,
            )
          ),

I am trying to pause the video_player whenever it is not in view (when scrolled to next video as well as when a new page is pushed on top of the videoplayer screen).

The following is the error response.

I/flutter (15334): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter (15334): The following NoSuchMethodError was thrown building InViewNotifierWidget(dirty):
I/flutter (15334): The getter 'widget' was called on null.
I/flutter (15334): Receiver: null
I/flutter (15334): Tried calling: widget
I/flutter (15334): 
I/flutter (15334): The relevant error-causing widget was:
I/flutter (15334):   InViewNotifierWidget
I/flutter (15334):   file:///home/abhayvashokan/Productivity/Projects/Flair/flair/lib/screens/feeds_screen.dart:112:19
I/flutter (15334): 
I/flutter (15334): When the exception was thrown, this was the stack:
I/flutter (15334): #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:53:5)
I/flutter (15334): #1      InViewNotifierList.of (package:inview_notifier_list/src/inview_notifier_list.dart:59:10)
I/flutter (15334): #2      InViewNotifierWidget.build (package:inview_notifier_list/src/inview_notifier_list.dart:161:44)
I/flutter (15334): #3      StatelessElement.build (package:flutter/src/widgets/framework.dart:4576:28)
I/flutter (15334): #4      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4502:15)
I/flutter (15334): #5      Element.rebuild (package:flutter/src/widgets/framework.dart:4218:5)
I/flutter (15334): #6      ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4481:5)
I/flutter (15334): #7      ComponentElement.mount (package:flutter/src/widgets/framework.dart:4476:5)
I/flutter (15334): #8      Element.inflateWidget (package:flutter/src/widgets/framework.dart:3446:14)
I/flutter (15334): #9      MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5947:32)
I/flutter (15334): ...     Normal element mounting (33 frames)
I/flutter (15334): #42     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3446:14)
I/flutter (15334): #43     Element.updateChild (package:flutter/src/widgets/framework.dart:3214:18)
I/flutter (15334): #44     SliverMultiBoxAdaptorElement.updateChild (package:flutter/src/widgets/sliver.dart:1162:36)
I/flutter (15334): #45     SliverMultiBoxAdaptorElement.createChild.<anonymous closure> (package:flutter/src/widgets/sliver.dart:1147:20)
I/flutter (15334): #46     BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2607:19)
I/flutter (15334): #47     SliverMultiBoxAdaptorElement.createChild (package:flutter/src/widgets/sliver.dart:1140:11)
I/flutter (15334): #48     RenderSliverMultiBoxAdaptor._createOrObtainChild.<anonymous closure> (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:354:23)
I/flutter (15334): #49     RenderObject.invokeLayoutCallback.<anonymous closure> (package:flutter/src/rendering/object.dart:1866:58)
I/flutter (15334): #50     PipelineOwner._enableMutationsToDirtySubtrees (package:flutter/src/rendering/object.dart:918:15)
I/flutter (15334): #51     RenderObject.invokeLayoutCallback (package:flutter/src/rendering/object.dart:1866:13)
I/flutter (15334): #52     RenderSliverMultiBoxAdaptor._createOrObtainChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:343:5)
I/flutter (15334): #53     RenderSliverMultiBoxAdaptor.addInitialChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:427:5)
I/flutter (15334): #54     RenderSliverFixedExtentBoxAdaptor.performLayout (package:flutter/src/rendering/sliver_fixed_extent_list.dart:197:12)
I/flutter (15334): #55     RenderObject.layout (package:flutter/src/rendering/object.dart:1767:7)
I/flutter (15334): #56     RenderSliverEdgeInsetsPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:135:11)
I/flutter (15334): #57     _RenderSliverFractionalPadding.performLayout (package:flutter/src/widgets/sliver_fill.dart:168:11)
I/flutter (15334): #58     RenderObject.layout (package:flutter/src/rendering/object.dart:1767:7)
I/flutter (15334): #59     RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:452:13)
I/flutter (15334): #60     RenderViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1444:12)
I/flutter (15334): #61     RenderViewport.performLayout (package:flutter/src/rendering/viewport.dart:1353:20)
I/flutter (15334): #62     RenderObject.layout (package:flutter/src/rendering/object.dart:1767:7)
I/flutter (15334): #63     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:13)
I/flutter (15334): #64     RenderObject.layout (package:flutter/src/rendering/object.dart:1767:7)
I/flutter (15334): #65     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:13)
I/flutter (15334): #66     RenderObject.layout (package:flutter/src/rendering/object.dart:1767:7)
I/flutter (15334): #67     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:13)
I/flutter (15334): #68     RenderObject.layout (package:flutter/src/rendering/object.dart:1767:7)
I/flutter (15334): #69     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:13)
I/flutter (15334): #70     RenderObject.layout (package:flutter/src/rendering/object.dart:1767:7)
I/flutter (15334): #71     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:13)
I/flutter (15334): #72     RenderObject.layout (package:flutter/src/rendering/object.dart:1767:7)
I/flutter (15334): #73     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:13)
I/flutter (15334): #74     RenderObject.layout (package:flutter/src/rendering/object.dart:1767:7)
I/flutter (15334): #75     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:13)
I/flutter (15334): #76     RenderObject.layout (package:flutter/src/rendering/object.dart:1767:7)
I/flutter (15334): #77     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:13)
I/flutter (15334): #78     RenderObject.layout (package:flutter/src/rendering/object.dart:1767:7)
I/flutter (15334): #79     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:13)
I/flutter (15334): #80     RenderObject.layout (package:flutter/src/rendering/object.dart:1767:7)
I/flutter (15334): #81     MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:171:11)
I/flutter (15334): #82     _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:484:7)
I/flutter (15334): #83     MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:240:7)
I/flutter (15334): #84     RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:399:14)
I/flutter (15334): #85     RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1630:7)
I/flutter (15334): #86     PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:887:18)
I/flutter (15334): #87     RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:402:19)
I/flutter (15334): #88     WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:884:13)
I/flutter (15334): #89     RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:284:5)
I/flutter (15334): #90     SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1113:15)
I/flutter (15334): #91     SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1052:9)
I/flutter (15334): #92     SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:968:5)
I/flutter (15334): #96     _invoke (dart:ui/hooks.dart:261:10)
I/flutter (15334): #97     _drawFrame (dart:ui/hooks.dart:219:3)
I/flutter (15334): (elided 3 frames from dart:async)

I also appreciate if you tell me how to add pull down to refresh in PageView.

rvamsikrishna commented 4 years ago

@AbhayVAshokan You should use InViewNotifierWidget inside an InViewNotifierList. Is the InViewNotifierWidget nested under InViewNotifierList?

AbhayVAshokan commented 4 years ago

@AbhayVAshokan You should use InViewNotifierWidget inside an InViewNotifierList. Is the InViewNotifierWidget nested under InViewNotifierList?

Thank you for the clarification. Earlier, I could not figure out what is the use of InViewNotifierWidget.