Repository navigation
Open
Labels
P2Important issues not at the top of the work listImportant issues not at the top of the work lista: error messageError messages from the Flutter frameworkError messages from the Flutter frameworkcustomer: castawayf: selectionSelectableRegion, SelectionArea, SelectionContainer, Selectable, and related APIsSelectableRegion, SelectionArea, SelectionContainer, Selectable, and related APIsfound in release: 3.22Found to occur in 3.22Found to occur in 3.22found in release: 3.24Found to occur in 3.24Found to occur in 3.24has reproducible stepsThe issue has been confirmed reproducible and is ready to work onThe issue has been confirmed reproducible and is ready to work onp: go_routerThe go_router packageThe go_router packagepackageflutter/packages repository. See also p: labels.flutter/packages repository. See also p: labels.team-ecosystemOwned by Ecosystem teamOwned by Ecosystem teamtriaged-ecosystemTriaged by Ecosystem teamTriaged by Ecosystem team
Description
Steps to reproduce
Execute the code sample (tested on web or macos)
Expected results
To not throw any error
Actual results
The following assertion was thrown during a scheduler callback:
RenderBox was not laid out: RenderFractionalTranslation#32ab0 NEEDS-LAYOUT NEEDS-PAINT
'package:flutter/src/rendering/box.dart':
Failed assertion: line 2165 pos 12: 'hasSize'But nothing visually wrong.
Code sample
Code sample
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
final router = GoRouter(
// Default to the nested location
// Or for a more realistic use-case, navigate to the url /a/b on the web
initialLocation: '/root/sub',
routes: [
GoRoute(
path: '/root',
builder: (_, __) {
// With selection area here, error will occur
return const SelectionArea(
child: Column(
children: [
// Must be at least two selectable texts
Text('rootA'),
Text('rootB'),
],
),
);
},
routes: [
GoRoute(
path: 'sub',
builder: (_, __) {
return const SelectionArea(
child: Column(
children: [
// Must be at least two selectable texts
Text('subA'),
Text('subB'),
],
),
);
},
),
],
),
],
);
return MaterialApp.router(
routerConfig: router,
);
}
}
Screenshots or Video
Screenshots / Video demonstration
[Upload media here]
Logs
Logs
Web:
Launching lib/test_main.dart on Chrome in debug mode...
Waiting for connection from debug service on Chrome...
This app is linked to the debug service: ws://127.0.0.1:56108/pmYkwM1S-38=/ws
Debug service listening on ws://127.0.0.1:56108/pmYkwM1S-38=/ws
Debug service listening on ws://127.0.0.1:56108/pmYkwM1S-38=/ws
======== Exception caught by scheduler library =====================================================
The following assertion was thrown during a scheduler callback:
Assertion failed: file:///opt/homebrew/Caskroom/flutter/3.22.2/flutter/packages/flutter/lib/src/rendering/box.dart:2165:12
hasSize
"RenderBox was not laid out: RenderFractionalTranslation#d1f01 NEEDS-LAYOUT NEEDS-PAINT"
When the exception was thrown, this was the stack:
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 296:3 throw_
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 29:3 assertFailed
packages/flutter/src/rendering/box.dart 2165:12 get size
packages/flutter/src/rendering/proxy_box.dart 2936:29 applyPaintTransform
packages/flutter/src/rendering/object.dart 3354:22 getTransformTo
packages/flutter/src/rendering/paragraph.dart 2003:22 getTransformTo
packages/flutter/src/widgets/selectable_region.dart 1925:8 [_compareScreenOrder]
dart-sdk/lib/internal/sort.dart 69:51 _insertionSort
dart-sdk/lib/internal/sort.dart 58:7 _doSort
dart-sdk/lib/internal/sort.dart 33:5 sort
dart-sdk/lib/_internal/js_dev_runtime/private/js_array.dart 471:12 sort]
packages/flutter/src/widgets/selectable_region.dart 1824:70 <fn>
packages/flutter/src/widgets/selectable_region.dart 1824:75 [_flushAdditions]
packages/flutter/src/widgets/selectable_region.dart 1818:7 [_updateSelectables]
packages/flutter/src/widgets/selectable_region.dart 1797:9 runScheduledTask
packages/flutter/src/scheduler/binding.dart 1392:7 [_invokeFrameCallback]
packages/flutter/src/scheduler/binding.dart 1326:11 handleDrawFrame
packages/flutter/src/scheduler/binding.dart 1035:9 <fn>
dart-sdk/lib/_internal/js_dev_runtime/private/isolate_helper.dart 48:11 internalCallback
====================================================================================================macOS:
Launching lib/test_main.dart on macOS in debug mode...
Building macOS application...
--- xcodebuild: WARNING: Using the first of multiple matching destinations:
{ platform:macOS, arch:arm64, id:00006030-0008311802D0001C, name:My Mac }
{ platform:macOS, arch:x86_64, id:00006030-0008311802D0001C, name:My Mac }
✓ Built build/macos/Build/Products/Debug/swi_toolbox.app
[IMPORTANT:flutter/shell/platform/darwin/graphics/FlutterDarwinContextMetalSkia.mm(66)] Using the Skia rendering backend (Metal).
Debug service listening on ws://127.0.0.1:56427/06ZpCvy9xOk=/ws
Syncing files to device macOS...
======== Exception caught by scheduler library =====================================================
The following assertion was thrown during a scheduler callback:
RenderBox was not laid out: RenderFractionalTranslation#32ab0 NEEDS-LAYOUT NEEDS-PAINT
'package:flutter/src/rendering/box.dart':
Failed assertion: line 2165 pos 12: 'hasSize'
Either the assertion indicates an error in the framework itself, or we should provide substantially more information in this error message to help you determine and fix the underlying cause.
In either case, please report this assertion by filing a bug on GitHub:
https://github.com/flutter/flutter/issues/new?template=2_bug.yml
When the exception was thrown, this was the stack:
#2 RenderBox.size (package:flutter/src/rendering/box.dart:2165:12)
#3 RenderFractionalTranslation.applyPaintTransform (package:flutter/src/rendering/proxy_box.dart:2936:24)
#4 RenderObject.getTransformTo (package:flutter/src/rendering/object.dart:3354:24)
#5 _SelectableFragment.getTransformTo (package:flutter/src/rendering/paragraph.dart:2003:22)
#6 MultiSelectableSelectionContainerDelegate._compareScreenOrder (package:flutter/src/widgets/selectable_region.dart:1925:9)
#7 Sort._insertionSort (dart:_internal/sort.dart:69:36)
#8 Sort._doSort (dart:_internal/sort.dart:58:7)
#9 Sort.sort (dart:_internal/sort.dart:33:5)
#10 ListBase.sort (dart:collection/list.dart:321:10)
#11 MultiSelectableSelectionContainerDelegate._flushAdditions (package:flutter/src/widgets/selectable_region.dart:1824:70)
#12 MultiSelectableSelectionContainerDelegate._updateSelectables (package:flutter/src/widgets/selectable_region.dart:1818:7)
#13 MultiSelectableSelectionContainerDelegate._scheduleSelectableUpdate.runScheduledTask (package:flutter/src/widgets/selectable_region.dart:1797:9)
#14 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1392:15)
#15 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1326:11)
#16 SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:1035:9)
#17 PlatformDispatcher.scheduleWarmUpFrame.<anonymous closure> (dart:ui/platform_dispatcher.dart:837:16)
#21 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12)
(elided 5 frames from class _AssertionError, class _Timer, and dart:async-patch)
====================================================================================================
2024-07-10 15:23:49.211 swi_toolbox[3194:1234378] WARNING: Secure coding is automatically enabled for restorable state! However, not on all supported macOS versions of this application. Opt-in to secure coding explicitly by implementing NSApplicationDelegate.applicationSupportsSecureRestorableState:.Flutter Doctor output
Doctor output
[✓] Flutter (Channel stable, 3.22.2, on macOS 14.6 23G5061b darwin-arm64, locale en-US)
• Flutter version 3.22.2 on channel stable at /opt/homebrew/Caskroom/flutter/3.22.2/flutter
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision 761747bfc5 (5 weeks ago), 2024-06-05 22:15:13 +0200
• Engine revision edd8546116
• Dart version 3.4.3
• DevTools version 2.34.3
[!] Android toolchain - develop for Android devices (Android SDK version 35.0.0)
• Android SDK at /Users/swi-oberhauser/Library/Android/sdk
✗ cmdline-tools component is missing
Run `path/to/sdkmanager --install "cmdline-tools;latest"`
See https://developer.android.com/studio/command-line for more details.
✗ Android license status unknown.
Run `flutter doctor --android-licenses` to accept the SDK licenses.
See https://flutter.dev/docs/get-started/install/macos#android-setup for more details.
[✓] Xcode - develop for iOS and macOS (Xcode 15.4)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Build 15F31d
• CocoaPods version 1.15.2
[✓] Chrome - develop for the web
• Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
[!] Android Studio (not installed)
• Android Studio not found; download from https://developer.android.com/studio/index.html
(or visit https://flutter.dev/docs/get-started/install/macos#android-setup for detailed instructions).
[✓] IntelliJ IDEA Ultimate Edition (version 2024.1.3)
• IntelliJ at /Applications/IntelliJ IDEA.app
• Flutter plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/6351-dart
[✓] IntelliJ IDEA Community Edition (version 2024.1.4)
• IntelliJ at /Applications/IntelliJ IDEA CE.app
• Flutter plugin version 80.0.2
• Dart plugin version 241.17890.8
[✓] Connected device (3 available)
• macOS (desktop) • macos • darwin-arm64 • macOS 14.6 23G5061b darwin-arm64
• Mac Designed for iPad (desktop) • mac-designed-for-ipad • darwin • macOS 14.6 23G5061b darwin-arm64
• Chrome (web) • chrome • web-javascript • Google Chrome 126.0.6478.127
[✓] Network resources
• All expected network resources are available.
! Doctor found issues in 2 categoriesRelated
Reacted by Luz Godoy, Wahab Alshahin, Harshit Kumar , Paul Charlton, Orkun Duman, David Miguel Lozano, franboladoruiz, sofmon, Valentin Vignal, MysteriousPotato and 4 more
Metadata
Metadata
Assignees
Labels
P2Important issues not at the top of the work listImportant issues not at the top of the work lista: error messageError messages from the Flutter frameworkError messages from the Flutter frameworkcustomer: castawayf: selectionSelectableRegion, SelectionArea, SelectionContainer, Selectable, and related APIsSelectableRegion, SelectionArea, SelectionContainer, Selectable, and related APIsfound in release: 3.22Found to occur in 3.22Found to occur in 3.22found in release: 3.24Found to occur in 3.24Found to occur in 3.24has reproducible stepsThe issue has been confirmed reproducible and is ready to work onThe issue has been confirmed reproducible and is ready to work onp: go_routerThe go_router packageThe go_router packagepackageflutter/packages repository. See also p: labels.flutter/packages repository. See also p: labels.team-ecosystemOwned by Ecosystem teamOwned by Ecosystem teamtriaged-ecosystemTriaged by Ecosystem teamTriaged by Ecosystem team
Type
Projects
- StatusShow more project fieldsIn progress
Activity
danagbemava-nc commentedon Jul 11, 2024
Reproducible using the code sample provided above.
flutter doctor -v
stuartmorgan-g commentedon Jul 16, 2024
Framework team: is it expected that a package bug could cause this error? It's not clear to me from the stack.
46 remaining items
Add red/green tests for _compareScreenOrder catch branches
Also add red/green tests for text.dart _compareScreenOrder
davidmigloz commentedon Apr 10, 2026
Quick follow-up: the framework PR is up: #184900.
The "Proposed framework fix" I sketched above didn't work out. Wrapping non-current route content in
SelectionContainer.disabledat_ModalScopeState.build()can't reach selectables inside nestedSelectionArea/SelectableRegionsubtrees: those widgets install their ownSelectionContainer(registrar: this, ...)inside the route (selectable_region.dart:1944) that shadows the disabled outer scope, so the route-level wrapper has no effect on the code path that actually crashes.The PR instead adds a surgical try/catch guard in both
_compareScreenOrderoverrides (selectable_region.dartandtext.dart), catchingStateError/AssertionErrorthrown from unlaid-outRenderBoxes and returning0. It's a crash guard at sort time rather than a structural fix, the dead-zone behavior described in #182573 is unchanged, but it eliminates the crash across all three repro approaches (A / B / C) in https://github.com/davidmigloz/flutter_selection_crash. Full rationale, red/green test coverage, and the long-term structural-fix direction are in the PR description.test: add _NonOpaquePage isolation variant for approach H (flutter/fl…
Guard _compareScreenOrder against unlaid-out selectables
Add red/green tests for _compareScreenOrder catch branches
Also add red/green tests for text.dart _compareScreenOrder
Guard _compareScreenOrder against unlaid-out selectables
Add red/green tests for _compareScreenOrder catch branches
Also add red/green tests for text.dart _compareScreenOrder
Stop filing a framework selection-sort race we cannot fix