Some kinds of fatal errors when starting the widget preview are not reported in any way that is obviously fatal to the IDE, which can cause us to show "Starting widget preview server...." endlessly. For example when the SDK contains symlinks:
Mon Mar 30 2026 [14:19:45 GMT-0300 (Horário Padrão de Brasília)] Log file started
[14:20:09] <== [{"event":"widget_preview.initializing","params":{"pid":2604}}]
[14:20:09] <== [{"event":"widget_preview.logMessage","params":{"level":"warning","message":"Invalid Widget Preview Scaffold manifest at C:\\TMP\\flutter_tools.6e737b4c\\widget_preview_scaffold4a9cbc58\\preview_manifest.json. Regenerating Widget Preview Scaffold."}}]
[14:20:09] <== [{"event":"widget_preview.logMessage","params":{"level":"status","message":"Creating widget preview scaffolding at: C:\\TMP\\flutter_tools.6e737b4c\\widget_preview_scaffold4a9cbc58"}}]
[14:20:10] <== [{"event":"widget_preview.logMessage","params":{"level":"status","message":"Creating the Widget Preview Scaffold manifest at C:\\TMP\\flutter_tools.6e737b4c\\widget_preview_scaffold4a9cbc58\\preview_manifest.json"}}]
[14:20:12] <== [{"event":"widget_preview.logMessage","params":{"level":"status","message":"Finding previews in C:\\Fontes\\_local\\Flutter\\new_project..."}}]
[14:20:31] <== [{"event":"widget_preview.logMessage","params":{"level":"status","message":"Found 18 previews."}}]
[14:20:31] <== [{"event":"widget_preview.logMessage","params":{"level":"status","message":"Launching the Widget Preview Scaffold on Web Server..."}}]
[14:20:31] <== [{"event":"widget_preview.logMessage","params":{"level":"status","message":"Launching lib\\main.dart on Web Server in debug mode..."}}]
[14:20:34] <== [{"event":"widget_preview.logMessage","params":{"level":"status","message":"Waiting for connection from debug service on Web Server..."}}]
[14:20:34] <== [{"event":"widget_preview.logMessage","params":{"level":"error","message":"Error: SDK root directory not found: /C:/Users/felipe-m/.puro/envs/stable/flutter/bin/cache/flutter_web_sdk/."}}]
[14:20:59] <== [{"event":"widget_preview.logMessage","params":{"level":"error","message":"Failed to compile application."}}]
[14:21:08] <== [{"event":"widget_preview.logMessage","params":{"level":"status","message":"Detected change in C:\\Fontes\\_local\\Flutter\\new_project\\test\\widgets\\multi_options_input_widget_test.dart."}}]
[14:21:08] <== [{"event":"widget_preview.logMessage","params":{"level":"status","message":"Finding previews in C:\\Fontes\\_local\\Flutter\\new_project\\test\\widgets\\multi_options_input_widget_test.dart..."}}]
[14:21:08] <== [{"event":"widget_preview.logMessage","params":{"level":"status","message":"Found 0 previews."}}]
[14:21:08] <== [{"event":"widget_preview.logMessage","params":{"level":"status","message":"Updated previews for file:///C:/Fontes/_local/Flutter/new_project/test/widgets/multi_options_input_widget_test.dart: []"}}]
[14:21:08] <== [{"event":"widget_preview.logMessage","params":{"level":"status","message":"Triggering reload based on change to preview set: {(path: C:\\Fontes\\_local\\Flutter\\new_project\\lib\\main.dart, uri: package:new_project/main.dart): (<snip>
[14:21:08] <== [{"event":"widget_preview.logMessage","params":{"level":"status","message":"Performing hot reload..."}}]
[14:21:08] <== [{"event":"widget_preview.logMessage","params":{"level":"status","message":"Waiting for connection from debug service on Web Server..."}}]
[14:21:08] <== [{"event":"widget_preview.logMessage","params":{"level":"error","message":"Null check operator used on a null value"}}]
[14:21:08] <== [{"event":"widget_preview.logMessage","params":{"level":"error","message":"Error: SDK root directory not found: /C:/Users/felipe-m/.puro/envs/stable/flutter/bin/cache/flutter_web_sdk/."}}]
[14:21:13] <== [{"event":"widget_preview.logMessage","params":{"level":"status","message":"Detected change in C:\\Fontes\\_local\\Flutter\\new_project\\test\\widgets\\multi_options_input_widget_test.dart."}}]
[14:21:13] <== [{"event":"widget_preview.logMessage","params":{"level":"status","message":"Finding previews in C:\\Fontes\\_local\\Flutter\\new_project\\test\\widgets\\multi_options_input_widget_test.dart..."}}]
[14:21:13] <== [{"event":"widget_preview.logMessage","params":{"level":"status","message":"Found 0 previews."}}]
Error: SDK root directory not found: /C:/Users/felipe-m/.puro/envs/stable/flutter/bin/cache/flutter_web_sdk/.
Steps to reproduce
Moving this from Dart-Code/Dart-Code#6017 (comment) at @bkonyi's request
Some kinds of fatal errors when starting the widget preview are not reported in any way that is obviously fatal to the IDE, which can cause us to show "Starting widget preview server...." endlessly. For example when the SDK contains symlinks:
The error:
Appears to be fatal - it prevents the
widget_preview.startedevent from ever arriving.Expected results
If the issue above is not actually fatal, then the
widget_preview.startedevent should still be emitted (which IDEs can use a signal that the server has finished starting up). If it is fatal, we should either crash, or provide some obvious signal to the IDE.Actual results
widget_preview.startedis never emitted and the server process never crashes. This makes it seem like the server is just still starting up endlessly to the IDE.Code sample
N/A
Screenshots or Video
N/A
Logs
Logs
Flutter Doctor output
Doctor output