Milan Lucic and Derek Ryan each had a goal and assist for the Flames,who snapped a three-game skid. Matthew Tkachuk, Sean Monahan and Tobias Rieder also scored. Mikael Backlund and Johnny Gaudreau each added two assists. David Rittich had 25 saves.
The Flames found themselves trailing 1-0 after just 34 seconds, then got some momentum when Tkachuk dropped the gloves in a fight with Vancouver's J.T. Miller on the ensuing faceoff.
''We were stunned,'' Dube said. ''Right away you see some heads drop, but when (Tkachuk) went out there every single guy was on the bench going crazy. ... I think it got our momentum going and said, `we're here for business,' so he was big for us.''
Calgary moved into the first wild card spot in the Western Conference, one point ahead of Winnipeg and Arizona, and three points behind the Canucks who lead the Pacific Division.
Tanner Pearson and Adam Gaudette scored for the Canucks, who lost their third straight and saw a nine-game home-winning streak end. Jacob Markstrom stopped 26 shots.
Vancouver coach Travis Green said the Canucks looked like a team still learning how to battle for a playoff spot. Vancouver has missed the playoffs in each of the last four seasons.
''I think tonight in a way they (Calgary) looked like a team that had been in this situation before,'' he said. ''We made some mistakes at costly times, a couple little details that cost goals. When you are playing games like this, it is those little details that matter.''
Lucic put Calgary ahead 4-2 on a power play at 6:48 of the third, tipping Backlund's shot past Markstrom for his fifth of the season. Monahan made it 5-2 at 16:01 on a pretty feed from Gaudreau.
Pearson said the Canucks need to do a better job clearing the net in front of Markstrom.
''He gave us a chance to win that hockey game,'' Pearson said. ''We have to help him when he's doing that. That one is on us.''
Markstrom blamed himself.
''It was a huge game,'' he said. ''I have to come up with some stops and help our team. ... It's my job to see the puck.''
The Flames led 3-2 after 40 minutes.
Dube gave Calgary the lead with just under three minutes gone in the second with a shot from the high slot. Markstrom was screened on the play by a battle in front of the net between rookie Canucks defenseman Quinn Hughes and Ryan.
The teams were tied 2-2 after a first period that saw a goal and fight in the first 35 seconds.
The Canucks scored with just 34 seconds gone. Pearson took a pass from Hughes, turned and fired a low shot that went under Rittich. Tkachuk and Miller then dropped gloves.
Flames' coach Geoff Ward praised Tkachuk's leadership.
''He's trying to change the momentum in the hockey game and get our guys back on a good footing,'' Ward said. ''He understands what impact he can have on the game.''
Ryan tied it at 4:20 on a shot from the top of the left faceoff circle. Markstrom was screened on the play by Canucks forward Jake Virtanen.
Tkachuk made it 2-1 on a breakaway at 12:08. Markstrom made a pad save on the initial shot but the puck when in off Tkachuk's skate.
Gaudette scored his first goal in 15 games at 18:13. He pounced on a bad bounce off the boards behind the Calgary net and lifted a shot over a surprised Rittich.
NOTES: The Canucks' longest home winning streak is 11 games between Feb. 3 and March 19, 2009. ... Vancouver's Brock Boeser left the game in the third period holding his arm after a collision with Calgary's Andrew Mangiapane. ... F Micheal Ferland, who has missed 41 of 43 games with a concussion, skated with the Canucks for the first time Saturday and expects to go to the AHL on a conditioning stint. ... Calgary has given up the opening goal 33 times in the last 56 games.
Flames: At San Jose on Monday night.
Canucks: Host Nashville on Monday night.
Copyright 2020 by STATS LLC and Associated Press. Any commercial use or distribution without the express written consent of STATS LLC and Associated Press is strictly prohibited.