Skip to content

AnimationContoller in Tile is not being disposed #595

@kuhnroyal

Description

@kuhnroyal

A call to animationController?.dispose() is missing after line https://github.com/johnpryan/flutter_map/blob/master/lib/src/layer/tile_layer.dart#L951

This fails on Flutter 1.17.0-dev.3.1 with the following error:

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

_TileLayerState 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 _TileLayerState#7cdb2(tickers: tracking 0 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      Tile.startFadeInAnimation (package:flutter_map/src/layer/tile_layer.dart:957:27)
#6      _TileLayerState._tileReady (package:flutter_map/src/layer/tile_layer.dart:838:12)
#7      Tile._tileOnLoad (package:flutter_map/src/layer/tile_layer.dart:972:16)
#8      ImageStreamCompleter.setImage (package:flutter/src/painting/image_stream.dart:437:25)
#9      MultiFrameImageStreamCompleter._emitFrame (package:flutter/src/painting/image_stream.dart:739:5)
#10     MultiFrameImageStreamCompleter._decodeNextFrameAndSchedule (package:flutter/src/painting/image_stream.dart:724:7)
<asynchronous suspension>
#11     MultiFrameImageStreamCompleter._handleCodecReady (package:flutter/src/painting/image_stream.dart:674:7)
#23     CachedNetworkImageProvider._loadAsync (package:cached_network_image/src/cached_network_image_provider.dart)
<asynchronous suspension>
#24     CachedNetworkImageProvider.load (package:cached_network_image/src/cached_network_image_provider.dart:45:14)
#25     ImageProvider.resolveStreamForKey.<anonymous closure> (package:flutter/src/painting/image_provider.dart:501:13)
#26     ImageCache.putIfAbsent (package:flutter/src/painting/image_cache.dart:359:22)
#27     ImageProvider.resolveStreamForKey (package:flutter/src/painting/image_provider.dart:499:80)
#28     ImageProvider.resolve.<anonymous closure> (package:flutter/src/painting/image_provider.dart:330:9)
#29     ImageProvider._createErrorHandlerAndKey.<anonymous closure>.<anonymous closure> (package:flutter/src/painting/image_provider.dart:460:26)
#30     SynchronousFuture.then (package:flutter/src/foundation/synchronous_future.dart:41:29)
#31     ImageProvider._createErrorHandlerAndKey.<anonymous closure> (package:flutter/src/painting/image_provider.dart:457:11)
#35     ImageProvider._createErrorHandlerAndKey (package:flutter/src/painting/image_provider.dart:449:16)
#36     ImageProvider.resolve (package:flutter/src/painting/image_provider.dart:327:5)
#37     new Tile (package:flutter_map/src/layer/tile_layer.dart:933:36)
#38     _TileLayerState._addTile (package:flutter_map/src/layer/tile_layer.dart:808:31)
#39     _TileLayerState._update (package:flutter_map/src/layer/tile_layer.dart:762:7)
#40     _TileLayerState._setView (package:flutter_map/src/layer/tile_layer.dart:603:7)
#41     _TileLayerState._resetView (package:flutter_map/src/layer/tile_layer.dart:573:5)
#42     _TileLayerState.initState (package:flutter_map/src/layer/tile_layer.dart:316:5)
#43     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4640:58)
#44     ComponentElement.mount (package:flutter/src/widgets/framework.dart:4476:5)
#45     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3446:14)
#46     MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5947:32)

I have not noticed this error before with an older Flutter version and since there seem to be no changes in the TileLayer that can cause this I assume this is a new check in Flutter.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions