@@ -3667,7 +3667,7 @@ fn generate_common_repeater_code(
36673667 let ri_idx = * repeated_indices_size;
36683668 repeater_code = quote ! (
36693669 #ri[ #ri_idx] = #items_vec_ident. len( ) as u32 ;
3670- #ri[ #ri_idx + 1 ] = internal_vec . len( ) as u32 ;
3670+ #ri[ #ri_idx + 1 ] = _self . #repeater_id . len( ) as u32 ;
36713671 ) ;
36723672 * repeated_indices_size += 2 ;
36733673 if let Some ( rs) = repeater_steps_var_name {
@@ -3680,7 +3680,6 @@ fn generate_common_repeater_code(
36803680 #inner_component_id:: FIELD_OFFSETS . #repeater_id. apply_pin( _self) . ensure_updated(
36813681 || { #rep_inner_component_id:: new( _self. self_weak. get( ) . unwrap( ) . clone( ) ) . unwrap( ) . into( ) }
36823682 ) ;
3683- let internal_vec = _self. #repeater_id. instances_vec( ) ;
36843683 #repeater_code
36853684 )
36863685}
@@ -3740,13 +3739,17 @@ fn generate_with_grid_input_data(
37403739 ) ;
37413740
37423741 let new_row = repeater. new_row ;
3742+ let repeater_id = format_ident ! ( "repeater{}" , usize :: from( repeater. repeater_index) ) ;
37433743 let loop_code = quote ! ( {
3744+ let len = _self. #repeater_id. len( ) ;
37443745 let start_offset = items_vec. len( ) ;
3745- items_vec. extend( core:: iter:: repeat_with( Default :: default ) . take( internal_vec. len( ) * #repeated_item_count) ) ;
3746- for ( i, sub_comp) in internal_vec. iter( ) . enumerate( ) {
3747- let offset = start_offset + i * #repeated_item_count;
3748- sub_comp. as_pin_ref( ) . grid_layout_input_data( new_row, & mut items_vec[ offset..offset + #repeated_item_count] ) ;
3749- new_row = false ;
3746+ items_vec. extend( core:: iter:: repeat_with( Default :: default ) . take( len * #repeated_item_count) ) ;
3747+ for i in 0 ..len {
3748+ if let Some ( sub_comp) = _self. #repeater_id. instance_at( i) {
3749+ let offset = start_offset + i * #repeated_item_count;
3750+ sub_comp. as_pin_ref( ) . grid_layout_input_data( new_row, & mut items_vec[ offset..offset + #repeated_item_count] ) ;
3751+ new_row = false ;
3752+ }
37503753 }
37513754 } ) ;
37523755 push_code. push ( quote ! (
@@ -3814,19 +3817,24 @@ fn generate_with_layout_item_info(
38143817 "items_vec" ,
38153818 ctx,
38163819 ) ;
3820+ let repeater_id = format_ident ! ( "repeater{}" , usize :: from( repeater. repeater_index) ) ;
38173821 let loop_code = match repeater. repeated_children_count {
38183822 None => {
38193823 quote ! (
3820- for sub_comp in & internal_vec {
3821- items_vec. push( sub_comp. as_pin_ref( ) . layout_item_info( #orientation, None ) ) ;
3824+ for i in 0 .._self. #repeater_id. len( ) {
3825+ if let Some ( sub_comp) = _self. #repeater_id. instance_at( i) {
3826+ items_vec. push( sub_comp. as_pin_ref( ) . layout_item_info( #orientation, None ) ) ;
3827+ }
38223828 }
38233829 )
38243830 }
38253831 Some ( count) if count > 0 => {
38263832 quote ! (
3827- for sub_comp in & internal_vec {
3828- for child_idx in 0 ..#count {
3829- items_vec. push( sub_comp. as_pin_ref( ) . layout_item_info( #orientation, Some ( child_idx) ) ) ;
3833+ for i in 0 .._self. #repeater_id. len( ) {
3834+ if let Some ( sub_comp) = _self. #repeater_id. instance_at( i) {
3835+ for child_idx in 0 ..#count {
3836+ items_vec. push( sub_comp. as_pin_ref( ) . layout_item_info( #orientation, Some ( child_idx) ) ) ;
3837+ }
38303838 }
38313839 }
38323840 )
@@ -3900,13 +3908,16 @@ fn generate_with_flexbox_layout_item_info(
39003908 "items_vec_h" , // Use items_vec_h for length tracking (same as items_vec_v)
39013909 ctx,
39023910 ) ;
3903- let loop_code = quote ! ( for sub_comp in & internal_vec {
3904- items_vec_h. push(
3905- sub_comp. as_pin_ref( ) . layout_item_info( sp:: Orientation :: Horizontal , None ) ,
3906- ) ;
3907- items_vec_v. push(
3908- sub_comp. as_pin_ref( ) . layout_item_info( sp:: Orientation :: Vertical , None ) ,
3909- ) ;
3911+ let repeater_id = format_ident ! ( "repeater{}" , usize :: from( repeater. repeater_index) ) ;
3912+ let loop_code = quote ! ( for i in 0 .._self. #repeater_id. len( ) {
3913+ if let Some ( sub_comp) = _self. #repeater_id. instance_at( i) {
3914+ items_vec_h. push(
3915+ sub_comp. as_pin_ref( ) . layout_item_info( sp:: Orientation :: Horizontal , None ) ,
3916+ ) ;
3917+ items_vec_v. push(
3918+ sub_comp. as_pin_ref( ) . layout_item_info( sp:: Orientation :: Vertical , None ) ,
3919+ ) ;
3920+ }
39103921 } ) ;
39113922 push_code. push ( quote ! (
39123923 #common_push_code
0 commit comments