【问题标题】:Flutter Hot Reload to multiple devicesFlutter Hot Reload 到多个设备
【发布时间】:2019-01-11 03:33:44
【问题描述】:

是否可以通过热重载连接多个设备? 具体来说,同时支持 Android 和 iOS 模拟器。

【问题讨论】:

  • 我认为不可能同时进行热重载。
  • 欢迎来到 Stack Overflow。你能推测吗?这个问题没有分析,也没有讨论已经尝试过的内容。 How To Ask.但一般来说,请不要问不能表明任何努力寻找解决方案的单行问题。
  • @Elletlar 我一般同意。但在他的问题范围内,实际上,没有必要提供更多信息。
  • @farhana 我找到了它,它非常简单......只需在调试模式下运行......在所有设备上。它会在两者上重新加载 - 注意我使用 VS Code
  • @Elletlar @Rémi Rousselet 好的,谢谢兄弟的信息

标签: flutter hot-reload


【解决方案1】:

这适用于我在 Android Studio 中:

  1. 启动两个模拟器/连接设备

  2. 使用flutter run -d all 运行您的代码

  3. r 热加载

【讨论】:

  • 是的,我发现在终端或 vs 代码调试模式下有两种方法....thxs bro
  • 请注意,最近它将尝试在 MacOS 和 Web 上运行。我找不到修复的解决方案。
  • 您可以在 Flutter 安装的配置中禁用 macOS 和 Web。这样它就不会调试它们。或者临时重命名项目根目录中的“macos”和“web”文件夹。
  • 多iOS模拟器坏了,需要安卓。
【解决方案2】:

如果您使用 VS Code 作为 Flutter IDE,您可以使用 VSC 启动配置和任务从单次启动并发运行,并为所有设备启用热重载。

如果您在执行 flutter run -d all 时遇到问题,这是一种替代解决方案,可让您指定应运行的设备。 确保您指定的设备在运行flutter devices 时可用。

您当前的launch.json 文件可能如下所示:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Flutter",
            "type": "dart",
            "request": "launch",
            "flutterMode": "debug"        
        }
    ]
}

设置

您需要更新此 launch.json 文件并在应用程序根目录中的同一 .vscode 文件夹中创建 tasks.json

仅将以下代码粘贴到launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Flutter-All",
            "preLaunchTask": "Flutter-Launch-All",
            "type": "dart",
        },
        {
            "name": "Flutter-iOS",
            "preLaunchTask": "Flutter-Launch-iOS",
            "type": "dart",
        },
        {
            "name": "Flutter-Android",
            "preLaunchTask": "Flutter-Launch-Android",
            "type": "dart",
        },
        {
            "name": "Flutter-Web",
            "preLaunchTask": "Flutter-Launch-Web",
            "type": "dart",
        }
    ],
}

仅将以下代码粘贴到tasks.json

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Flutter-Launch-All",
      "dependsOn": [
        "Flutter-Launch-iOS",
        "Flutter-Launch-Android",
        "Flutter-Launch-Web"
      ]
    },
    {
      "label": "Flutter-Launch-iOS",
      "type": "shell",
      "command": "flutter run -d 'iPhone 11' "
    },
    {
      "label": "Flutter-Launch-Android",
      "type": "shell",
      "command": "flutter run -d 'AOSP on IA Emulator' "
    },
    {
      "label": "Flutter-Launch-Web",
      "type": "shell",
      "command": "flutter run -d 'Chrome' "
    }
  ]
}

相应地替换设备名称('iPhone 11'、'AOSP on IA Emulator'、'Chrome')。

启动所有设备

按 F5 键。

你就完成了。

如果Start Debugging 的 F5 快捷方式对您不起作用,请导航至侧面板上的 Debug & Run 并选择您刚刚创建的 Flutter-All 配置,然后运行。

然后您将看到终端窗口出现,并且能够在运行的各个热重载会话之间切换(作为它们自己 shell 中的任务)。

一些背景

我们通过任务上的dependsOn 选项使用“复合任务”,而不是用于配置的“复合”。

由于不可能同时启动配置,只能按顺序启动,我们使用可以同时运行的任务。

因此,“Flutter-All”配置执行 iOS、Android 和 Web 配置的任务。

如果使用复合,则需要在下一次运行之前完成配置,这不是我们想要的。 对于任务,我们可以选择顺序执行它们,但默认情况下,当使用 dependsOn 选项时它们将同时执行。

//Do not use this in your launch.json file unless you want to debug one platform at a time.

"compounds": [
    {
        "name": "Flutter-All",
        "configurations": ["Flutter-iOS", "Flutter-Android", "Flutter-Web"]
    }
]

【讨论】:

  • 我们可以用工作断点来做到这一点吗?我在顶部的 vscode 调试工具栏缺少带有 Flutter devtools 功能的“F”。
  • 尚未对此进行测试,尽管您可以尝试将这些字段添加到配置中:__ "configurations": [ { "name": "Flutter-All", "preLaunchTask": "Flutter-Launch-All ", "type": "dart", "request": "launch", "program": "lib/main.dart" } ]
  • "request": "attach" 而不是 "request": "launch"
【解决方案3】:

在 Android Studio 中,如果您运行多台设备,run 菜单下有一个选项 Flutter hot reload (All Devices)

【讨论】:

  • 谢谢,这正是我想要的
  • 如何在多台设备上附加第一次运行?当我热重载“所有设备”时,只有最后一个得到重建
【解决方案4】:

如果您尝试直接在 Visual Code 上加载它是行不通的,但只需几个步骤,您就可以使用 VS Code 或任何其他 IDE 进行编码,并在 IDE 之外热重新加载您的代码

  1. 加载 iOS 模拟器 在终端中

    打开 -a 模拟器

  2. 加载 Android 模拟器 在 Android Studio 中打开 ADV 并运行想要的模拟器

  3. 打开一个终端来管理Android的热重载 在应用程序的文件夹中运行

    flutter run -d [ios-device-id]

  4. 打开另一个终端来管理iOS的热重载 在应用程序的文件夹中,运行

    flutter run -d [android-device-id]

你会在两个终端看到:

? 要在运行时热重载更改,请按“r”。要热重启(和重建状态),请按“R”。

所以,此时只需更新您的代码,保存并在每个终端中按“r”,这不是同时进行的,但足以让两个模拟器同时打开并查看结果

【讨论】:

    【解决方案5】:

    要同时调试多个设备,您应该为设置了 deviceId 字段的每个设备设置启动配置(这与您传递给flutter run -d xxx) 的 ID 相同。通过单击 Debug -> Open Configurations 打开启动配置。添加底部的 compound 配置将同时启动两个(或更多)配置:

    {
        "version": "0.2.0",
        "configurations": [
            {
                "name": "Current Device",
                "request": "launch",
                "type": "dart"
            },
            {
                "name": "Android",
                "request": "launch",
                "type": "dart",
                "deviceId": "android"
            },
            {
                "name": "iPhone",
                "request": "launch",
                "type": "dart",
                "deviceId": "iphone"
            },
        ],
        "compounds": [
            {
                "name": "All Devices",
                "configurations": ["Android", "iPhone"],
            }
        ]
    }
    

    保存后,复合配置将显示在调试侧栏顶部的下拉列表中。

    Source

    【讨论】:

      【解决方案6】:

      Android Studio Flutter:热重载多个设备

      如果您正在运行 android 来构建您的 Flutter 应用程序,并且已经启动了多个设备或模拟器来预览您的 Flutter 应用程序(并且在 IDE 下方有相应的“运行”选项卡),您可能会发现保存项目只是热的- 重新加载其中一个实例。

      热重载多台设备键盘快捷键:查看运行菜单,查找一次热重载多台设备的键盘快捷键。

      这些是 MacOS 上用于热重载和热重启多个设备的默认快捷方式。请注意 (所有设备) 变体。

      【讨论】:

        猜你喜欢
        • 2017-07-30
        • 2020-12-06
        • 2021-09-30
        • 2019-02-02
        • 2018-10-15
        • 2018-12-27
        • 2019-08-04
        • 1970-01-01
        • 2022-07-21
        相关资源
        最近更新 更多