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
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 testin both Flutter 3.7 and 3.10Expected results
Just like Flutter 3.7, it passes:
Actual results
In 3.10, it fails (see logs below)
Code sample
Code sample
Screenshots or Video
Screenshots / Video demonstration
[Upload media here]
Logs
Logs
Flutter Doctor output
Doctor output
[Paste your output here]