跳转至正文

Flutter Windows 应用中的外部窗口

向 Flutter 应用添加外部窗口时的特殊注意事项

Windows 生命周期

受影响的对象

#

针对 Flutter 3.13 之后版本构建、并打开非 Flutter 窗口的 Windows 应用。

概述

#

向 Flutter Windows 应用添加非 Flutter 窗口时,默认不会纳入应用生命周期状态更新逻辑。例如,当外部窗口显示或隐藏时,应用生命周期状态不会正确更新为 inactive 或 hidden。因此,应用可能通过 WidgetsBindingObserver.didChangeAppLifecycle 收到不正确的生命周期状态变更。

我需要做什么?

要将外部窗口纳入该应用逻辑,窗口的 WndProc 过程必须调用 FlutterEngine::ProcessExternalWindowMessage

为此,请在你自定义外部窗口的消息处理函数中添加以下代码。在 Win32 API 的 C++ 封装中,这通常是从窗口 WndProc 调用的类方法。具体文件与类名取决于你的应用实现。

cpp
LRESULT MyExternalWindow::MessageHandler(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) {
    std::optional<LRESULT> result = flutter_controller_->engine()->ProcessExternalWindowMessage(hwnd, msg, wparam, lparam);
    if (result.has_value()) {
        return *result;
    }
    // Original contents of WndProc...
}