Saltar al contenido principal

Ventanas externas en aplicaciones de Flutter para Windows

Consideraciones especiales para agregar ventanas externas a aplicaciones de Flutter

Ciclo de vida de Windows

Quiénes se ven afectados

#

Aplicaciones de Windows compiladas con versiones de Flutter posteriores a la 3.13 que abren ventanas que no son de Flutter.

Resumen

#

Al agregar una ventana que no sea de Flutter a una aplicación de Flutter para Windows, esta no formará parte de la lógica para las actualizaciones del estado del ciclo de vida de la aplicación por defecto. Por ejemplo, esto significa que cuando la ventana externa se muestra u oculta, el estado del ciclo de vida de la aplicación no se actualizará adecuadamente a inactivo u oculto. Como resultado, la aplicación podría recibir cambios incorrectos en el estado del ciclo de vida a través de WidgetsBindingObserver.didChangeAppLifecycle.

¿Qué necesito hacer?

Para agregar la ventana externa a esta lógica de la aplicación, el procedimiento WndProc de la ventana debe invocar a FlutterEngine::ProcessExternalWindowMessage.

Para lograr esto, añade el siguiente código a la función del manejador de mensajes de tu ventana externa personalizada. En los wrappers de C++ para la API de Win32, esto suele ser un método de clase llamado desde el WndProc de la ventana. El archivo y el nombre de clase exactos dependen de la implementación de tu aplicación.

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...
}