如何检测 Flutter App 代码中的热重载?

Ame*_*een 8 dart flutter hot-reload

我有一个资产文件需要处理才能使用。这个资产文件将被大量编辑,我希望每次编辑时不必重新启动应用程序。

我知道类上存在该reassemble方法State。但是,这需要有一个虚拟小部件来覆盖此方法并将其放在应用程序中的某个地方以获取有关热重载的通知。

class WdHotReloadNotifier extends StatefulWidget
{
  final Function callback;
  WdHotReloadNotifier(this.callback);
  @override
  State<StatefulWidget> createState() => WdHotReloadNotifierState(this.callback);
}
class WdHotReloadNotifierState extends State<WdHotReloadNotifier>
{
  Function callback;
  WdHotReloadNotifierState(this.callback);
  @override
  void reassemble()
  {
    super.reassemble();
    callback();
  }
  @override
  Widget build(BuildContext context) {
    return Container();
  }
}
Run Code Online (Sandbox Code Playgroud)

然后我可以像这样使用它:

WdHotReloadNotifier((){print("HOT REALOADED 1");}),
WdHotReloadNotifier((){print("HOT REALOADED 2");}),
Run Code Online (Sandbox Code Playgroud)

但是,将这些添加到单个页面意味着只要页面在堆栈中,它就会工作。将它们添加到多个页面意味着钩子将执行不止一次。

有没有办法在flutter中获得有关热重载的全局通知?

Rém*_*let 10

覆盖子类reassemble上的方法State是您想要的。但是您可以将小部件放置到不同的位置以更改行为。

考虑以下小部件,它在热重载时调用回调并且不执行任何其他操作:

class ReassembleListener extends StatefulWidget {
  const ReassembleListener({Key key, this.onReassemble, this.child})
      : super(key: key);

  final VoidCallback onReassemble;
  final Widget child;

  @override
  _ReassembleListenerState createState() => _ReassembleListenerState();
}

class _ReassembleListenerState extends State<ReassembleListener> {
  @override
  void reassemble() {
    super.reassemble();
    if (widget.onReassemble != null) {
      widget.onReassemble();
    }
  }

  @override
  Widget build(BuildContext context) {
    return widget.child;
  }
}
Run Code Online (Sandbox Code Playgroud)

您可以随意插入该小部件。

在单个页面上:

MaterialApp(
  home: ReassembleListener(onReassemble: () => print("Foo"), child: Home()),
)
Run Code Online (Sandbox Code Playgroud)

或者通过包装整个应用程序来全局:

ReassembleListener(
  onReassemble: () => print('foo'),
  child: MaterialApp(
    home: Home(),
  ),
)
Run Code Online (Sandbox Code Playgroud)

  • @RémiRousselet抱歉,我发现它*不会*破坏*本机iOS代码*...所以当我使用库时,dart部分被破坏并重新初始化,但本机swift部分仍然存在,并且包变得混乱... (4认同)
  • 您好,我想知道*热重启*(不是热重载)是否有类似的事情?谢谢! (3认同)