-
Notifications
You must be signed in to change notification settings - Fork 29.7k
Description
Steps to reproduce
-
Create a new Flutter project with the default example code (no changes to Dart code):
flutter create multi_engine
-
On Android, define two activities
MainActivityandSecondaryActivity, both extendingFlutterActivity, and each providing its ownFlutterEnginewith the same Dart entrypoint (main). Example:class MainActivity : FlutterActivity() { override fun onCreate(savedInstanceState: android.os.Bundle?) { super.onCreate(savedInstanceState) // get display list val displayManager = getSystemService(Context.DISPLAY_SERVICE) as android.hardware.display.DisplayManager val displays = displayManager.displays for (display in displays) { android.util.Log.d("MainActivity", "Display ID: ${display.displayId}, Name: ${display.name}") if (display.displayId != 0) { // launch secondary activity for this display val intent = android.content.Intent(this, SecondaryActivity::class.java) intent.addFlags(android.content.Intent.FLAG_ACTIVITY_NEW_TASK) val option = android.app.ActivityOptions.makeBasic() if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { option.launchDisplayId = display.displayId } startActivity(intent, option.toBundle()) } } } override fun provideFlutterEngine(context: Context): FlutterEngine { val loader = FlutterInjector.instance().flutterLoader() loader.startInitialization(this) val entrypoint = DartExecutor.DartEntrypoint( loader.findAppBundlePath(), "main" ) val engine = FlutterEngine(context, null, false).apply { dartExecutor.executeDartEntrypoint(entrypoint) } return engine } } class SecondaryActivity : FlutterActivity() { override fun provideFlutterEngine(context: Context): FlutterEngine { val loader = FlutterInjector.instance().flutterLoader() loader.startInitialization(this) val entrypoint = DartExecutor.DartEntrypoint( loader.findAppBundlePath(), "main" ) val engine = FlutterEngine(context, null, false).apply { dartExecutor.executeDartEntrypoint(entrypoint) } return engine } }
-
Prepare an Android device/emulator that has two displays (e.g. an emulator with a secondary display attached).
- On the device, set the system font scale to a smaller value (i.e. change the default text size to be smaller in system settings).
- Run the Flutter app so that: -
MainActivityis shown on the primary display. -SecondaryActivityis launched on the secondary display viaActivityOptions#setLaunchDisplayId. - Wait for both activities to finish starting and show their Flutter UI.
- Trigger a hot restart from Flutter tools (e.g.
flutter runhot restart, or from the IDE). - Observe what happens on the primary display (
MainActivity).
Note: Based on the behavior, starting two
FlutterEngines from the same activity but showing them on different displays should also be able to reproduce the issue, as long as there are multiple engines and multiple displays, and the system font scale is not the default.
Expected results
- After hot restart, both Flutter engines/activities continue to work correctly on their respective displays.
- No assertion error is thrown from
PlatformDispatcherorplatform_dispatcher.dart. - All text is rendered correctly; no text layout/painting failures occur.
- Using multiple
FlutterActivityinstances, each with its ownFlutterEngine, on multiple displays with non-default font scale should be supported.
Actual results
-
On the first run, everything works as expected: both
MainActivityandSecondaryActivityrender correctly on their respective displays. -
After performing a hot restart, the
FlutterActivityon the first / primary display (MainActivity) throws an assertion error and the UI breaks. -
The error is:
_AssertionError ('dart:ui/platform_dispatcher.dart': Failed assertion: line 1525 pos 16: '<optimized out>': Flutter Error: incorrect configuration id: -2147483648.) -
The assertion is in:
flutter/bin/cache/pkg/sky_engine/lib/ui/platform_dispatcher.dartSpecifically in
_scaleAndMemoize:double? _scaleAndMemoize(int unscaledFontSize) { final int? configurationId = _configuration.configurationId; if (configurationId == null) { // The platform uses linear scaling, or the platform hasn't sent us a // configuration yet. return null; } final double? cachedValue = _cachedFontSizes?[unscaledFontSize]; if (cachedValue != null) { assert(cachedValue >= 0); return cachedValue; } final double unscaledFontSizeDouble = unscaledFontSize.toDouble(); final double fontSize = PlatformDispatcher._getScaledFontSize( unscaledFontSizeDouble, configurationId, ); if (fontSize >= 0) { return (_cachedFontSizes ??= <int, double>{})[unscaledFontSize] = fontSize; } return unscaledFontSize; switch (fontSize) { case -1: // Invalid configuration id. This error can be unrecoverable as the // _getScaledFontSize function can be destructive. assert(false, 'Flutter Error: incorrect configuration id: $configurationId.'); case final double errorCode: assert(false, 'Unknown error: GetScaledFontSize failed with $errorCode.'); } return null; }
-
When debugging this line:
final double fontSize = PlatformDispatcher._getScaledFontSize( unscaledFontSizeDouble, configurationId, );
fontSizereturns-1, and althoughconfigurationIdbecomes-2147483648(which is expected for this configuration), the engine still treats this as an invalid configuration id after performing a hot restart with multipleFlutterEngines on different displays. -
As a result, all text rendering in the affected
FlutterActivitybreaks (any widget that relies on text layout/painting fails and the UI becomes unusable). -
This problem only appears after hot restart; a clean start works fine.
Code sample
See Steps to reproduce
A minimal reproducible repository is available here:
Screenshots or Video
Logs
Logs
/SettingsChannel(26283): Cannot find config with generation: -2147483648, the oldest config is now: -2147483647
E/FlutterJNI(26283): getScaledFontSize called with configurationId -2147483648, which can't be found.
E/SettingsChannel(26283): Cannot find config with generation: -2147483648, the oldest config is now: -2147483647
E/FlutterJNI(26283): getScaledFontSize called with configurationId -2147483648, which can't be found.
E/SettingsChannel(26283): Cannot find config with generation: -2147483648, the oldest config is now: -2147483647
E/FlutterJNI(26283): getScaledFontSize called with configurationId -2147483648, which can't be found.
E/SettingsChannel(26283): Cannot find config with generation: -2147483648, the oldest config is now: -2147483647
E/FlutterJNI(26283): getScaledFontSize called with configurationId -2147483648, which can't be found.
════════ Exception caught by rendering library ═════════════════════════════════
The following assertion was thrown during performLayout():
Flutter Error: incorrect configuration id: -2147483648.
'dart:ui/platform_dispatcher.dart':
Failed assertion: line 1525 pos 16: '<optimized out>'
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=02_bug.yml
The relevant error-causing widget was:
Text Text:file:///Users/lori/Desktop/nightmare-app/multi_engine/lib/main.dart:86:16
When the exception was thrown, this was the stack:
#2 PlatformDispatcher._scaleAndMemoize (dart:ui/platform_dispatcher.dart:1525:16)
#3 PlatformDispatcher.scaleFontSize (dart:ui/platform_dispatcher.dart:1483:14)
#4 SystemTextScaler.scale (package:flutter/src/widgets/media_query.dart:2082:56)
#5 _ClampedTextScaler.scale (package:flutter/src/painting/text_scaler.dart:130:31)
#6 TextStyle.getParagraphStyle (package:flutter/src/painting/text_style.dart:1419:28)
#7 TextPainter._createParagraphStyle (package:flutter/src/painting/text_painter.dart:1090:22)
#8 TextPainter._createParagraph (package:flutter/src/painting/text_painter.dart:1202:61)
#9 TextPainter.layout (package:flutter/src/painting/text_painter.dart:1264:64)
#10 RenderParagraph._layoutTextWithConstraints (package:flutter/src/rendering/paragraph.dart:852:9)
#11 RenderParagraph.performLayout (package:flutter/src/rendering/paragraph.dart:915:5)
#12 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#13 _RenderAppBarTitleBox.performLayout (package:flutter/src/material/app_bar.dart:2232:12)
#14 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#15 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#16 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#17 MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:180:12)
#18 _ToolbarLayout.performLayout (package:flutter/src/widgets/navigation_toolbar.dart:136:31)
#19 MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:249:7)
#20 RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:420:14)
#21 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#22 RenderCustomSingleChildLayoutBox.performLayout (package:flutter/src/rendering/shifted_box.dart:1464:14)
#23 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#24 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#25 _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1481:11)
#26 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#27 RenderPadding.performLayout (package:flutter/src/rendering/shifted_box.dart:243:12)
#28 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#29 RenderPositionedBox.performLayout (package:flutter/src/rendering/shifted_box.dart:465:14)
#30 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#31 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#32 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#33 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#34 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#35 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#36 _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1481:11)
#37 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#38 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#39 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#40 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#41 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#42 RenderConstrainedBox.performLayout (package:flutter/src/rendering/proxy_box.dart:293:14)
#43 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#44 MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:180:12)
#45 _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:1041:22)
#46 MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:249:7)
#47 RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:420:14)
#48 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#49 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#50 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#51 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#52 _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1481:11)
#53 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#54 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#55 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#56 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#57 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#58 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#59 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#60 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#61 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#62 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#63 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#64 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#65 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#66 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#67 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#68 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#69 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#70 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#71 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#72 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#73 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#74 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#75 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#76 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#77 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#78 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#79 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#80 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#81 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#82 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#83 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#84 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#85 RenderOffstage.performLayout (package:flutter/src/rendering/proxy_box.dart:3848:13)
#86 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#87 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#88 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#89 _RenderTheaterMixin.layoutChild (package:flutter/src/widgets/overlay.dart:1084:13)
#90 _RenderTheater.performLayout (package:flutter/src/widgets/overlay.dart:1429:9)
#91 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#92 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#93 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#94 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#95 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#96 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#97 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#98 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#99 RenderCustomPaint.performLayout (package:flutter/src/rendering/custom_paint.dart:574:11)
#100 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#101 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#102 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#103 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#104 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#105 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#106 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#107 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#108 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#109 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#110 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#111 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:18)
#112 RenderObject.layout (package:flutter/src/rendering/object.dart:2775:7)
#113 RenderView.performLayout (package:flutter/src/rendering/view.dart:294:12)
#114 RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:2623:7)
#115 PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:1170:18)
#116 PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:1183:15)
#117 RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:629:23)
#118 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:1264:13)
#119 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:495:5)
#120 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1434:15)
#121 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1347:9)
#122 SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:1057:9)
#123 PlatformDispatcher.scheduleWarmUpFrame.<anonymous closure> (dart:ui/platform_dispatcher.dart:906:16)
#127 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:193:12)
(elided 5 frames from class _AssertionError, class _Timer, and dart:async-patch)
The following RenderObject was being processed when the exception was fired: RenderParagraph#f5122 relayoutBoundary=up14 NEEDS-LAYOUT NEEDS-PAINT
parentData: offset=Offset(0.0, 0.0) (can use size)
constraints: BoxConstraints(0.0<=w<=379.4, 0.0<=h<=Infinity)
size: MISSING
textAlign: start
textDirection: ltr
softWrap: no wrapping except at line break characters
overflow: ellipsis
textScaler: SystemTextScaler (0.85x) clamped [0.0, 1.34]
locale: en_US
maxLines: unlimited
text: TextSpan
debugLabel: ((englishLike titleLarge 2021).merge((blackMountainView titleLarge).apply)).copyWith
inherit: false
color: Color(alpha: 1.0000, red: 0.1137, green: 0.1059, blue: 0.1255, colorSpace: ColorSpace.sRGB)
family: Roboto
size: 22.0
weight: 400
letterSpacing: 0.0
baseline: alphabetic
height: 1.3x
leadingDistribution: even
decoration: Color(alpha: 1.0000, red: 0.1137, green: 0.1059, blue: 0.1255, colorSpace: ColorSpace.sRGB) TextDecoration.none
"Flutter Demo Home Page"
RenderObject: RenderParagraph#f5122 relayoutBoundary=up14 NEEDS-LAYOUT NEEDS-PAINT
parentData: offset=Offset(0.0, 0.0) (can use size)
constraints: BoxConstraints(0.0<=w<=379.4, 0.0<=h<=Infinity)
size: MISSING
textAlign: start
textDirection: ltr
softWrap: no wrapping except at line break characters
overflow: ellipsis
textScaler: SystemTextScaler (0.85x) clamped [0.0, 1.34]
locale: en_US
maxLines: unlimited
text: TextSpan
debugLabel: ((englishLike titleLarge 2021).merge((blackMountainView titleLarge).apply)).copyWith
inherit: false
color: Color(alpha: 1.0000, red: 0.1137, green: 0.1059, blue: 0.1255, colorSpace: ColorSpace.sRGB)
family: Roboto
size: 22.0
weight: 400
letterSpacing: 0.0
baseline: alphabetic
height: 1.3x
leadingDistribution: even
decoration: Color(alpha: 1.0000, red: 0.1137, green: 0.1059, blue: 0.1255, colorSpace: ColorSpace.sRGB) TextDecoration.none
"Flutter Demo Home Page"
════════════════════════════════════════════════════════════════════════════════
════════ Exception caught by rendering library ═════════════════════════════════
RenderBox was not laid out: RenderParagraph#f5122 relayoutBoundary=up14 NEEDS-PAINT
'package:flutter/src/rendering/box.dart':
Failed assertion: line 2251 pos 12: 'hasSize'
The relevant error-causing widget was:
AppBar AppBar:file:///Users/lori/Desktop/nightmare-app/multi_engine/lib/main.dart:79:15
════════════════════════════════════════════════════════════════════════════════
════════ Exception caught by rendering library ═════════════════════════════════
RenderBox was not laid out: _RenderAppBarTitleBox#28d0b relayoutBoundary=up13 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
'package:flutter/src/rendering/box.dart':
Failed assertion: line 2251 pos 12: 'hasSize'
The relevant error-causing widget was:
AppBar AppBar:file:///Users/lori/Desktop/nightmare-app/multi_engine/lib/main.dart:79:15
════════════════════════════════════════════════════════════════════════════════
════════ Exception caught by rendering library ═════════════════════════════════
RenderBox was not laid out: RenderSemanticsAnnotations#86513 relayoutBoundary=up12 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
'package:flutter/src/rendering/box.dart':
Failed assertion: line 2251 pos 12: 'hasSize'
The relevant error-causing widget was:
AppBar AppBar:file:///Users/lori/Desktop/nightmare-app/multi_engine/lib/main.dart:79:15
════════════════════════════════════════════════════════════════════════════════
════════ Exception caught by rendering library ═════════════════════════════════
Flutter Error: incorrect configuration id: -2147483648.
'dart:ui/platform_dispatcher.dart':
Failed assertion: line 1525 pos 16: '<optimized out>'
The relevant error-causing widget was:
Text Text:file:///Users/lori/Desktop/nightmare-app/multi_engine/lib/main.dart:107:19
The following RenderObject was being processed when the exception was fired: RenderParagraph#162c2 relayoutBoundary=up3 NEEDS-LAYOUT NEEDS-PAINT
RenderObject: RenderParagraph#162c2 relayoutBoundary=up3 NEEDS-LAYOUT NEEDS-PAINT
════════════════════════════════════════════════════════════════════════════════
════════ Exception caught by rendering library ═════════════════════════════════
RenderBox was not laid out: RenderParagraph#162c2 relayoutBoundary=up3 NEEDS-PAINT
'package:flutter/src/rendering/box.dart':
Failed assertion: line 2251 pos 12: 'hasSize'
The relevant error-causing widget was:
Column Column:file:///Users/lori/Desktop/nightmare-app/multi_engine/lib/main.dart:91:16
════════════════════════════════════════════════════════════════════════════════
════════ Exception caught by rendering library ═════════════════════════════════
'package:flutter/src/rendering/shifted_box.dart': Failed assertion: line 354 pos 12: 'child!.hasSize': is not true.
The relevant error-causing widget was:
Center Center:file:///Users/lori/Desktop/nightmare-app/multi_engine/lib/main.dart:88:13
════════════════════════════════════════════════════════════════════════════════
════════ Exception caught by rendering library ═════════════════════════════════
Flutter Error: incorrect configuration id: -2147483648.
'dart:ui/platform_dispatcher.dart':
Failed assertion: line 1525 pos 16: '<optimized out>'
The relevant error-causing widget was:
Text Text:file:///Users/lori/Desktop/nightmare-app/multi_engine/lib/main.dart:107:19
The following RenderObject was being processed when the exception was fired: RenderParagraph#162c2 relayoutBoundary=up3
RenderObject: RenderParagraph#162c2 relayoutBoundary=up3
════════════════════════════════════════════════════════════════════════════════
════════ Exception caught by rendering library ═════════════════════════════════
Flutter Error: incorrect configuration id: -2147483648.
'dart:ui/platform_dispatcher.dart':
Failed assertion: line 1525 pos 16: '<optimized out>'
The relevant error-causing widget was:
Text Text:file:///Users/lori/Desktop/nightmare-app/multi_engine/lib/main.dart:86:16
The following RenderObject was being processed when the exception was fired: RenderParagraph#f5122 relayoutBoundary=up14
RenderObject: RenderParagraph#f5122 relayoutBoundary=up14
════════════════════════════════════════════════════════════════════════════════Flutter Doctor output
Doctor output
[✓] Flutter (Channel stable, 3.38.4, on macOS 26.2 25C5048a darwin-arm64, locale zh-Hans-CN) [131ms]
• Flutter version 3.38.4 on channel stable at /Users/lori/SDK/flutter
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision 66dd93f9a2 (4 days ago), 2025-12-03 14:56:10 -0800
• Engine revision a5cb96369e
• Dart version 3.10.3
• DevTools version 2.51.1
• Feature flags: enable-web, enable-linux-desktop, enable-macos-desktop, enable-windows-desktop, enable-android,
enable-ios, cli-animations, enable-native-assets, omit-legacy-version-file, enable-lldb-debugging
[!] Android toolchain - develop for Android devices (Android SDK version 36.0.0) [366ms]
• Android SDK at /Volumes/Mac/Android/sdk
• Emulator version 35.4.9.0 (build_id 13025442) (CL:N/A)
✗ cmdline-tools component is missing.
Try installing or updating Android Studio.
Alternatively, download the tools from https://developer.android.com/studio#command-line-tools-only and make sure to set
the ANDROID_HOME environment variable.
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/to/macos-android-setup for more details.
[!] Xcode - develop for iOS and macOS [641ms]
✗ Xcode installation is incomplete; a full installation is necessary for iOS and macOS development.
Download at: https://developer.apple.com/xcode/
Or install Xcode via the App Store.
Once installed, run:
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
sudo xcodebuild -runFirstLaunch
• CocoaPods version 1.16.2
[✓] Chrome - develop for the web [29ms]
• Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
[!] Proxy Configuration [29ms]
• HTTP_PROXY is set
! NO_PROXY is not set
[✓] Connected device (5 available) [1,565ms]
• OPD2413 (mobile) • 192.168.31.171:5555 • android-arm64 • Android 15 (API 35)
• PLK110 (mobile) • 192.168.31.219:5555 • android-arm64 • Android 16 (API 36)
• Android SDK built for arm64 (mobile) • emulator-5556 • android-arm64 • Android 15 (API 35) (emulator)
• macOS (desktop) • macos • darwin-arm64 • macOS 26.2 25C5048a darwin-arm64
• Chrome (web) • chrome • web-javascript • Google Chrome 142.0.7444.176
[✓] Network resources [3.7s]
• All expected network resources are available.
! Doctor found issues in 3 categories.