Skip to content

Commit df0e50d

Browse files
authored
Fix DynamicContainer indexMap update issue (#568)
1 parent 0c0f992 commit df0e50d

File tree

4 files changed

+53
-2
lines changed

4 files changed

+53
-2
lines changed

Example/HostingExample/ViewController.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,6 @@ class ViewController: NSViewController {
6666

6767
struct ContentView: View {
6868
var body: some View {
69-
ToggleExample()
69+
DynamicLayoutViewExample()
7070
}
7171
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
//
2+
// DynamicLayoutViewUITests.swift
3+
// OpenSwiftUIUITests
4+
5+
import SnapshotTesting
6+
import Testing
7+
8+
@MainActor
9+
@Suite(.snapshots(record: .never, diffTool: diffTool))
10+
struct DynamicLayoutViewUITests {
11+
@Test
12+
func dynamicLayout() {
13+
struct ContentView: View {
14+
@State var show = false
15+
var body: some View {
16+
VStack {
17+
Color.red
18+
.task { show = true }
19+
if show {
20+
Color.blue
21+
}
22+
}
23+
}
24+
}
25+
openSwiftUIAssertSnapshot(of: ContentView())
26+
}
27+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
//
2+
// DynamicLayoutViewExample.swift
3+
// SharedExample
4+
5+
#if OPENSWIFTUI
6+
import OpenSwiftUI
7+
#else
8+
import SwiftUI
9+
#endif
10+
11+
struct DynamicLayoutViewExample: View {
12+
@State var show = false
13+
var body: some View {
14+
VStack {
15+
Color.red
16+
.task { show = true }
17+
if show {
18+
Color.blue
19+
}
20+
}
21+
}
22+
}

Sources/OpenSwiftUICore/Layout/Dynamic/DynamicContainer.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,9 @@ struct DynamicContainerInfo<Adapter>: StatefulRule, AsyncAttribute, ObservedAttr
340340
needsPhaseUpdate = false
341341
}
342342
let (changed, hasDepth) = updateItems(disableTransitions: disableTransitions)
343-
if !changed {
343+
if changed {
344+
needsUpdate = true
345+
} else {
344346
for (index, item) in info.items.enumerated().reversed() {
345347
guard let phase = item.phase else {
346348
continue

0 commit comments

Comments
 (0)