3

我目前在 OSX 上使用终端和 vim 作为 Flutter 的开发环境。一切进展顺利,除了当我保存任何 dart 文件时应用程序不会重新加载。有没有办法触发这种行为?目前我必须去终端并点击“r”来查看我的更改。

4

5 回答 5

6

对不起插件,但我写了一个非常简单的插件来处理这个。

它利用 Flutter 的--pid-file命令行标志向其发送SIGUSR1信号。

您可以通过将其添加到autocmd

silent execute '!kill -SIGUSR1 "$(cat /tmp/flutter.pid)"'

--pid-file并使用标志启动 Flutter 。

于 2018-07-02T14:11:44.363 回答
2

我基于kill with制作了一个 vim 插件hankchiutw/flutter-reload.vimSIGUSR1

您不必--pid-file在此插件中使用标志。(感谢pgrep:))

只需执行flutter run,修改您的 *.dart 文件并查看重新加载。

于 2018-12-11T02:48:32.283 回答
1

我使用名为entr. 在 OS/X 上,您可以从brew:安装它brew install entr。该工具的主页位于http://eradman.com/entrproject/

然后flutter run按照@nobody_nowhere的建议从 pidfile 开始。

你如何运行entr取决于服务水平。在最简单的情况下,您只需执行find lib/ -name '*.dart' | entr -p kill -USR1 $(cat /tmp/flutter.pid)

但是这样的调用不会检测到源树中的新文件(因为find在开始时会构建一个文件列表以仅查看一次)。您可以使用稍微复杂一点的单线:

while true
do
    find lib/ -name '*.dart' | \
        entr -d -p kill -USR1 $(cat /tmp/flutter.pid)
done

-d选项entr在其中一个目录中检测到新文件并且循环再次运行时退出。

我个人使用更复杂的方法。我使用 Redux 并更改到中间件或其他状态文件不适用于热重载,它不会接受这些更改。所以你需要求助于热重启。我有一个脚本hotrestarter.sh

#!/bin/bash

set -euo pipefail
PIDFILE="/tmp/flutter.pid"

if [[ "${1-}" != "" && -e $PIDFILE ]]; then
    if [[ "$1" =~ \/state\/ ]]; then
        kill -USR2 $(cat $PIDFILE)
    else
        kill -USR1 $(cat $PIDFILE)
    fi
fi

它检查修改后的文件是否位于/state子目录中,如果为 true 则热重启或热重载。我这样称呼脚本:

while true
do
    find lib/ -name '*.dart' | entr -d -p ./hotreloader.sh /_
done

/_参数entr用于将文件名传递给被调用的程序。

于 2018-12-02T03:08:19.663 回答
-1

你没有说什么平台,但所有平台都有一个“观察者”应用程序,当树中的任何文件发生变化时,它可以运行命令。您需要运行其中之一。

于 2018-03-17T18:48:45.597 回答
-2

vscode 有这个功能。如果您不介意迁移到 vscode,您可以直接使用它。您也可以联系作者,看看他们是否对如何在 vim 中执行此操作有任何建议或直接查看源代码。vim 很可能会有这样做的机制。

于 2018-03-18T03:07:28.450 回答