-
Notifications
You must be signed in to change notification settings - Fork 29.8k
Description
If you run a basic flutter app using the UWP embedder and press the ctrl key, the app blows up. Keyboard handling isn't fully baked yet but this issue appears to be newly introduced. Comparing the key values sent from UWP embedding and win32 embedding, the difference is as follows:
FlutterWindowWin32::OnKey sends:
key: 162
scancode: 29
action: 256
character: 0
extended: false
wasdown: false
to the engine where as
FlutterWindowWinUWP::OnKeyDown sends:
key: 17
scancode: 29
action: 256
character: 0
extended: false
wasdown: false
The result is malformed XML passed back on the platform channel which causes things to blow up. Even though there is a problem with the payload, seems like the XML parser should be hardened to not blow up (a related case where this seems bad is if a key is held during app launch which repro's in current win32 embedder on windows).
I tried hacking around this by
if (key == 17) { key = 162; }
But that didn't fix it suggesting there is other state / machinery at work here that hasn't been implemented in UWP text input handling yet.
Steps to Reproduce
Ensure you are right at the tip of flutter framework, master
- Clone the
flutter_runnerproject from here: https://github.com/clarkezone/runner-uwp.git - Switch to dev branch
git checkout dev cd srcflutter run -d winuwp- when prompted, press y to launch app
- once app launches, press and release the ctrl key
Expected results:
Pressing control and releasing it does nothing
Actual:
logs
flutter_windows_winuwp.dll!rapidjson::GenericValue<rapidjson::UTF8<char>,rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator>>::IsObject() Line 1024
at c:\src\f\engine\src\third_party\rapidjson\include\rapidjson\document.h(1024)
flutter_windows_winuwp.dll!rapidjson::GenericValue<rapidjson::UTF8<char>,rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator>>::FindMember<rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator>>(const rapidjson::GenericValue<rapidjson::UTF8<char>,rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator>> & name) Line 1255
at c:\src\f\engine\src\third_party\rapidjson\include\rapidjson\document.h(1255)
flutter_windows_winuwp.dll!rapidjson::GenericValue<rapidjson::UTF8<char>,rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator>>::operator[]<rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator>>(const rapidjson::GenericValue<rapidjson::UTF8<char>,rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator>> & name) Line 1135
at c:\src\f\engine\src\third_party\rapidjson\include\rapidjson\document.h(1135)
flutter_windows_winuwp.dll!rapidjson::GenericValue<rapidjson::UTF8<char>,rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator>>::operator[]<const char>(const char * name) Line 1119
at c:\src\f\engine\src\third_party\rapidjson\include\rapidjson\document.h(1119)
flutter_windows_winuwp.dll!flutter::KeyboardKeyChannelHandler::KeyboardHook::<unnamed-tag>::operator()(const unsigned char * reply, unsigned __int64 reply_size) Line 143
at c:\src\f\engine\src\flutter\shell\platform\windows\keyboard_key_channel_handler.cc(143)
[External Code]
flutter_windows_winuwp.dll!flutter::BinaryMessengerImpl::Send::<unnamed-tag>::operator()(const unsigned char * data, unsigned __int64 data_size, void * user_data) Line 88
at c:\src\f\engine\src\flutter\shell\platform\common\client_wrapper\core_implementations.cc(88)
flutter_windows_winuwp.dll!flutter::BinaryMessengerImpl::Send::<unnamed-tag>::__invoke(const unsigned char * data, unsigned __int64 data_size, void * user_data) Line 84
at c:\src\f\engine\src\flutter\shell\platform\common\client_wrapper\core_implementations.cc(84)
flutter_windows_winuwp.dll!FlutterPlatformMessageCreateResponseHandle::<unnamed-tag>::operator()(const unsigned char * data, unsigned __int64 size) Line 1669
at c:\src\f\engine\src\flutter\shell\platform\embedder\embedder.cc(1669)
[External Code]
flutter_windows_winuwp.dll!flutter::EmbedderPlatformMessageResponse::Complete::<unnamed-tag>::operator()() Line 29
at c:\src\f\engine\src\flutter\shell\platform\embedder\embedder_platform_message_response.cc(29)
flutter_windows_winuwp.dll!fml::internal::CopyableLambda<`lambda at ../../flutter/shell/platform/embedder/embedder_platform_message_response.cc:27:25'>::operator()<>() Line 24
at c:\src\f\engine\src\flutter\fml\make_copyable.h(24)
[External Code]
flutter_windows_winuwp.dll!flutter::EmbedderTaskRunner::PostTask(unsigned __int64 baton) Line 78
at c:\src\f\engine\src\flutter\shell\platform\embedder\embedder_task_runner.cc(78)
flutter_windows_winuwp.dll!flutter::EmbedderThreadHost::PostTask(__int64 runner, unsigned __int64 task) Line 270
at c:\src\f\engine\src\flutter\shell\platform\embedder\embedder_thread_host.cc(270)
flutter_windows_winuwp.dll!flutter::EmbedderEngine::RunTask(const FlutterTask * task) Line 260
at c:\src\f\engine\src\flutter\shell\platform\embedder\embedder_engine.cc(260)
flutter_windows_winuwp.dll!FlutterEngineRunTask(_FlutterEngine * engine, const FlutterTask * task) Line 1928
at c:\src\f\engine\src\flutter\shell\platform\embedder\embedder.cc(1928)
flutter_windows_winuwp.dll!flutter::FlutterWindowsEngine::FlutterWindowsEngine::<unnamed-tag>::operator()<FlutterTask>(const FlutterTask * task) Line 153
at c:\src\f\engine\src\flutter\shell\platform\windows\flutter_windows_engine.cc(153)
[External Code]
flutter_windows_winuwp.dll!flutter::TaskRunnerWinUwp::PostFlutterTask::<unnamed-tag>::operator()() Line 41
at c:\src\f\engine\src\flutter\shell\platform\windows\task_runner_winuwp.cc(41)
flutter_windows_winuwp.dll!winrt::impl::delegate<winrt::Windows::UI::Core::DispatchedHandler,`lambda at ../../flutter/shell/platform/windows/task_runner_winuwp.cc:41:7'>::Invoke() Line 1087
at c:\src\f\engine\src\third_party\cppwinrt\generated\winrt\Windows.UI.Core.h(1087)flutter doctor -v
c:\src\f\engine\src>flutter doctor -v
[✓] Flutter (Channel master, 2.3.0-2.0.pre.164, on Microsoft Windows [Version 10.0.19042.928], locale en-US)
• Flutter version 2.3.0-2.0.pre.164 at C:\src\f\flutter
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision 79709605ce (5 hours ago), 2021-05-13 04:33:36 -0400
• Engine revision 08d9bc0fdd
• Dart version 2.14.0 (build 2.14.0-111.0.dev)
[✗] Android toolchain - develop for Android devices
✗ Unable to locate Android SDK.
Install Android Studio from: https://developer.android.com/studio/index.html
On first launch it will assist you in installing the Android SDK components.
(or visit https://flutter.dev/docs/get-started/install/windows#android-setup for detailed instructions).
If the Android SDK has been installed to a custom location, please use
`flutter config --android-sdk` to update to that location.
[✓] Chrome - develop for the web
• Chrome at C:\Program Files (x86)\Google\Chrome\Application\chrome.exe
[✓] Visual Studio - develop for Windows (Visual Studio Community 2019 16.9.4)
• Visual Studio at C:\Program Files (x86)\Microsoft Visual Studio\2019\Community
• Visual Studio Community 2019 version 16.9.31205.134
• Windows 10 SDK version 10.0.19041.0
[!] Android Studio (not installed)
• Android Studio not found; download from https://developer.android.com/studio/index.html
(or visit https://flutter.dev/docs/get-started/install/windows#android-setup for detailed instructions).
[✓] VS Code (version 1.56.1)
• VS Code at C:\Users\james\AppData\Local\Programs\Microsoft VS Code
• Flutter extension version 3.22.0
[✓] Connected device (4 available)
• Windows (desktop) • windows • windows-x64 • Microsoft Windows [Version 10.0.19042.928]
• Windows (UWP) (desktop) • winuwp • windows-uwp-x64 •
• Chrome (web) • chrome • web-javascript • Google Chrome 89.0.4389.90
• Edge (web) • edge • web-javascript • Microsoft Edge 90.0.818.56`