diff --git a/frameworks/core/components_ng/pattern/waterflow/layout/top_down/water_flow_segmented_layout.cpp b/frameworks/core/components_ng/pattern/waterflow/layout/top_down/water_flow_segmented_layout.cpp index b9ea609305b62988f7c89f8ac16ef41a40859363..92eeb005717c292afb5097a12dc2888b058bb69e 100644 --- a/frameworks/core/components_ng/pattern/waterflow/layout/top_down/water_flow_segmented_layout.cpp +++ b/frameworks/core/components_ng/pattern/waterflow/layout/top_down/water_flow_segmented_layout.cpp @@ -59,6 +59,7 @@ void WaterFlowSegmentedLayout::Measure(LayoutWrapper* wrapper) sections_ = pattern->GetSections(); if (sections_ && !IsSectionValid(info_, info_->childrenCount_)) { info_->isDataValid_ = false; + WaterFlowLayoutUtils::PreMeasureSelf(wrapper_, axis_); return; } diff --git a/test/unittest/core/pattern/waterflow/water_flow_segment_layout_test.cpp b/test/unittest/core/pattern/waterflow/water_flow_segment_layout_test.cpp index 1a6632ff69dfe1a2e1cfaffbe9b9fa1c778dd660..cba977dad4188d0bfc83a4089a9d49ed8b843f79 100644 --- a/test/unittest/core/pattern/waterflow/water_flow_segment_layout_test.cpp +++ b/test/unittest/core/pattern/waterflow/water_flow_segment_layout_test.cpp @@ -2128,4 +2128,46 @@ HWTEST_F(WaterFlowSegmentTest, WaterFlowRTLPaddingWithSections003, TestSize.Leve EXPECT_LE(multiColumnItem.Right(), WATER_FLOW_WIDTH - 30.0f + 1.0f); EXPECT_GE(multiColumnItem.Left(), 10.0f - 1.0f); } + +/** + * @tc.name: InvalidSectionWithDefaultSize + * @tc.desc: Verify WaterFlow maintains default size when both children count and segment tails are invalid + * @tc.type: FUNC + */ +HWTEST_F(WaterFlowSegmentTest, InvalidSectionWithDefaultSize, TestSize.Level1) +{ + // Initialize WaterFlow with default size + CreateWaterFlow(); + ViewAbstract::SetWidth(CalcLength(400.0f)); + ViewAbstract::SetHeight(CalcLength(800.0f)); + + CreateWaterFlowItems(5); + auto secObj = pattern_->GetOrCreateWaterFlowSections(); + secObj->ChangeData(0, 0, SECTION_13); + CreateDone(); + + // Verify initial indices + auto info = AceType::DynamicCast(pattern_->layoutInfo_); + EXPECT_EQ(info->startIndex_, 0); + EXPECT_EQ(info->endIndex_, 4); + + // Create mismatch by removing children + for (int i = 3; i <= 4; ++i) { + frameNode_->RemoveChildAtIndex(3); + } + frameNode_->ChildrenUpdatedFrom(3); + + // Ensure mismatch by modifying segment tails + if (!info->segmentTails_.empty()) { + info->segmentTails_.back() = 10; + } + + frameNode_->MarkDirtyNode(PROPERTY_UPDATE_MEASURE); + FlushUITasks(); + + // WaterFlow should maintain default size + auto geometryNode = frameNode_->GetGeometryNode(); + EXPECT_EQ(geometryNode->GetFrameSize().Width(), 400.0f); + EXPECT_EQ(geometryNode->GetFrameSize().Height(), 800.0f); +} } // namespace OHOS::Ace::NG \ No newline at end of file