Skip to content

palette_generator Bad state: Future already completed #22754

@afnx

Description

@afnx

I'm working with a package which is called palette_generator. I see an error when I run my app with a few line codes to use the package. I thought that the error might have caused by my code, but I couldn't figure it out. Finally, I tried to edit the source code of this package. Then, it worked without any error. However, I am not sure that the solution that I found is consistent. I'd like to share the issue and my solution in order to help other people and contribute the package.

The Issue

The error appears when I try to call the following function inside initState(). The function is the same with the one which is shown as an example in its documentation:

PaletteGenerator _paletteGenerator;

void initState() {
    super.initState();
    _updatePaletteGenerator(region);
}

Future<void> _updatePaletteGenerator(Rect newRegion) async {
    paletteGenerator = await PaletteGenerator.fromImageProvider(
      widget.image,
      size: widget.imageSize,
      region: newRegion,
      maximumColorCount: 20,
    );
    setState(() {});
}

The error looks this:

flutter: ══╡ EXCEPTION CAUGHT BY IMAGE RESOURCE SERVICE ╞════════════════════════════════════════════════════
flutter: The following StateError was thrown by an image listener:
flutter: Bad state: Future already completed
flutter:
flutter: When the exception was thrown, this was the stack:
flutter: #1      PaletteGenerator.fromImageProvider.imageListener (package:palette_generator/palette_generator.dart:188:22)
flutter: #2      ImageStreamCompleter.setImage (package:flutter/src/painting/image_stream.dart:282:17)
flutter: #3      MultiFrameImageStreamCompleter._emitFrame (package:flutter/src/painting/image_stream.dart:519:5)
flutter: #4      MultiFrameImageStreamCompleter._decodeNextFrameAndSchedule (package:flutter/src/painting/image_stream.dart:512:7)
flutter: <asynchronous suspension>
flutter: #5      MultiFrameImageStreamCompleter.addListener (package:flutter/src/painting/image_stream.dart:528:7)
flutter: #6      ImageStream.addListener (package:flutter/src/painting/image_stream.dart:156:25)
flutter: #7      PaletteGenerator.fromImageProvider (package:palette_generator/palette_generator.dart:200:12)
flutter: <asynchronous suspension>
flutter: #8      _TestScreenState._updatePaletteGenerator (package:test_app/screens/test_screen.dart:28:22)
flutter: #9      _TestScreenState.initState (package:test_app/screens/test_screen.dart:15:5)
flutter: #10     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3763:58)
flutter: #11     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3629:5)
flutter: #12     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2919:14)
flutter: #13     Element.updateChild (package:flutter/src/widgets/framework.dart:2722:12)
flutter: #14     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4666:14)
flutter: #15     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2919:14)
flutter: #16     Element.updateChild (package:flutter/src/widgets/framework.dart:2722:12)
flutter: #17     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16)
flutter: #18     Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5)
flutter: #19     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3634:5)
flutter: #20     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3629:5)
flutter: #21     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2919:14)
flutter: #22     Element.updateChild (package:flutter/src/widgets/framework.dart:2722:12)
flutter: #23     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4666:14)
flutter: #24     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2919:14)
flutter: #25     Element.updateChild (package:flutter/src/widgets/framework.dart:2722:12)
flutter: #26     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4666:14)
flutter: #27     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2919:14)
flutter: #28     MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4771:32)
flutter: #29     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2919:14)
flutter: #30     Element.updateChild (package:flutter/src/widgets/framework.dart:2722:12)
flutter: #31     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16)
flutter: #32     Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5)
flutter: #33     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3634:5)
flutter: #34     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3781:11)
flutter: #35     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3629:5)
flutter: #36     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2919:14)
flutter: #37     Element.updateChild (package:flutter/src/widgets/framework.dart:2722:12)
flutter: #38     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4666:14)
flutter: #39     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2919:14)
flutter: #40     Element.updateChild (package:flutter/src/widgets/framework.dart:2722:12)
flutter: #41     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16)
flutter: #42     Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5)
flutter: #43     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3634:5)
flutter: #44     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3781:11)
flutter: #45     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3629:5)
flutter: #46     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2919:14)
flutter: #47     Element.updateChild (package:flutter/src/widgets/framework.dart:2722:12)
flutter: #48     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4666:14)
flutter: #49     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2919:14)
flutter: #50     Element.updateChild (package:flutter/src/widgets/framework.dart:2722:12)
flutter: #51     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16)
flutter: #52     Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5)
flutter: #53     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3634:5)
flutter: #54     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3781:11)
flutter: #55     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3629:5)
flutter: #56     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2919:14)
flutter: #57     Element.updateChild (package:flutter/src/widgets/framework.dart:2722:12)
flutter: #58     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4666:14)
flutter: #59     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2919:14)
flutter: #60     Element.updateChild (package:flutter/src/widgets/framework.dart:2722:12)
flutter: #61     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16)
flutter: #62     Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5)
flutter: #63     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3634:5)
flutter: #64     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3781:11)
flutter: #65     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3629:5)
flutter: #66     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2919:14)
flutter: #67     Element.updateChild (package:flutter/src/widgets/framework.dart:2722:12)
flutter: #68     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16)
flutter: #69     Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5)
flutter: #70     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3634:5)
flutter: #71     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3629:5)
flutter: #72     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2919:14)
flutter: #73     Element.updateChild (package:flutter/src/widgets/framework.dart:2722:12)
flutter: #74     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16)
flutter: #75     Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5)
flutter: #76     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3634:5)
flutter: #77     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3781:11)
flutter: #78     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3629:5)
flutter: #79     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2919:14)
flutter: #80     Element.updateChild (package:flutter/src/widgets/framework.dart:2722:12)
flutter: #81     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4666:14)
flutter: #82     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2919:14)
flutter: #83     Element.updateChild (package:flutter/src/widgets/framework.dart:2722:12)
flutter: #84     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16)
flutter: #85     Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5)
flutter: #86     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3634:5)
flutter: #87     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3629:5)
flutter: #88     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2919:14)
flutter: #89     Element.updateChild (package:flutter/src/widgets/framework.dart:2722:12)
flutter: #90     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4666:14)
flutter: #91     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2919:14)
flutter: #92     Element.updateChild (package:flutter/src/widgets/framework.dart:2722:12)
flutter: #93     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16)
flutter: #94     Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5)
flutter: #95     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3634:5)
flutter: #96     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3781:11)
flutter: #97     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3629:5)
flutter: #98     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2919:14)
flutter: #99     Element.updateChild (package:flutter/src/widgets/framework.dart:2722:12)
flutter: #100    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16)
flutter: #101    Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5)
flutter: #102    ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3634:5)
flutter: #103    ComponentElement.mount (package:flutter/src/widgets/framework.dart:3629:5)
flutter: #104    Element.inflateWidget (package:flutter/src/widgets/framework.dart:2919:14)
flutter: #105    Element.updateChild (package:flutter/src/widgets/framework.dart:2722:12)
flutter: #106    SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4666:14)
flutter: #107    Element.inflateWidget (package:flutter/src/widgets/framework.dart:2919:14)
flutter: #108    Element.updateChild (package:flutter/src/widgets/framework.dart:2722:12)
flutter: #109    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16)
flutter: #110    Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5)
flutter: #111    ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3634:5)
flutter: #112    ComponentElement.mount (package:flutter/src/widgets/framework.dart:3629:5)
flutter: #113    Element.inflateWidget (package:flutter/src/widgets/framework.dart:2919:14)
flutter: #114    Element.updateChild (package:flutter/src/widgets/framework.dart:2722:12)
flutter: #115    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16)
flutter: #116    Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5)
flutter: #117    ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3634:5)
flutter: #118    StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3781:11)
flutter: #119    ComponentElement.mount (package:flutter/src/widgets/framework.dart:3629:5)
flutter: #120    Element.inflateWidget (package:flutter/src/widgets/framework.dart:2919:14)
flutter: #121    Element.updateChild (package:flutter/src/widgets/framework.dart:2722:12)
flutter: #122    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16)
flutter: #123    Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5)
flutter: #124    ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3634:5)
flutter: #125    StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3781:11)
flutter: #126    ComponentElement.mount (package:flutter/src/widgets/framework.dart:3629:5)
flutter: #127    Element.inflateWidget (package:flutter/src/widgets/framework.dart:2919:14)
flutter: #128    Element.updateChild (package:flutter/src/widgets/framework.dart:2722:12)
flutter: #129    RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:4449:32)
flutter: #130    MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4781:17)
flutter: #131    Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15)
flutter: #132    _TheatreElement.update (package:flutter/src/widgets/overlay.dart:507:16)
flutter: #133    Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15)
flutter: #134    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16)
flutter: #135    Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5)
flutter: #136    StatefulElement.update (package:flutter/src/widgets/framework.dart:3811:5)
flutter: #137    Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15)
flutter: #138    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16)
flutter: #139    Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5)
flutter: #140    ProxyElement.update (package:flutter/src/widgets/framework.dart:3921:5)
flutter: #141    Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15)
flutter: #142    SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4673:14)
flutter: #143    Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15)
flutter: #144    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16)
flutter: #145    Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5)
flutter: #146    StatefulElement.update (package:flutter/src/widgets/framework.dart:3811:5)
flutter: #147    Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15)
flutter: #148    SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4673:14)
flutter: #149    Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15)
flutter: #150    SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4673:14)
flutter: #151    Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15)
flutter: #152    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16)
flutter: #153    Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5)
flutter: #154    BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2255:33)
flutter: #155    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:653:20)
flutter: #156    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:208:5)
flutter: #157    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:990:15)
flutter: #158    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:930:9)
flutter: #159    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:842:5)
flutter: #160    _invoke (dart:ui/hooks.dart:128:13)
flutter: #161    _drawFrame (dart:ui/hooks.dart:117:3)
flutter: (elided one frame from package dart:async)
flutter: ════════════════════════════════════════════════════════════════════════════════════════════════════

The Solution

I replaced this code in package:palette_generator/palette_generator.dart:188:22:

imageCompleter.complete(info.image);

With this:

if (!imageCompleter.isCompleted) {
    imageCompleter.complete(info.image);
}

Metadata

Metadata

Assignees

Labels

p: palette_generatorPalette generator packagepackageflutter/packages repository. See also p: labels.waiting for customer responseThe Flutter team cannot make further progress on this issue until the original reporter responds

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions