fuchsia: Fix first_layer handling (#26085)

diff --git a/shell/platform/fuchsia/flutter/fuchsia_external_view_embedder.cc b/shell/platform/fuchsia/flutter/fuchsia_external_view_embedder.cc
index f14d5e8..313146b 100644
--- a/shell/platform/fuchsia/flutter/fuchsia_external_view_embedder.cc
+++ b/shell/platform/fuchsia/flutter/fuchsia_external_view_embedder.cc
@@ -388,41 +388,44 @@
         // Scenic currently lacks an API to enable rendering of alpha channel;
         // Flutter Embedder also lacks an API to detect if a layer has alpha or
         // not. Alpha channels are only rendered if there is a OpacityNode
-        // higher in the tree with opacity != 1. For now, always assume t he
-        // layer has alpha and clamp to a infinitesimally smaller value than 1.
+        // higher in the tree with opacity != 1. For now, assume any layer
+        // beyond the first has alpha and clamp to a infinitesimally smaller
+        // value than 1.  The first layer retains an opacity of 1 to avoid
+        // blending with anything underneath.
         //
         // This does not cause visual problems in practice, but probably has
         // performance implications.
-        auto& scenic_layer = scenic_layers_[scenic_layer_index];
-        auto& scenic_rect = found_rects->second[rect_index];
+        const SkAlpha layer_opacity =
+            first_layer ? SK_AlphaOPAQUE : SK_AlphaOPAQUE - 1;
         const float layer_elevation =
             kScenicZElevationBetweenLayers * scenic_layer_index +
             embedded_views_height;
+        auto& scenic_layer = scenic_layers_[scenic_layer_index];
+        auto& scenic_rect = found_rects->second[rect_index];
         scenic_layer.shape_node.SetLabel("Flutter::Layer");
         scenic_layer.shape_node.SetShape(scenic_rect);
         scenic_layer.shape_node.SetTranslation(
             layer->second.surface_size.width() * 0.5f,
             layer->second.surface_size.height() * 0.5f, -layer_elevation);
         scenic_layer.material.SetColor(SK_AlphaOPAQUE, SK_AlphaOPAQUE,
-                                       SK_AlphaOPAQUE, SK_AlphaOPAQUE - 1);
+                                       SK_AlphaOPAQUE, layer_opacity);
         scenic_layer.material.SetTexture(surface_image_id);
 
         // Only the first (i.e. the bottom-most) layer should receive input.
         // TODO: Workaround for invisible overlays stealing input. Remove when
         // the underlying bug is fixed.
-        if (first_layer) {
-          scenic_layer.shape_node.SetHitTestBehavior(
-              fuchsia::ui::gfx::HitTestBehavior::kDefault);
-        } else {
-          scenic_layer.shape_node.SetHitTestBehavior(
-              fuchsia::ui::gfx::HitTestBehavior::kSuppress);
-        }
-        first_layer = false;
+        const fuchsia::ui::gfx::HitTestBehavior layer_hit_test_behavior =
+            first_layer ? fuchsia::ui::gfx::HitTestBehavior::kDefault
+                        : fuchsia::ui::gfx::HitTestBehavior::kSuppress;
+        scenic_layer.shape_node.SetHitTestBehavior(layer_hit_test_behavior);
 
         // Attach the ScenicLayer to the main scene graph.
         layer_tree_node_.AddChild(scenic_layer.shape_node);
 
-        // Account for the ScenicLayer's height when positioning the next layer.
+        // Reset for the next pass:
+        //  +The next layer will not be the first layer.
+        //  +Account for the current layer's height when positioning the next.
+        first_layer = false;
         scenic_layer_index++;
       }
     }