如何使用emacs编辑flutter项目?

问题描述 投票:0回答:2

信息:我是一名 Emacs 用户,曾经使用 React-Native 开发移动应用程序。

描述

最近在尝试开发一个flutter应用程序,卡在

hot-reload
部分,希望当我更改
lib/*dart
时flutter能够自动重新加载。

我正在考虑的是观察

lib/*dart
的修改,当它发生时,自动将
r
传递给 flutter 进程。

如何才能到达

flutter run
流程?

解决方案

Emacs 解决方案

一遍又一遍地阅读保存时热重载后,我更新了我的 Emacs 的配置文件:

(require 'dart-mode)
(defun auto-reload ()
  (shell-command "kill -s SIGUSR1 $(cat /tmp/flutter.pid) && echo 'reload flutter...'"))

(add-hook 'dart-mode-hook
          (lambda ()
            (add-hook 'after-save-hook 'auto-reload nil 'make-it-local)))

这非常简单,我简直不敢相信......杀死

flutter run
进程,通过我们的 shell 脚本向
kill -SIGUSR1
进程发送信号
flutter run
后,它将自动重新加载。

谢谢@pskink,我绞尽脑汁再试了一下,问题就解决了。

我再次查看了关于linux signal

描述
kill
命令描述为:

向指定进程、指定进程组的所有成员或系统上的所有进程发送信号。

不仅仅是粗鲁地杀死进程......这是命令行中

kill
的描述:

kill [-s sigspec | -n signum | -sigspec] pid | jobspec
...or
kill -l [sigspec]

然而,

flutter
的flag--pid-file是这样描述的:

指定一个文件来写入进程ID。您可以发送 SIGUSR1 来触发热重载,发送 SIGUSR2 来触发热重启。

我们

kill -SIGUSR1 $(cat /tmp/flutter.pid)
,当我们向
SIGURS1
发送信号
flutter process
时,这就是发生的事情。

我仍然想知道,我们是否可以将

r
发送到
flutter run
进程的“屏幕”?

emacs process flutter signals hot-reload
2个回答
1
投票

https://pub.dartlang.org/packages/angel_hothttps://pub.dartlang.org/packages/jaguar_hotreload 是服务器端开发的热重载支持包 - 热重载文件更改。
我希望这也适用于 Flutter。

您还可以调查源代码并创建自定义实现。
该功能由 Dart 观测站提供,这是一项内置于虚拟机中的服务,您可以连接到该服务并可以通过命令进行控制。

另请参阅https://github.com/dart-lang/sdk/blob/master/runtime/vm/service/service.md


0
投票

如果您使用 lsp-mode 和 lsp-dart - 您可以附加一个保存钩子,该钩子在正在运行的 flutter 调试服务实例上执行热重载。

(use-package lsp-mode)
(add-hook 'dart-mode-hook #'lsp-deferred)

(defun lsp-dart-install-save-hooks ()
  (add-hook 'after-save-hook #'flutter-hot-reload t t))

(add-hook 'dart-mode-hook #'lsp-dart-install-save-hooks)

实例需要运行才能使其工作。要启动实例,请使用

flutter-run <RET>
flutter-run-device <RET> [select device] <RET>

© www.soinside.com 2019 - 2024. All rights reserved.