diff --git a/lib/web_ui/lib/src/engine/html/surface.dart b/lib/web_ui/lib/src/engine/html/surface.dart index 3a947bb15dc1b3c059c3f0f8cff29e19b749745b..b01ecbde7fb556613c28c9be5c60016b63eabee6 100644 --- a/lib/web_ui/lib/src/engine/html/surface.dart +++ b/lib/web_ui/lib/src/engine/html/surface.dart @@ -1092,7 +1092,17 @@ abstract class PersistedContainerSurface extends PersistedSurface { for (int indexInOld = 0; indexInOld < oldChildCount; indexInOld += 1) { final PersistedSurface? oldChild = oldChildren[indexInOld]; final bool childAlreadyClaimed = oldChild == null; - if (childAlreadyClaimed || !newChild.canUpdateAsMatch(oldChild!)) { + // After https://github.com/dart-lang/language/issues/1274 is + // implemented, `oldChild` will be promoted to non-nullable on the RHS + // of the `||`, so we won't need to null check it (and it will cause a + // build failure to try to do so). Until then, we need to null check it + // in such a way that won't cause a build failure once the feature is + // implemented. We can do that by casting to `dynamic`, and then + // relying on the call to `canUpdateAsMatch` implicitly downcasting to + // PersistentSurface. + // TODO(paulberry): remove this workaround once the feature is + // implemented. + if (childAlreadyClaimed || !newChild.canUpdateAsMatch(oldChild as dynamic)) { continue; } allMatches.add(_PersistedSurfaceMatch( diff --git a/lib/web_ui/lib/src/engine/semantics/semantics.dart b/lib/web_ui/lib/src/engine/semantics/semantics.dart index 1d511e5198cf34b55d9daa5c1bc0219b09126656..62fd421a804480cda84be4c7d2c411e0da988978 100644 --- a/lib/web_ui/lib/src/engine/semantics/semantics.dart +++ b/lib/web_ui/lib/src/engine/semantics/semantics.dart @@ -889,7 +889,17 @@ class SemanticsObject { effectiveTransformIsIdentity = effectiveTransform.isIdentity(); } } else if (!hasIdentityTransform) { - effectiveTransform = Matrix4.fromFloat32List(transform!); + // After https://github.com/dart-lang/language/issues/1274 is implemented, + // `transform` will be promoted to non-nullable so we won't need to null + // check it (and it will cause a build failure to try to do so). Until + // then, we need to null check it in such a way that won't cause a build + // failure once the feature is implemented. We can do that using an + // explicit "if" test. + // TODO(paulberry): remove this check once the feature is implemented. + if (transform == null) { // ignore: unnecessary_null_comparison + throw 'impossible'; + } + effectiveTransform = Matrix4.fromFloat32List(transform); effectiveTransformIsIdentity = false; }