@@ -345,6 +345,21 @@ class EvalOnDartLibrary extends DisposableController
345345
346346 static int _nextAsyncEvalId = 0 ;
347347
348+ Future <InstanceRef > _safeEvalWithRetry (
349+ EvalOnDartLibrary eval,
350+ String expression, {
351+ required Disposable ? isAlive,
352+ Map <String , String >? scope,
353+ }) async {
354+ try {
355+ return await eval.safeEval (expression, isAlive: isAlive, scope: scope);
356+ } catch (_) {
357+ // In some environments, bootstrap evals can race isolate readiness.
358+ await Future <void >.delayed (const Duration (milliseconds: 50 ));
359+ return await eval.safeEval (expression, isAlive: isAlive, scope: scope);
360+ }
361+ }
362+
348363 EvalOnDartLibrary ? _dartDeveloperEvalCache;
349364 EvalOnDartLibrary get _dartDeveloperEval {
350365 return _dartDeveloperEvalCache ?? = EvalOnDartLibrary (
@@ -395,11 +410,13 @@ class EvalOnDartLibrary extends DisposableController
395410 final readerGroup = 'asyncEval-$futureId ' ;
396411
397412 /// Workaround to not being able to import libraries directly from an evaluation
398- final postEventRef = await _dartDeveloperEval.safeEval (
413+ final postEventRef = await _safeEvalWithRetry (
414+ _dartDeveloperEval,
399415 'postEvent' ,
400416 isAlive: isAlive,
401417 );
402- final widgetInspectorServiceRef = await _widgetInspectorEval.safeEval (
418+ final widgetInspectorServiceRef = await _safeEvalWithRetry (
419+ _widgetInspectorEval,
403420 'WidgetInspectorService.instance' ,
404421 isAlive: isAlive,
405422 );
@@ -438,7 +455,7 @@ class EvalOnDartLibrary extends DisposableController
438455
439456 final resultRef = await evalInstance (
440457 '() {'
441- ' final result = widgetInspectorService.toObject("$readerId ", "$readerGroup ") as List ;'
458+ ' final result = widgetInspectorService.toObject("$readerId ", "$readerGroup ");'
442459 ' widgetInspectorService.disposeGroup("$readerGroup ");'
443460 ' return result;'
444461 '}()' ,
0 commit comments