From fcbee10da9f52801340542c330fa430c99ea2273 Mon Sep 17 00:00:00 2001 From: stuartmorgan Date: Thu, 13 Aug 2020 11:31:03 -0700 Subject: [PATCH] [windows] Propagate startup errors in template (#63612) --- .../app/windows.tmpl/runner/flutter_window.cpp | 11 +++++++++-- .../app/windows.tmpl/runner/flutter_window.h | 2 +- .../app/windows.tmpl/runner/win32_window.cpp | 9 ++++++--- .../templates/app/windows.tmpl/runner/win32_window.h | 4 ++-- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/packages/flutter_tools/templates/app/windows.tmpl/runner/flutter_window.cpp b/packages/flutter_tools/templates/app/windows.tmpl/runner/flutter_window.cpp index fe980cf8d12..f3661dc7a9c 100644 --- a/packages/flutter_tools/templates/app/windows.tmpl/runner/flutter_window.cpp +++ b/packages/flutter_tools/templates/app/windows.tmpl/runner/flutter_window.cpp @@ -8,15 +8,22 @@ FlutterWindow::FlutterWindow(RunLoop* run_loop, FlutterWindow::~FlutterWindow() {} -void FlutterWindow::OnCreate() { - Win32Window::OnCreate(); +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } // The size here is arbitrary since SetChildContent will resize it. flutter_controller_ = std::make_unique(100, 100, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } RegisterPlugins(flutter_controller_.get()); run_loop_->RegisterFlutterInstance(flutter_controller_.get()); SetChildContent(flutter_controller_->view()->GetNativeWindow()); + return true; } void FlutterWindow::OnDestroy() { diff --git a/packages/flutter_tools/templates/app/windows.tmpl/runner/flutter_window.h b/packages/flutter_tools/templates/app/windows.tmpl/runner/flutter_window.h index 4f41e16f1c9..7f3162fee98 100644 --- a/packages/flutter_tools/templates/app/windows.tmpl/runner/flutter_window.h +++ b/packages/flutter_tools/templates/app/windows.tmpl/runner/flutter_window.h @@ -20,7 +20,7 @@ class FlutterWindow : public Win32Window { protected: // Win32Window: - void OnCreate() override; + bool OnCreate() override; void OnDestroy() override; private: diff --git a/packages/flutter_tools/templates/app/windows.tmpl/runner/win32_window.cpp b/packages/flutter_tools/templates/app/windows.tmpl/runner/win32_window.cpp index 677a9a6cca8..e7607ef0783 100644 --- a/packages/flutter_tools/templates/app/windows.tmpl/runner/win32_window.cpp +++ b/packages/flutter_tools/templates/app/windows.tmpl/runner/win32_window.cpp @@ -122,9 +122,11 @@ bool Win32Window::CreateAndShow(const std::wstring& title, Scale(size.width, scale_factor), Scale(size.height, scale_factor), nullptr, nullptr, GetModuleHandle(nullptr), this); - OnCreate(); + if (!window) { + return false; + } - return window != nullptr; + return OnCreate(); } // static @@ -240,8 +242,9 @@ void Win32Window::SetQuitOnClose(bool quit_on_close) { quit_on_close_ = quit_on_close; } -void Win32Window::OnCreate() { +bool Win32Window::OnCreate() { // No-op; provided for subclasses. + return true; } void Win32Window::OnDestroy() { diff --git a/packages/flutter_tools/templates/app/windows.tmpl/runner/win32_window.h b/packages/flutter_tools/templates/app/windows.tmpl/runner/win32_window.h index 5cbb5d594d6..ea09829ca77 100644 --- a/packages/flutter_tools/templates/app/windows.tmpl/runner/win32_window.h +++ b/packages/flutter_tools/templates/app/windows.tmpl/runner/win32_window.h @@ -62,8 +62,8 @@ class Win32Window { LPARAM const lparam) noexcept; // Called when CreateAndShow is called, allowing subclass window-related - // setup. - virtual void OnCreate(); + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); // Called when Destroy is called. virtual void OnDestroy();