Repository navigation
iOS: Add null check for touch rate correction task runner - #191641
Conversation
There was a problem hiding this comment.
Code Review
This pull request adds a null check for the engine's platform task runner in FlutterViewController before creating the touch rate correction vsync client to prevent a null dereference. It also adds a corresponding unit test. Feedback suggests simplifying the new unit test by removing unnecessary engine initialization steps and mocking, as a newly initialized FlutterEngine already has a nil platform task runner by default.
| FlutterEngine* engine = [[FlutterEngine alloc] init]; | ||
| [engine runWithEntrypoint:nil]; | ||
| FlutterViewController* viewController = [[FlutterViewController alloc] initWithEngine:engine | ||
| nibName:nil | ||
| bundle:nil]; | ||
| id mockEngine = OCMPartialMock(engine); | ||
| [self addTeardownBlock:^{ | ||
| [mockEngine stopMocking]; | ||
| }]; | ||
| OCMStub([mockEngine platformTaskRunner]).andReturn(nil); |
There was a problem hiding this comment.
Since a newly initialized FlutterEngine does not have its shell created yet, its platformTaskRunner is already nil by default. We can simplify this test by removing the unnecessary call to runWithEntrypoint: and the subsequent partial mocking of the engine. This avoids spawning engine threads and reduces mocking overhead, making the test faster and more reliable.
FlutterEngine* engine = [[FlutterEngine alloc] init];
FlutterViewController* viewController = [[FlutterViewController alloc] initWithEngine:engine
nibName:nil
bundle:nil];
References
- Suggest simplification and refactoring: Assess whether the code can be made simpler or refactored to enhance readability and maintainability. (link)
There was a problem hiding this comment.
This is wrong, but it gave me an idea.
It's correct that a newly-constructed engine does have a nil platformTaskRunner, but the proposed change will crash. initWithEngine:... calls setViewController: which does FML_DCHECK(self.platformView), but platformView is null while the shell is null so we'll get an abort instead of running the test. You need a running engine, but a running engine has a platform task runner.
That said... we can run the engine, attach the view controller then call [engine destroyContext] to kill the shell (and the task runner) which lets us test this without the partial engine mock. Done.
`FlutterViewController.viewDidLoad` creates a vsync client to correct the rate at which touch events are delivered on ProMotion displays, and passes it `self.engine.platformTaskRunner`. That property is nullable and only set once the engine's shell is created, then cleared again in `destroyContext`. `FlutterVSyncClient` requires a non-null task runner and dereferences it. A view controller whose engine is nil would dereference null and takes the app down with it, at launch. We now bail out when there's no task runner. The argument is that losing whatever smoothing effect this has while we have no running egnine has no effect, and either way it's better than a null deref. There's the separate argument detailed in flutter#191199 that this entire client isn't really doing anything positive and should be deleted. This simply prevents the null deref until that work can land. Also worth noting that `platformTaskRunner` is declared `nullable` and the Swift-generated `initWithTaskRunner:` takes a `_Nonnull` task runner, so clang spotted this issue when I enabled `-Wnullable-to-nonnull-conversion`: ``` FlutterViewController.mm:1332:36: warning: implicit conversion from nullable pointer 'FlutterFMLTaskRunner * _Nullable' to non-nullable pointer type 'FlutterFMLTaskRunner * _Nonnull' [-Wnullable-to-nonnull-conversion] ``` I'll follow up with a patch that enables that warning, but it requires a few other cleanups first. Issue: flutter#190030
4ea08c0 to
5358e59
Compare
LongCatIsLooong
left a comment
There was a problem hiding this comment.
LGTM since the touch correction stuff is going to be deleted soon.
Roll Flutter from 9a8278982588 to 15d8908addf6 (37 revisions) flutter/flutter@9a82789...15d8908 2026-08-25 engine-flutter-autoroll@skia.org Roll Packages from df2ba94 to 740f093 (17 revisions) (flutter/flutter#191734) 2026-08-25 dacoharkes@google.com [record_use] Remove const_finder (flutter/flutter#191702) 2026-08-25 48625061+muradhossin@users.noreply.github.com Warn when SwiftPM is disabled (flutter/flutter#188695) 2026-08-25 engine-flutter-autoroll@skia.org Roll Skia from b1a31575c373 to 480540178356 (1 revision) (flutter/flutter#191723) 2026-08-25 137456488+flutter-pub-roller-bot@users.noreply.github.com Roll pub packages (flutter/flutter#191726) 2026-08-25 engine-flutter-autoroll@skia.org Roll Skia from bfa276ed9ac5 to b1a31575c373 (1 revision) (flutter/flutter#191717) 2026-08-25 engine-flutter-autoroll@skia.org Roll Dart SDK from 0818e6dc28cc to 8996935d3d0a (2 revisions) (flutter/flutter#191706) 2026-08-25 engine-flutter-autoroll@skia.org Roll Skia from 31799e707cd4 to bfa276ed9ac5 (1 revision) (flutter/flutter#191701) 2026-08-25 chris@bracken.jp iOS: Add null check for touch rate correction task runner (flutter/flutter#191641) 2026-08-25 chris@bracken.jp iOS: Add test for engineAllowHeadlessExecution (flutter/flutter#191635) 2026-08-25 engine-flutter-autoroll@skia.org Roll Skia from cfae2af1bfeb to 31799e707cd4 (4 revisions) (flutter/flutter#191649) 2026-08-25 engine-flutter-autoroll@skia.org Roll Dart SDK from 2b75c83ddd77 to 0818e6dc28cc (1 revision) (flutter/flutter#191643) 2026-08-25 engine-flutter-autoroll@skia.org Roll Skia from 4a2fddefd3d8 to cfae2af1bfeb (1 revision) (flutter/flutter#191642) 2026-08-25 engine-flutter-autoroll@skia.org Roll Skia from 256c15026b91 to 4a2fddefd3d8 (6 revisions) (flutter/flutter#191633) 2026-08-25 97480502+b-luk@users.noreply.github.com Remove octant_offset_c uniform from ubersdf, reorder/document ubersdf uniforms (flutter/flutter#191597) 2026-08-25 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from 8Xu4ujBJniC0nQGx3... to MstTWE1RDOT-RnrtH... (flutter/flutter#191621) 2026-08-25 engine-flutter-autoroll@skia.org Roll Dart SDK from 78bbc37b6ff6 to 2b75c83ddd77 (3 revisions) (flutter/flutter#191614) 2026-08-24 bkonyi@google.com [flutter_tools] Fix $git typo in shared.bat to restore cache invalidation on Windows (flutter/flutter#191217) 2026-08-24 87962825+kyungilcho@users.noreply.github.com Skip removed observers during app exit requests (flutter/flutter#190343) 2026-08-24 bkonyi@google.com [engine] Support UTF-8 paths in Windows filesystem and path APIs (flutter/flutter#191360) 2026-08-24 okorohelijah@google.com Migrate ios driver tests batch 3 to simulators (flutter/flutter#191333) 2026-08-24 jmccandless@google.com Migrate texture example to material_ui (flutter/flutter#190673) 2026-08-24 116356835+AbdeMohlbi@users.noreply.github.com Remove outdated test todo about `dither` property of `Paint` (flutter/flutter#190936) 2026-08-24 47866232+chunhtai@users.noreply.github.com Add agent rule to prevent using material and cupertino in widget tests (flutter/flutter#191588) 2026-08-24 bkonyi@google.com [flutter_tools] Prevent crash when stdout is broken and print fails (flutter/flutter#191356) 2026-08-24 robert.ancell@canonical.com Add FlViewRendererSubsurface (flutter/flutter#191389) 2026-08-24 43054281+camsim99@users.noreply.github.com [Android] Inject `route` into manifest when specified on the command line in release mode (flutter/flutter#191328) 2026-08-24 269567208+reidbaker-agent@users.noreply.github.com [AGP 9.1.0 Migration #3] Add buildModeFor overloads and wire Flutter dependencies through the new DSL (flutter/flutter#191218) 2026-08-24 engine-flutter-autoroll@skia.org Roll Skia from 698c60bf58f1 to 256c15026b91 (1 revision) (flutter/flutter#191586) 2026-08-24 15619084+vashworth@users.noreply.github.com On iOS 27+ devices, manually process lldb stops (flutter/flutter#191434) 2026-08-24 bkonyi@google.com [flutter_tools] Handle missing Xcode gracefully in getInfo and buildMacOS (flutter/flutter#191180) 2026-08-24 bkonyi@google.com [flutter_tools] Handle null version gracefully in CachedArtifact and MaterialFonts (flutter/flutter#191494) 2026-08-24 bkonyi@google.com [flutter_tools] Do not treat 'daemon' argument as daemon command in logger initialization (flutter/flutter#191442) 2026-08-24 bkonyi@google.com [flutter_tools] Resolve workspace root when running widget preview from member package (flutter/flutter#190952) 2026-08-24 dacoharkes@google.com [native_assets] Roll native packages (flutter/flutter#191253) 2026-08-24 bkonyi@google.com [flutter_tools] Add --force flag to flutter channel (flutter/flutter#191579) 2026-08-24 engine-flutter-autoroll@skia.org Roll Skia from 57968d087d18 to 698c60bf58f1 (1 revision) (flutter/flutter#191577) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages Please CC bmparr@google.com,stuartmorgan@google.com on the revert to ensure that a human is aware of the problem. To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose ...
…r#12619) Roll Flutter from 9a8278982588 to 15d8908addf6 (37 revisions) flutter/flutter@9a82789...15d8908 2026-08-25 engine-flutter-autoroll@skia.org Roll Packages from df2ba94 to 740f093 (17 revisions) (flutter/flutter#191734) 2026-08-25 dacoharkes@google.com [record_use] Remove const_finder (flutter/flutter#191702) 2026-08-25 48625061+muradhossin@users.noreply.github.com Warn when SwiftPM is disabled (flutter/flutter#188695) 2026-08-25 engine-flutter-autoroll@skia.org Roll Skia from b1a31575c373 to 480540178356 (1 revision) (flutter/flutter#191723) 2026-08-25 137456488+flutter-pub-roller-bot@users.noreply.github.com Roll pub packages (flutter/flutter#191726) 2026-08-25 engine-flutter-autoroll@skia.org Roll Skia from bfa276ed9ac5 to b1a31575c373 (1 revision) (flutter/flutter#191717) 2026-08-25 engine-flutter-autoroll@skia.org Roll Dart SDK from 0818e6dc28cc to 8996935d3d0a (2 revisions) (flutter/flutter#191706) 2026-08-25 engine-flutter-autoroll@skia.org Roll Skia from 31799e707cd4 to bfa276ed9ac5 (1 revision) (flutter/flutter#191701) 2026-08-25 chris@bracken.jp iOS: Add null check for touch rate correction task runner (flutter/flutter#191641) 2026-08-25 chris@bracken.jp iOS: Add test for engineAllowHeadlessExecution (flutter/flutter#191635) 2026-08-25 engine-flutter-autoroll@skia.org Roll Skia from cfae2af1bfeb to 31799e707cd4 (4 revisions) (flutter/flutter#191649) 2026-08-25 engine-flutter-autoroll@skia.org Roll Dart SDK from 2b75c83ddd77 to 0818e6dc28cc (1 revision) (flutter/flutter#191643) 2026-08-25 engine-flutter-autoroll@skia.org Roll Skia from 4a2fddefd3d8 to cfae2af1bfeb (1 revision) (flutter/flutter#191642) 2026-08-25 engine-flutter-autoroll@skia.org Roll Skia from 256c15026b91 to 4a2fddefd3d8 (6 revisions) (flutter/flutter#191633) 2026-08-25 97480502+b-luk@users.noreply.github.com Remove octant_offset_c uniform from ubersdf, reorder/document ubersdf uniforms (flutter/flutter#191597) 2026-08-25 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from 8Xu4ujBJniC0nQGx3... to MstTWE1RDOT-RnrtH... (flutter/flutter#191621) 2026-08-25 engine-flutter-autoroll@skia.org Roll Dart SDK from 78bbc37b6ff6 to 2b75c83ddd77 (3 revisions) (flutter/flutter#191614) 2026-08-24 bkonyi@google.com [flutter_tools] Fix $git typo in shared.bat to restore cache invalidation on Windows (flutter/flutter#191217) 2026-08-24 87962825+kyungilcho@users.noreply.github.com Skip removed observers during app exit requests (flutter/flutter#190343) 2026-08-24 bkonyi@google.com [engine] Support UTF-8 paths in Windows filesystem and path APIs (flutter/flutter#191360) 2026-08-24 okorohelijah@google.com Migrate ios driver tests batch 3 to simulators (flutter/flutter#191333) 2026-08-24 jmccandless@google.com Migrate texture example to material_ui (flutter/flutter#190673) 2026-08-24 116356835+AbdeMohlbi@users.noreply.github.com Remove outdated test todo about `dither` property of `Paint` (flutter/flutter#190936) 2026-08-24 47866232+chunhtai@users.noreply.github.com Add agent rule to prevent using material and cupertino in widget tests (flutter/flutter#191588) 2026-08-24 bkonyi@google.com [flutter_tools] Prevent crash when stdout is broken and print fails (flutter/flutter#191356) 2026-08-24 robert.ancell@canonical.com Add FlViewRendererSubsurface (flutter/flutter#191389) 2026-08-24 43054281+camsim99@users.noreply.github.com [Android] Inject `route` into manifest when specified on the command line in release mode (flutter/flutter#191328) 2026-08-24 269567208+reidbaker-agent@users.noreply.github.com [AGP 9.1.0 Migration #3] Add buildModeFor overloads and wire Flutter dependencies through the new DSL (flutter/flutter#191218) 2026-08-24 engine-flutter-autoroll@skia.org Roll Skia from 698c60bf58f1 to 256c15026b91 (1 revision) (flutter/flutter#191586) 2026-08-24 15619084+vashworth@users.noreply.github.com On iOS 27+ devices, manually process lldb stops (flutter/flutter#191434) 2026-08-24 bkonyi@google.com [flutter_tools] Handle missing Xcode gracefully in getInfo and buildMacOS (flutter/flutter#191180) 2026-08-24 bkonyi@google.com [flutter_tools] Handle null version gracefully in CachedArtifact and MaterialFonts (flutter/flutter#191494) 2026-08-24 bkonyi@google.com [flutter_tools] Do not treat 'daemon' argument as daemon command in logger initialization (flutter/flutter#191442) 2026-08-24 bkonyi@google.com [flutter_tools] Resolve workspace root when running widget preview from member package (flutter/flutter#190952) 2026-08-24 dacoharkes@google.com [native_assets] Roll native packages (flutter/flutter#191253) 2026-08-24 bkonyi@google.com [flutter_tools] Add --force flag to flutter channel (flutter/flutter#191579) 2026-08-24 engine-flutter-autoroll@skia.org Roll Skia from 57968d087d18 to 698c60bf58f1 (1 revision) (flutter/flutter#191577) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages Please CC bmparr@google.com,stuartmorgan@google.com on the revert to ensure that a human is aware of the problem. To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose ...
…r#12619) Roll Flutter from 9a8278982588 to 15d8908addf6 (37 revisions) flutter/flutter@9a82789...15d8908 2026-08-25 engine-flutter-autoroll@skia.org Roll Packages from df2ba94 to 740f093 (17 revisions) (flutter/flutter#191734) 2026-08-25 dacoharkes@google.com [record_use] Remove const_finder (flutter/flutter#191702) 2026-08-25 48625061+muradhossin@users.noreply.github.com Warn when SwiftPM is disabled (flutter/flutter#188695) 2026-08-25 engine-flutter-autoroll@skia.org Roll Skia from b1a31575c373 to 480540178356 (1 revision) (flutter/flutter#191723) 2026-08-25 137456488+flutter-pub-roller-bot@users.noreply.github.com Roll pub packages (flutter/flutter#191726) 2026-08-25 engine-flutter-autoroll@skia.org Roll Skia from bfa276ed9ac5 to b1a31575c373 (1 revision) (flutter/flutter#191717) 2026-08-25 engine-flutter-autoroll@skia.org Roll Dart SDK from 0818e6dc28cc to 8996935d3d0a (2 revisions) (flutter/flutter#191706) 2026-08-25 engine-flutter-autoroll@skia.org Roll Skia from 31799e707cd4 to bfa276ed9ac5 (1 revision) (flutter/flutter#191701) 2026-08-25 chris@bracken.jp iOS: Add null check for touch rate correction task runner (flutter/flutter#191641) 2026-08-25 chris@bracken.jp iOS: Add test for engineAllowHeadlessExecution (flutter/flutter#191635) 2026-08-25 engine-flutter-autoroll@skia.org Roll Skia from cfae2af1bfeb to 31799e707cd4 (4 revisions) (flutter/flutter#191649) 2026-08-25 engine-flutter-autoroll@skia.org Roll Dart SDK from 2b75c83ddd77 to 0818e6dc28cc (1 revision) (flutter/flutter#191643) 2026-08-25 engine-flutter-autoroll@skia.org Roll Skia from 4a2fddefd3d8 to cfae2af1bfeb (1 revision) (flutter/flutter#191642) 2026-08-25 engine-flutter-autoroll@skia.org Roll Skia from 256c15026b91 to 4a2fddefd3d8 (6 revisions) (flutter/flutter#191633) 2026-08-25 97480502+b-luk@users.noreply.github.com Remove octant_offset_c uniform from ubersdf, reorder/document ubersdf uniforms (flutter/flutter#191597) 2026-08-25 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from 8Xu4ujBJniC0nQGx3... to MstTWE1RDOT-RnrtH... (flutter/flutter#191621) 2026-08-25 engine-flutter-autoroll@skia.org Roll Dart SDK from 78bbc37b6ff6 to 2b75c83ddd77 (3 revisions) (flutter/flutter#191614) 2026-08-24 bkonyi@google.com [flutter_tools] Fix $git typo in shared.bat to restore cache invalidation on Windows (flutter/flutter#191217) 2026-08-24 87962825+kyungilcho@users.noreply.github.com Skip removed observers during app exit requests (flutter/flutter#190343) 2026-08-24 bkonyi@google.com [engine] Support UTF-8 paths in Windows filesystem and path APIs (flutter/flutter#191360) 2026-08-24 okorohelijah@google.com Migrate ios driver tests batch 3 to simulators (flutter/flutter#191333) 2026-08-24 jmccandless@google.com Migrate texture example to material_ui (flutter/flutter#190673) 2026-08-24 116356835+AbdeMohlbi@users.noreply.github.com Remove outdated test todo about `dither` property of `Paint` (flutter/flutter#190936) 2026-08-24 47866232+chunhtai@users.noreply.github.com Add agent rule to prevent using material and cupertino in widget tests (flutter/flutter#191588) 2026-08-24 bkonyi@google.com [flutter_tools] Prevent crash when stdout is broken and print fails (flutter/flutter#191356) 2026-08-24 robert.ancell@canonical.com Add FlViewRendererSubsurface (flutter/flutter#191389) 2026-08-24 43054281+camsim99@users.noreply.github.com [Android] Inject `route` into manifest when specified on the command line in release mode (flutter/flutter#191328) 2026-08-24 269567208+reidbaker-agent@users.noreply.github.com [AGP 9.1.0 Migration flutter#3] Add buildModeFor overloads and wire Flutter dependencies through the new DSL (flutter/flutter#191218) 2026-08-24 engine-flutter-autoroll@skia.org Roll Skia from 698c60bf58f1 to 256c15026b91 (1 revision) (flutter/flutter#191586) 2026-08-24 15619084+vashworth@users.noreply.github.com On iOS 27+ devices, manually process lldb stops (flutter/flutter#191434) 2026-08-24 bkonyi@google.com [flutter_tools] Handle missing Xcode gracefully in getInfo and buildMacOS (flutter/flutter#191180) 2026-08-24 bkonyi@google.com [flutter_tools] Handle null version gracefully in CachedArtifact and MaterialFonts (flutter/flutter#191494) 2026-08-24 bkonyi@google.com [flutter_tools] Do not treat 'daemon' argument as daemon command in logger initialization (flutter/flutter#191442) 2026-08-24 bkonyi@google.com [flutter_tools] Resolve workspace root when running widget preview from member package (flutter/flutter#190952) 2026-08-24 dacoharkes@google.com [native_assets] Roll native packages (flutter/flutter#191253) 2026-08-24 bkonyi@google.com [flutter_tools] Add --force flag to flutter channel (flutter/flutter#191579) 2026-08-24 engine-flutter-autoroll@skia.org Roll Skia from 57968d087d18 to 698c60bf58f1 (1 revision) (flutter/flutter#191577) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages Please CC bmparr@google.com,stuartmorgan@google.com on the revert to ensure that a human is aware of the problem. To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose ...
…r#12619) Roll Flutter from 9a8278982588 to 15d8908addf6 (37 revisions) flutter/flutter@9a82789...15d8908 2026-08-25 engine-flutter-autoroll@skia.org Roll Packages from df2ba94 to 740f093 (17 revisions) (flutter/flutter#191734) 2026-08-25 dacoharkes@google.com [record_use] Remove const_finder (flutter/flutter#191702) 2026-08-25 48625061+muradhossin@users.noreply.github.com Warn when SwiftPM is disabled (flutter/flutter#188695) 2026-08-25 engine-flutter-autoroll@skia.org Roll Skia from b1a31575c373 to 480540178356 (1 revision) (flutter/flutter#191723) 2026-08-25 137456488+flutter-pub-roller-bot@users.noreply.github.com Roll pub packages (flutter/flutter#191726) 2026-08-25 engine-flutter-autoroll@skia.org Roll Skia from bfa276ed9ac5 to b1a31575c373 (1 revision) (flutter/flutter#191717) 2026-08-25 engine-flutter-autoroll@skia.org Roll Dart SDK from 0818e6dc28cc to 8996935d3d0a (2 revisions) (flutter/flutter#191706) 2026-08-25 engine-flutter-autoroll@skia.org Roll Skia from 31799e707cd4 to bfa276ed9ac5 (1 revision) (flutter/flutter#191701) 2026-08-25 chris@bracken.jp iOS: Add null check for touch rate correction task runner (flutter/flutter#191641) 2026-08-25 chris@bracken.jp iOS: Add test for engineAllowHeadlessExecution (flutter/flutter#191635) 2026-08-25 engine-flutter-autoroll@skia.org Roll Skia from cfae2af1bfeb to 31799e707cd4 (4 revisions) (flutter/flutter#191649) 2026-08-25 engine-flutter-autoroll@skia.org Roll Dart SDK from 2b75c83ddd77 to 0818e6dc28cc (1 revision) (flutter/flutter#191643) 2026-08-25 engine-flutter-autoroll@skia.org Roll Skia from 4a2fddefd3d8 to cfae2af1bfeb (1 revision) (flutter/flutter#191642) 2026-08-25 engine-flutter-autoroll@skia.org Roll Skia from 256c15026b91 to 4a2fddefd3d8 (6 revisions) (flutter/flutter#191633) 2026-08-25 97480502+b-luk@users.noreply.github.com Remove octant_offset_c uniform from ubersdf, reorder/document ubersdf uniforms (flutter/flutter#191597) 2026-08-25 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from 8Xu4ujBJniC0nQGx3... to MstTWE1RDOT-RnrtH... (flutter/flutter#191621) 2026-08-25 engine-flutter-autoroll@skia.org Roll Dart SDK from 78bbc37b6ff6 to 2b75c83ddd77 (3 revisions) (flutter/flutter#191614) 2026-08-24 bkonyi@google.com [flutter_tools] Fix $git typo in shared.bat to restore cache invalidation on Windows (flutter/flutter#191217) 2026-08-24 87962825+kyungilcho@users.noreply.github.com Skip removed observers during app exit requests (flutter/flutter#190343) 2026-08-24 bkonyi@google.com [engine] Support UTF-8 paths in Windows filesystem and path APIs (flutter/flutter#191360) 2026-08-24 okorohelijah@google.com Migrate ios driver tests batch 3 to simulators (flutter/flutter#191333) 2026-08-24 jmccandless@google.com Migrate texture example to material_ui (flutter/flutter#190673) 2026-08-24 116356835+AbdeMohlbi@users.noreply.github.com Remove outdated test todo about `dither` property of `Paint` (flutter/flutter#190936) 2026-08-24 47866232+chunhtai@users.noreply.github.com Add agent rule to prevent using material and cupertino in widget tests (flutter/flutter#191588) 2026-08-24 bkonyi@google.com [flutter_tools] Prevent crash when stdout is broken and print fails (flutter/flutter#191356) 2026-08-24 robert.ancell@canonical.com Add FlViewRendererSubsurface (flutter/flutter#191389) 2026-08-24 43054281+camsim99@users.noreply.github.com [Android] Inject `route` into manifest when specified on the command line in release mode (flutter/flutter#191328) 2026-08-24 269567208+reidbaker-agent@users.noreply.github.com [AGP 9.1.0 Migration flutter#3] Add buildModeFor overloads and wire Flutter dependencies through the new DSL (flutter/flutter#191218) 2026-08-24 engine-flutter-autoroll@skia.org Roll Skia from 698c60bf58f1 to 256c15026b91 (1 revision) (flutter/flutter#191586) 2026-08-24 15619084+vashworth@users.noreply.github.com On iOS 27+ devices, manually process lldb stops (flutter/flutter#191434) 2026-08-24 bkonyi@google.com [flutter_tools] Handle missing Xcode gracefully in getInfo and buildMacOS (flutter/flutter#191180) 2026-08-24 bkonyi@google.com [flutter_tools] Handle null version gracefully in CachedArtifact and MaterialFonts (flutter/flutter#191494) 2026-08-24 bkonyi@google.com [flutter_tools] Do not treat 'daemon' argument as daemon command in logger initialization (flutter/flutter#191442) 2026-08-24 bkonyi@google.com [flutter_tools] Resolve workspace root when running widget preview from member package (flutter/flutter#190952) 2026-08-24 dacoharkes@google.com [native_assets] Roll native packages (flutter/flutter#191253) 2026-08-24 bkonyi@google.com [flutter_tools] Add --force flag to flutter channel (flutter/flutter#191579) 2026-08-24 engine-flutter-autoroll@skia.org Roll Skia from 57968d087d18 to 698c60bf58f1 (1 revision) (flutter/flutter#191577) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages Please CC bmparr@google.com,stuartmorgan@google.com on the revert to ensure that a human is aware of the problem. To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose ...
FlutterViewController.viewDidLoadcreates a vsync client to correct the rate at which touch events are delivered on ProMotion displays, and passes itself.engine.platformTaskRunner. That property is nullable and only set once the engine's shell is created, then cleared again indestroyContext.FlutterVSyncClientrequires a non-null task runner and dereferences it. A view controller whose engine is nil would dereference null and takes the app down with it, at launch. We now bail out when there's no task runner.The argument is that losing whatever smoothing effect this has while we have no running egnine has no effect, and either way it's better than a null deref.
There's the separate argument detailed in #191199 that this entire client isn't really doing anything positive and should be deleted. This simply prevents the null deref until that work can land.
Also worth noting that
platformTaskRunneris declarednullableand the Swift-generatedinitWithTaskRunner:takes a_Nonnulltask runner, so clang spotted this issue when I enabled-Wnullable-to-nonnull-conversion:I'll follow up with a patch that enables that warning, but it requires a few other cleanups first.
Issue: #190030
Pre-launch Checklist
///).If you need help, consider asking for advice on the #hackers-new channel on Discord.
If this change needs to override an active code freeze, provide a comment explaining why. The code freeze workflow can be overridden by code reviewers. See pinned issues for any active code freezes with guidance.
Note: The Flutter team is currently trialing the use of Gemini Code Assist for GitHub. Comments from the
gemini-code-assistbot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed.