If the winds subsided and the flooding was caused purely by tidal effects, which are astronomical events, shouldn't it have been predictable months, if not years in advance?
The tides are only partially caused by astronomical events. There's always some difference between predicted and observed tide levels. The former typically only use astronomical indicators while the latter reflect all influences. Multiple influences resulted in those exceptionally high tides in Venice on 29 October 2018.
The astronomical influences are biased toward higher than average high tides at Venice at this time of year. The reason is that annual and semiannual tidal components at Venice peak in autumn and winter. Late autumn to midwinter is when Venice historically has experienced most of its exceptionally high tide events.
Two even longer term influences are subsidence and sea level rise. These alone have made tides relative to buildings in Venice 23 cm higher than they were in 1897. Venice suffered only one exceptionally high tide event (high tides at the benchmark Punta della Salute recording site that exceed exceed 140 cm) between 1872 to 1950. In contras it has suffered ten such events in the last two decades (including the 29 October 2018 event).
The straws that broke the camel's back were a confluence of a very strong storm and the shape of the Adriatic Sea. Taken individually, neither would have caused the 29 October 2018 event. The storm was associated with strong southerly winds (winds that blow from the south) that pushed waters northward along the eastern coast of Italy. By itself, this would have resulted in a storm surge that would have raised waters in the lagoon around Venice by 10, maybe 20 centimeters. Some flooding would have resulted if the storm surge coincided with astronomical high tide, but not the exceptionally high amount that was observed. Moreover, that would have been a coincidental fluke of an event.
What those winds did instead was to make the entire Adriatic Sea slosh longitudinally (east-to-west and back). This is called a seiche. Seiches are standing waves that occur in enclosed / semi-enclosed bodies of water. In addition to the Adriatic, seiches also occur in the Baltic (which occasionally floods St. Petersburg in a very similar manner to the flooding of Venice), the Great Lakes, and several other bodies of water. The Adriatic Sea seiche has a period of about 22 hours. The storm that preceded the 29 October 2018 flooding event lasted long enough to make the Adriatic seiche have a rather high amplitude and be rather long-lived.
The flooding occurred when the peak of this 22 hour period standing wave at Venice coincided with the peak of the short term (e.g., the 12.421 hour $M_2$ tidal component) astronomical tidal influences. Adding in the long term influences (annual and semiannual astronomical tides, subsidence, and sea level rise) made the 29 October 2018 flooding event not just exceptional but nearly record-breaking.