Barnes stroomde door vanuit de jeugd van Leicester City. Dat nam hem niet meteen op in het eerste elftal, maar verhuurde hem in januari 2017 eerst aan MK Dons. Hiervoor maakte hij 6 doelpunten maakte in 21 wedstrijden in de League One. Na zijn terugkeer volgde in augustus 2017 een huurperiode van een halfjaar bij Barnsley. Hiervoor maakte hij 5 doelpunten in 23 wedstrijden in de Championship. Tijdens de winterstop werd hij teruggehaald naar Leicester, waar hij dat seizoen nog drie keer in actie kwam als invaller in de Premier League. Leicester City verhuurde Barnes tijdens het seizoen 2018/19 aan West Bromwich Albion, opnieuw een ploeg in de Championship. Hij was op 4 augustus 2018 meteen trefzeker tijdens zijn debuut, tegen Bolton Wanderers.[3] In een halfjaar kwam hij tot 26 wedstrijden en 9 goals, waarna hij opnieuw werd teruggehaald.
Barnes groeide in de tweede seizoenshelft van 2018/19 uit tot basisspeler bij Leicester City. Hij maakte hiervoor op 20 april 2019 zijn eerste doelpunt in de Premier League, in een met 2–2 gelijkgespeeld duel met West Ham United. Vanaf het seizoen 2019/20 was Barnes basisspeler van Leicester City. Hij miste dat Premier League-seizoen maar twee wedstrijden en was goed voor zes goals en acht assists. Op 22 oktober 2020 scoorde hij voor het eerst in de Europa League, tijdens een 3–0 overwinning op Zorja Loehansk. Barnes won in 2020/21 de FA Cup met Leicester, hoewel hij zelf alleen in de derde en vierde ronde van het toernooi speelde. Hij was drie maanden later basisspeler toen zijn ploeggenoten en hij het FA Community Shield wonnen, ten koste van Manchester City. Barnes maakte in 2022/23 dertien doelpunten in de Premier League en was daarmee dat jaar clubtopscorer. Hij kon hiermee niet voorkomen dat Leicester degradeerde naar de Championship.
Barnes daalde niet met Leicester af naar de Championship. Hij tekende in plaats daarvan in juli 2023 voor vijf jaar bij Newcastle United, de nummer vier van de Premier League in het voorgaande seizoen. Dat betaalde 44 miljoen euro voor hem aan Leicester City.[4] Barnes debuteerde tijdens de eerste speelronde van het seizoen 2023/24 voor Newcastle met een invalbeurt tegen Aston Villa. Hij gaf tien minuten na zijn entree de assist voor de 4–1 en maakte zelf 5–1, wat ook de eindstand was.[5]
Barnes kwam uit voor meerdere Engelse nationale jeugdelftallen. Hij behoorde tot de Engelse selectie op het EK –21 van 2019. Barnes debuteerde op 8 oktober 2020 in het Engels voetbalelftal. Bondscoach Gareth Southgate liet hem toen in de 76e minuut invallen voor Jack Grealish tijdens een met 3–0 gewonnen oefeninterland tegen Wales.