januwA / flutter_video_box

flutter_video_box
MIT License
22 stars 12 forks source link

Exception error when dispose controller #29

Closed robertoltrocha closed 4 years ago

robertoltrocha commented 4 years ago

Hi. when I change the page I had this error.

════════ Exception caught by widgets library ═══════════════════════════════════════════════════════
The following assertion was thrown while finalizing the widget tree:
_VideoBoxState#8907b(tickers: tracking 3 tickers) was disposed with an active Ticker.

_VideoBoxState created a Ticker via its TickerProviderStateMixin, but at the time dispose() was called on the mixin, that Ticker was still active. All Tickers must be disposed before calling super.dispose().

Tickers used by AnimationControllers should be disposed by calling dispose() on the AnimationController itself. Otherwise, the ticker will leak.

The offending ticker was: _WidgetTicker(created by _VideoBoxState#8907b(lifecycle state: created, tickers: tracking 2 tickers))
The stack trace when the _WidgetTicker was actually created was:
#0      new Ticker.<anonymous closure> (package:flutter/src/scheduler/ticker.dart:66:40)

I put in my code but doesn´t work:

@override
  void dispose() {
    vcs.dispose();
    super.dispose();
  }
januwA commented 4 years ago

Can you provide more detailed code, I really can't see what went wrong.

robertoltrocha commented 4 years ago

HI,

Of course, I created clean code to test and had the same error. The error happens when I change the page. I press the return navigation button, for example.

import 'package:flutter/material.dart';
import 'package:video_box/video_box.dart';

class teste extends StatefulWidget {
  @override
  _testeState createState() => _testeState();
}

class _testeState extends State<teste> {
  VideoController vcs;

  @override
  void initState() {
    super.initState();

    vcs = new VideoController(
      animetedIconDuration: Duration(seconds: 5),
      source: VideoPlayerController.network(
          'https://www.ritarochaaprendizagens.com.br/wp-content/uploads/2020/05/video_ritarocha.mp4'),
    )..initialize();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Test"),
      ),
      body: VideoBox(
        controller: vcs,
      ),
    );
  }

  @override
  void dispose() {
    vcs.dispose();
    super.dispose();
  }
}
════════ Exception caught by widgets library ═══════════════════════════════════════════════════════
The following assertion was thrown while finalizing the widget tree:
_VideoBoxState#8f529(tickers: tracking 3 tickers) was disposed with an active Ticker.

_VideoBoxState created a Ticker via its TickerProviderStateMixin, but at the time dispose() was called on the mixin, that Ticker was still active. All Tickers must be disposed before calling super.dispose().

Tickers used by AnimationControllers should be disposed by calling dispose() on the AnimationController itself. Otherwise, the ticker will leak.

The offending ticker was: _WidgetTicker(created by _VideoBoxState#8f529(lifecycle state: created, tickers: tracking 2 tickers))
The stack trace when the _WidgetTicker was actually created was:
#0      new Ticker.<anonymous closure> (package:flutter/src/scheduler/ticker.dart:66:40)
#1      new Ticker (package:flutter/src/scheduler/ticker.dart:68:6)
#2      new _WidgetTicker (package:flutter/src/widgets/ticker_provider.dart:271:80)
#3      TickerProviderStateMixin.createTicker (package:flutter/src/widgets/ticker_provider.dart:202:34)
#4      new AnimationController (package:flutter/src/animation/animation_controller.dart:247:21)
#5      AnimationIconMixin.initAnimetedIconController (package:video_box/mixin/animation_icon_mixin.dart:26:30)
#6      _VideoBoxState.initState (package:video_box/video_box.dart:103:9)
#7      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4640:58)
#8      ComponentElement.mount (package:flutter/src/widgets/framework.dart:4476:5)
#9      ObserverElementMixin.mount (package:flutter_mobx/src/observer_widget_mixin.dart:67:11)
...     Normal element mounting (19 frames)
#28     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3446:14)
#29     MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5947:32)
...     Normal element mounting (193 frames)
#222    Element.inflateWidget (package:flutter/src/widgets/framework.dart:3446:14)
#223    Element.updateChild (package:flutter/src/widgets/framework.dart:3214:18)
#224    RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:5580:32)
#225    MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5957:17)
#226    Element.updateChild (package:flutter/src/widgets/framework.dart:3201:15)
#227    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4527:16)
#228    StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4675:11)
#229    Element.rebuild (package:flutter/src/widgets/framework.dart:4218:5)
#230    StatefulElement.update (package:flutter/src/widgets/framework.dart:4707:5)
#231    Element.updateChild (package:flutter/src/widgets/framework.dart:3201:15)
#232    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4527:16)
#233    Element.rebuild (package:flutter/src/widgets/framework.dart:4218:5)
#234    ProxyElement.update (package:flutter/src/widgets/framework.dart:4862:5)
#235    _InheritedNotifierElement.update (package:flutter/src/widgets/inherited_notifier.dart:181:11)
#236    Element.updateChild (package:flutter/src/widgets/framework.dart:3201:15)
#237    SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5837:14)
#238    Element.updateChild (package:flutter/src/widgets/framework.dart:3201:15)
#239    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4527:16)
#240    StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4675:11)
#241    Element.rebuild (package:flutter/src/widgets/framework.dart:4218:5)
#242    StatefulElement.update (package:flutter/src/widgets/framework.dart:4707:5)
#243    Element.updateChild (package:flutter/src/widgets/framework.dart:3201:15)
#244    SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5837:14)
#245    Element.updateChild (package:flutter/src/widgets/framework.dart:3201:15)
#246    SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5837:14)
#247    Element.updateChild (package:flutter/src/widgets/framework.dart:3201:15)
#248    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4527:16)
#249    Element.rebuild (package:flutter/src/widgets/framework.dart:4218:5)
#250    StatelessElement.update (package:flutter/src/widgets/framework.dart:4583:5)
#251    Element.updateChild (package:flutter/src/widgets/framework.dart:3201:15)
#252    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4527:16)
#253    StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4675:11)
#254    Element.rebuild (package:flutter/src/widgets/framework.dart:4218:5)
#255    BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2627:33)
#256    WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:883:20)
#257    RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:284:5)
#258    SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1113:15)
#259    SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1052:9)
#260    SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:968:5)
#264    _invoke (dart:ui/hooks.dart:261:10)
#265    _drawFrame (dart:ui/hooks.dart:219:3)
(elided 3 frames from dart:async)

When the exception was thrown, this was the stack: 
#0      TickerProviderStateMixin.dispose.<anonymous closure> (package:flutter/src/widgets/ticker_provider.dart:219:13)
#1      TickerProviderStateMixin.dispose (package:flutter/src/widgets/ticker_provider.dart:237:6)
#2      StatefulElement.unmount (package:flutter/src/widgets/framework.dart:4729:12)
#3      ObserverElementMixin.unmount (package:flutter_mobx/src/observer_widget_mixin.dart:92:11)
#4      _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1922:13)
...
════════════════════════════════════════════════════════════════════════════════════════════════════
robertoltrocha commented 4 years ago

Hi, I found an error in my code. I put 10 seconds to duration to antimated.
animetedIconDuration: Duration(seconds: 5), the right was controllerLiveDuration: Duration(seconds: 5),

sorry for this. You can close. thanks