Setting up a custom domain for the Fly.io app with CloudFlare as a proxy is pretty straightforward but there are a few little obstacles that might take your time if you don't know them.
1) Fly.io: fill not only A and AAAA records but also Domain ownership verification
Because Cloudflare acts as a proxy the actual DNS records are pointed to CloudFlare servers. Therefore Fly.io will not consider the records as valid until you fill also Domain ownership verification.
2) CloudFlare: set TLS/SSL encryption to FULL.
The default is Flexible and with such setup a CloudFlare will inform you that Origin server responded with error 520.