diff --git a/lib/web_ui/lib/src/engine/html/surface.dart b/lib/web_ui/lib/src/engine/html/surface.dart
index 3a947bb15dc1b..b01ecbde7fb55 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 1d511e5198cf3..62fd421a80448 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;
}