-
Notifications
You must be signed in to change notification settings - Fork 300
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support hot-reload / hot-restart using vm service protocol #2708
Comments
@bkonyi should there be something like a reloadSources service/extension registered when running a Dart script? I can see the VM Service has a (Also, the original issue here mentions Restart too - but I don't see anything in the docs about that - is it also available through the Dart VM without Flutter?) |
I may have been mistaken about the ability to do Hot Restart without Flutter. |
Ah, got it. It would be good to support Hot Reload still - but it'd be nice to do it consistently with Flutter (eg. we use the presence of some VM Service to know it's available, and call it via that service) so the extension doesn't need to have logic about when it may/may not be available. |
Correct, the service protocol doesn't actually implement Hot Restart. That's solely a Flutter extension of the protocol. The VM service protocol does support |
Ah, sounds like there does need to be two paths:
The second is all already there, the first would just be adding a new Dart: Hot Reload command that is visible only when running a non-Flutter app, that just calls |
There's now an additional command Dart: Hot Reload which will call reloadSources for each isolate when debugging non-Flutter apps: Actually, Flutter: Hot Reload and Dart: Hot Reload call the same thing (so using either will have the same effect), it's the debug adapter that actually controls which code is run. For Flutter, we need to go through Flutter because otherwise I think some code to rebuild the widget tree could be skipped. |
Does this work with reload on save or do you have to manually trigger the reload? |
@fuzzybinary right now you have to run the command. I'm not sure I'd want to enable it by default, although perhaps we could add a (btw there's a beta with the above command available at https://github.com/Dart-Code/Dart-Code/releases/tag/v3.28.0-beta.1 if you want to try it out before the release) |
Actually, there's probably some inconsistency here.. If you run a Flutter app and a Dart app at the same time, saving a file probably will reload both, because it will unconditionally send the request to both. So if we were to support both, we should probably improve that too. |
Supporting hot-reload-on-save properly turns out to be a bit trickier than I thought and will require some refactoring, so I'm going to leave that until the next release (I've filed #3637). In the meantime, I'm going to ensure the Dart reload is not fired by Flutter's reload-on-save, because it could be unreliable (for example it would not debounce if Flutter supports its own internal debounce, which would result in it triggering a lot when you do things like Save All). |
The Dart VM Service protocol now supports hot reload and hot restart, meaning Dart command line apps should support proper code hot reloading. It would be nice if Dart-Code utilized this method instead of relying on the flutter tool.
The text was updated successfully, but these errors were encountered: