Skip to content

IndexedStack no longer supports Positioned #127553

Description

@fzyzcjy

Cause analysis: Looks like the inserted Visibility causes the problem.
Possible workaround: Use Stack instead...

Is there an existing issue for this?

Steps to reproduce

flutter test in both Flutter 3.7 and 3.10

Expected results

Just like Flutter 3.7, it passes:

00:16 +1: All tests passed!

Actual results

In 3.10, it fails (see logs below)

Code sample

Code sample
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
  testWidgets('IndexedStack + Positioned', (tester) async {
    await tester.pumpWidget(MaterialApp(
      home: Scaffold(
        body: IndexedStack(
          children: [
            Positioned(
              child: Container(),
            )
          ],
        ),
      ),
    ));
  });
}

Screenshots or Video

Screenshots / Video demonstration

[Upload media here]

Logs

Logs
(base) ➜  bug fvm spawn 3.10.1 test
Spawning version "3.10.1"...
hi jobs=null
00:00 +0: loading /Users/tom/RefCode/bug/test/hi_test.dart                                                                                              00:01 +0: loading /Users/tom/RefCode/bug/test/hi_test.dart                                                                                              00:02 +0: loading /Users/tom/RefCode/bug/test/hi_test.dart                                                                                              00:02 +0: IndexedStack + Positioned                                                                                                                     00:03 +0: IndexedStack + Positioned                                                                                                                     00:03 +0: IndexedStack + Positioned                                                                                                                                                                    
══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
The following assertion was thrown while applying parent data.:
Incorrect use of ParentDataWidget.
The ParentDataWidget Positioned wants to apply ParentData of type StackParentData to a RenderObject,
which has been set up to accept ParentData of incompatible type ParentData.
Usually, this means that the Positioned widget has the wrong ancestor RenderObjectWidget. Typically,
Positioned widgets are placed directly inside Stack widgets.
The offending Positioned is currently placed inside a _Visibility widget.
The ownership chain for the RenderObject that received the incompatible parent data was:
  LimitedBox ← Container ← Positioned ← _Visibility ← _VisibilityScope ← Visibility ←
_RawIndexedStack ← IndexedStack ← KeyedSubtree-[GlobalKey#994f0] ← _BodyBuilder ← ⋯

When the exception was thrown, this was the stack:
#0      RenderObjectElement._updateParentData.<anonymous closure> (package:flutter/src/widgets/framework.dart:6231:11)
#1      RenderObjectElement._updateParentData (package:flutter/src/widgets/framework.dart:6248:6)
#2      RenderObjectElement.attachRenderObject (package:flutter/src/widgets/framework.dart:6271:7)
#3      RenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5943:5)
#4      SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6434:11)
...     Normal element mounting (28 frames)
#32     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3971:16)
#33     MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6570:36)
#34     MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6582:32)
...     Normal element mounting (31 frames)
#65     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3971:16)
#66     MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6570:36)
#67     MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6582:32)
...     Normal element mounting (324 frames)
#391    Element.inflateWidget (package:flutter/src/widgets/framework.dart:3971:16)
#392    MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6570:36)
#393    MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6582:32)
...     Normal element mounting (435 frames)
#828    Element.inflateWidget (package:flutter/src/widgets/framework.dart:3971:16)
#829    Element.updateChild (package:flutter/src/widgets/framework.dart:3702:20)
#830    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#831    Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#832    ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5)
#833    Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#834    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#835    StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11)
#836    Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#837    StatefulElement.update (package:flutter/src/widgets/framework.dart:5274:5)
#838    Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#839    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#840    Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#841    ProxyElement.update (package:flutter/src/widgets/framework.dart:5417:5)
#842    Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#843    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5111:16)
#844    Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#845    StatelessElement.update (package:flutter/src/widgets/framework.dart:5162:5)
#846    Element.updateChild (package:flutter/src/widgets/framework.dart:3686:15)
#847    RenderObjectToWidgetElement._rebuild (package:flutter/src/widgets/binding.dart:1240:16)
#848    RenderObjectToWidgetElement.update (package:flutter/src/widgets/binding.dart:1217:5)
#849    RenderObjectToWidgetElement.performRebuild (package:flutter/src/widgets/binding.dart:1231:7)
#850    Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7)
#851    BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2780:19)
#852    AutomatedTestWidgetsFlutterBinding.drawFrame (package:flutter_test/src/binding.dart:1398:19)
#853    RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:358:5)
#854    SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1284:15)
#855    SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1214:9)
#856    AutomatedTestWidgetsFlutterBinding.pump.<anonymous closure> (package:flutter_test/src/binding.dart:1248:9)
#859    TestAsyncUtils.guard (package:flutter_test/src/test_async_utils.dart:68:41)
#860    AutomatedTestWidgetsFlutterBinding.pump (package:flutter_test/src/binding.dart:1234:27)
#861    WidgetTester._pumpWidget (package:flutter_test/src/widget_tester.dart:592:20)
#862    WidgetTester.pumpWidget.<anonymous closure> (package:flutter_test/src/widget_tester.dart:577:14)
#865    TestAsyncUtils.guard (package:flutter_test/src/test_async_utils.dart:68:41)
#866    WidgetTester.pumpWidget (package:flutter_test/src/widget_tester.dart:576:27)
#867    main.<anonymous closure> (file:///Users/tom/RefCode/bug/test/hi_test.dart:6:18)
#868    testWidgets.<anonymous closure>.<anonymous closure> (package:flutter_test/src/widget_tester.dart:170:29)
<asynchronous suspension>
<asynchronous suspension>
(elided 5 frames from dart:async and package:stack_trace)
════════════════════════════════════════════════════════════════════════════════════════════════════
00:03 +0 -1: IndexedStack + Positioned [E]                                                                                                                                                             
  Test failed. See exception logs above.
  The test description was: IndexedStack + Positioned
  

To run this test again: /Users/tom/fvm/versions/3.10.1/bin/cache/dart-sdk/bin/dart test /Users/tom/RefCode/bug/test/hi_test.dart -p vm --plain-name 'IndexedStack + Positioned'
00:03 +0 -1: Some tests failed. 

Flutter Doctor output

Doctor output
[Paste your output here]

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Important issues not at the top of the work listc: regressionIt was better in the past than it is nowfound in release: 3.10Found to occur in 3.10found in release: 3.11Found to occur in 3.11frameworkflutter/packages/flutter repository. See also f: labels.has reproducible stepsThe issue has been confirmed reproducible and is ready to work onteam-frameworkOwned by Framework teamtriaged-frameworkTriaged by Framework team

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions