【问题标题】:Flutter hot reloading with VSCode sometimes works, sometimes doesn't使用 VSCode 进行 Flutter 热重载有时有效,有时无效
【发布时间】:2020-08-10 16:45:00
【问题描述】:

标题说明了一切。这是gif demonstrating。对代码的一些更改 UI 会按预期更新,而在其他时候更新不会反映。

VSCode中的这个提示并不表示应用已经热重载。

将文件同步到为 x86 构建的设备 Android SDK。"

这是我的 main.dart 文件,其中包含我要翻转以供参考的两个列表。

class _MyHomePageState extends State<MyHomePage> {
  // List<Color> colors = [Colors.yellow, Colors.red, Colors.yellow];
  List<Color> colors = [Colors.red, Colors.white, Colors.blue];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: colors
                .map((element) => Expanded(
                        child: Container(
                      decoration: BoxDecoration(color: element),
                      // decoration: BoxDecoration(color: _counter.isEven ? Colors.red : Colors.blue),
                    )))
                .toList()),
      ),
  }
}

请告诉我如何在我执行command+s 时让 VScode 热重载工作。

当我将colors 移出_MyHomePageStatte 小部件的状态时,行为是相同的。这是gif demo

【问题讨论】:

  • 全局变量和静态字段被视为状态,因此在热重载期间不会重新初始化,这意味着如果您更改全局变量,如本例所示,则不会发生热重载。 initstate 中也没有使用变量,您可以在此处找到更多信息flutter.dev/docs/development/tools/hot-reload

标签: flutter dart


【解决方案1】:

如果更新有状态小部件中的成员变量,则必须热重启应用或关闭并重新打开小部件

要使热重载与小部件外部的变量一起工作,您必须使用const varName 而不是final varName&lt;Type&gt; varName。如果变量无法转换为 const,那么您别无选择,只能热重启应用程序

【讨论】:

    【解决方案2】:

    这是因为第一个颜色改变是一个变量,当你保存热重载时应用新颜色,但是当你改变第二个变量时,它是你状态中的一个变量,热重载改变你的变量但是你的小部件的状态不会'没有变化,这不是问题,这是正常的。如果您想查看您的更改,您可以重新加载您的应用程序。

    【讨论】:

    • 我更新了我的问题。当我将颜色移出小部件的状态时,仍然没有反映更改。
    【解决方案3】:

    只有在构建内部或在构建内部更新的变量会受到热重载的影响,

    如果您想在构建之外更改变量或重新加载状态,您必须考虑热重启。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-11
      • 2012-08-02
      • 2015-03-31
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多