fix(video): stel afspeelpunt-clear uit buiten de gelockte widgettree (#1114) #1120
No reviewers
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck!1120
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/video-playhead-clear-locked-tree-1114"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Wat & waarom
Bij het verlaten van een dia met (afspelende) video kon Flutter crashen met:
VideoPlayheadBus.clearForwiste het gepubliceerde afspeelpunt synchroon indispose(). Dispose draait tijdensBuildOwner.finalizeTree— de element-treeis dan gelockt. De video-editor luistert live mee via de "Knip hier"-knop
(
ValueListenableBuilder<VideoPlayhead?>); dienssetStatevalt onder de locken gooit de assertie. Beide dispose-paden raken het (
_VideoPreviewStateen_VideoEmbedPreviewState), dus de fix zit centraal in de bus.Aanpak
SchedulerBinding.schedulerPhase == persistentCallbacks),dan stelt
clearForde clear uit tot ná het frame (addPostFrameCallback).slideId-guard maakt de uitgestelde clear een no-op als eenandere dia intussen zelf een afspeelpunt heeft gepubliceerd — er wordt dus
nooit een vers afspeelpunt weggegooid.
Test
test/video_playhead_bus_test.dartreproduceert de exacte assertie zónder de fix(rood) en is groen mét de fix: een live
ValueListenableBuilderop de bus pluseen widget die in
dispose()clearForaanroept, verwijderd tijdens een pump(zodat dispose onder de tree-lock draait).
Closes #1114