flutter/examples/platform_channel
Loïc Sharma ce61eda70c
[Windows] Ensure window is shown (#127046)
## Background

The Windows runner has a race at startup:

1. **Platform thread**: creates a hidden window
2. **Platform thread**: launches the Flutter engine
3. **UI/Raster threads**: renders the first frame
4. **Platform thread**: Registers a callback to show the window once the next frame has been rendered.

Steps 3 and 4 happen in parallel and it is possible for step 3 to complete before step 4 starts. In this scenario, the next frame callback is never called and the window is never shown.

As a result the `windows_startup_test`'s test, which [verifies that the "show window" callback is called](1f09a8662d/dev/integration_tests/windows_startup_test/windows/runner/flutter_window.cpp (L60-L64)), can flake if the first frame is rendered before the show window callback has been registered.

## Solution

This change makes the runner schedule a frame after it registers the next frame callback. If step 3 hasn't completed yet, this no-ops as a frame is already scheduled. If step 3 has already completed, a new frame will be rendered, which will call the next frame callback and show the window.

Part of https://github.com/flutter/flutter/issues/119415

See this thread for alternatives that were considered: https://github.com/flutter/engine/pull/42061#issuecomment-1550080722
2023-05-19 22:25:55 +00:00
..
2023-03-29 18:40:58 +00:00

Example of calling platform services from Flutter

This project demonstrates how to connect a Flutter app to platform-specific services.

You can read more about accessing platform and third-party services in Flutter.

iOS

You can use the commands flutter build and flutter run from the app's root directory to build/run the app or you can open ios/Runner.xcworkspace in Xcode and build/run the project as usual.

Android

You can use the commands flutter build and flutter run from the app's root directory to build/run the app or to build with Android Studio, open the android folder in Android Studio and build the project as usual.

Windows

You can use the commands flutter build and flutter run from the app's root directory to build/run the app or you can build once then open build\windows\platform_channel.sln in Visual Studio to build and run.