Firewalld had, at least last time I checked, way more capabilities than UFW. Both are fine at being basic firewalls, but I don't think you can build a router using just UFW.
Firewalld allows some pretty advanced rules. I use it to redirect a bunch of web requests going to a certain address over a local ssh tunnel.
@merompetehla UFW and firewalld provide a higher level of control, which means that they are quicker to learn, easier for simple tasks but harder to use in more granular levels. Their setup is translated into iptables rules at the end. With Iptables or its successor Nftables, you'll need to invest a bit more time to learn but have a more granular level of control at the end. I hope this helps.
I found firewalld had so many options that it was a bit overwhelming at first, especially understanding how zones were actually meant to be used, and how each zone had a default handover for the unhandled traffic. But OpenSUSE has a GUI for it so I was able to make sense of it. UFW seemed pretty user friendly and atraight forward.
Not anymore. It's nftables these days. iptables to nftables converters exist, but they're not 100% compatible.
Furthermore, with eBPF programmable firewalls are also efficient again, and there are various tools that leverage eBPF to do network operations at near-kernel speeds, often bypassing *tables rules you may have set up.