Thank you for hanging with us. You're watching Fandals Sports Books. More ways to win. I'm Lisa Kearney. We are live in our Los Angeles studio. I'm alongside our sports betting expert, Dave Weaver, our analytics expert, and Ed Egros. You guys know these guys by now. It is week 14. We have a ton of great matchups ahead of us with playoff implications. We're going to get to all of them. Dave, Ed, and the rest of our experts breaking down the biggest games of the week, handing out best bets. And of course, we have our best value. DFS plays as well. It is go time. So make sure you download the Fandals Sports Book app. Sign up for your new account. Plug in that promo code. It'll be on your screen all show long. More ways, 1,000. You're going to get a risk-free bet up to 1,000 bucks. All right, time to kick this thing off. And we're going big right out of the gate. How about this? The seven and five bills head to Tampa Bay to take on the nine and three buccaneers. Yes, I am psyched for this matchup. Buffalo, ready to get back at it. Coming off that home loss on Monday night against New England, where the bills gave up 222 yards rushing in that massive chill, cold, wind, snowstorm. On the other side, the Bucs tied with the second best record in the NFC. And this should be a great game if you like scoring. The Bucs ranked first in the NFL in points per game. The Bills ranked fifth. Tampa Bay at three point, home favorite. David, that just tells me Bills are getting some respect here in this matchup. And they should, despite the recent volatility, I think. Dave, how are you betting this one? Or should they? I don't know. I mean, seven and five is a very disappointing record. I thought they would go to the Super Bowl. I'm not feeling that right now for Buffalo. We know Tom Brady will throw the ball more than three times, like Mac Jones did last week. But here's the deal with Tampa Bay. They're just great at home. Four and O against the spread, their last four games, covering by an average of 15 points in those games. And Buffalo hasn't really played anybody. They played the Chiefs who they beat. They played the Patriots who they lost. Everybody else, not really that good. They've beaten Davis Mills, Mike White, Trevor Simeon, Jacobi Berset, Tyler Heinecki, backup quarterbacks that weren't started at the beginning of the year. This is a real asset test for the Buffalo defense. I don't think they can handle what Tampa's gonna do. I think this line is way too small. I'm surprised it's only three actually. That is why I think they're getting a lot of respect. And I don't think they're done yet. What do you think? I think part of the reason is because a lot of people are just throwing out the Monday game altogether because the conditions, the elements were just a little bit too weird. And I understand that. But if you look at overall passing numbers, take away that game that dropped Buffalo's passing attack from 7th to 10th. It's still worse than Tampa Bay's. Tampa Bay's has been better despite all of the injuries when Gronka's missed some time. Antonio Brown may not be back. Whatever's going on, still, Tom Brady is able to right this ship and that matters significantly. Yes, the bill's defense is a little bit banged up, certainly losing Tredavius White. That matters significantly here, but no matter what metric you look at, there's nothing that suggests that Josh Allen can outgun Tom Brady. I'm gonna do the super conservative thing because I think this line is pretty sharp. I'm just gonna take Tampa Bay on the money line at minus 178. I know it's a little bit lame here, but I'm comfortable that at least the Bucks can win this game, regardless of what silly things might occur. Have you watched anything this season? I am telling you, you can't predict anything. 44-year-old Tom Brady, number one in passing yards, number one in passing touchdowns, number one in your heart. Cole Wright, Tampa Bay, by the way, matching their best start in franchise history. Cole Wright knows all of that. Time for our right take here with our NFLX work. Cole, which team do you have winning and by how many points in this matchup? Well, Father Tom, he's at home trying to figure out how to take down Tom Brady, like Tom was trying to figure out how to catch Jerry in that mousetrap, and here we are. And maybe everyone's gonna finally believe me when I say that the Buffalo Bills are flat out overrated. They dropped three of their last five to Jacksonville, Indy and New England, and they haven't beaten the team with a winning record since Kansas City, and that was week five. Now, in the meantime, don't look now, but the Tampa Bay Buccaneers are a well-oiled machine. They're number one overall passing offense. Well, it should be good enough to offset that number one overall defense by the Buffalo Bills, and hell, maybe we'll see Tom Brady and Bruce Arians employ a Navy midshipman kind of offense. Like we saw Bill Belichick in the Patriots do on Monday night because plain and simple Buffalo couldn't stop it. Go Tampa Bay in this one, 28 to 17, they get the W. I can't wait for them to win by only two. And then, yeah, the money line was the play there for Tampa Bay. All right, you guys, if you roll with Brady and the Bucs, give the points there. A winning $50 bet means you're gonna collect more than $93. It's the Fandall Sportsbook app. All right, let's get to this ASU West showdown at Arrowhead this week, featuring the eight and four chiefs and the six and six Raiders. We're looking at two teams you're headed in opposite directions. The chiefs have won five straight, including a 22 to nine win against the Broncos last week to maintain that top spot in this division. Then the Raiders lost to Washington last week. They've dropped four of five while averaging less than 15 points per game in those losses. Here we are, the chiefs giving eight and a half points in this one. Dave, how are you betting this matchup? Well, I just can't believe how good Kansas City has gotten on defense. The first five games this season, they gave up 29 points or more, five games in a row. Their last five games, they've given up 17 points or less. Just a complete 180. And I think that their defense is going to be too much. Raiders were so good against this team last year. They put up a lot of points. In their only matchup this year, the chiefs outgained them, 516 yards to 299. So this is a spot where I just think the Raiders are tailspinning. They're flat. I can't back Las Vegas. Well, I disagree with you, Dave. I'm going to take the Raiders in this matchup. Derek Carr's kind of a road warrior. It's really funny with him this year. The Raiders have gone to Pittsburgh in one. They went to Dallas on Thanksgiving. I think this line is too big. The first matchup was all chiefs. But I think the Raiders hang around and make this a competitive game. I'm going to roll with Vegas. All right. Let's get a bit deeper on this Raiders Chiefs matchup here. And we're going to use next-gen stats to get an analytical perspective on this game. Thanks, guys. Hey, the NFL analyzes the location speed, acceleration of every player on every play, and creates these various data sets that we hear of more ways to win to get to tap into. So I always turn to our analytics guy, Ed. And I want you to give us a stat that you're using to bet this Las Vegas, Kansas City game. So it is the holiday season. And my wish this holiday season is that we never, ever use wins as a stat to evaluate quarterbacks. Let's look at Pat Mahomes. He is not playing well despite this winning streak, as seen in this pass chart from last week. He did not throw a ton just 29 times, but completed roughly half of his passes. With a completion percentage over expected of negative 20.4%, that's in the bottom three of all starters in week 13. Two important things to look for to see if CPOE is a legitimate stat here. Was the quarterback pressured and did the receivers drop the ball a lot? Well, Mahomes was pressured 20% of the time. That's not that much, folks. And his receivers dropped three passes. That's not good, but that's not a lot. Mahomes has been playing at this mediocre level for a while now, and I just cannot back the Chiefs in such a large spread, so I'm gonna lean Raiders. I'm gonna pretend like you didn't say any of that. Thanks a lot, Ed. Happy holiday. As a Kansas City girl, I have to move on here. Awesome stuff, I add. A great insight into those numbers. Next level info from next gen stats. Ed made his pick, but you can do you. Roll with me, you know? If you wanna take Patrick Mahomes and the Chiefs giving those points, a winning $50 bet means you're gonna collect more than $93. And a reminder, you can make your first bet on the app risk-free. Just sign up for a new Fandall Sportsbook account using the promo code moreways1000. You'll get a risk-free bet up to $1,000. Again, that's promo code moreways1000. Time now for our DFS download. Of course, that means a chance to win millions in prizes for free. Yes, Fandall's hooking it up for you for free. We do it every week. Just head to Fandall.com. Sign up for the weekly DFS contest.  Compete each week for free. Just sign up, set your roster, play, and win. Of course, our job here on Moreways to Win is to help you score as many points as possible. So, Fandall Editor and Chief JJ Zacharyson is in the house with us with his best values for week 14. Hey, JJ. Hey, Lisa, we're waiting to hear what's gonna happen with Elijah Mitchell because he is in concussion protocol. And as we know, Mitchell's been seeing a lot of work in that San Francisco backfield. If he doesn't go and with Jeff Wilson banged up with a knee flare up, Jamaical Hasty becomes a very attractive value at just $4,700. The 49ers have been the third-most run-heavy team in football this year, and this week they get a Bengals defense that ranks sixth and adjusted fantasy points allowed to running backs. Some things do need to break Hasty's way before Sunday, but those things can very well happen, and that makes him a nice value. Next, there's Elijah Moore. Elijah Moore's been crushing it. He's seen at least 33% of New York's targets in each of his last two games, and he hasn't seen fewer than six targets in a game since week seven, and since week nine, only Justin Jefferson is averaging more fantasy points per game than Elijah Moore is. So at $6,300, he's a great value because of his recent usage and performance. And then lastly, the last value I like this week, Givante Williams. Williams saw 85% of Denver's running-back rushes this past week and an insane 25% target share that was without Melvin Gordon. At the time of this recording, we don't know if Melvin Gordon's gonna go or not this weekend, but you could make the argument that even if Gordon is active, Williams is a good play at $6,700 because Denver gets Detroit. Detroit's been the fourth-friendliest team to running-backs this season in fantasy football, and after Williams' big performance, would anyone be shocked that Denver gives more work to the rookie Givante Williams? So he should find your lineup at just $6,700. There you have it. Thank you, JJ. Go to Fandle.com and sign up for free DFS competitions right now and each week of this NFL season. Hey, use JJ's information for a chance to win millions in prizes. Follow our guru at late-round QB on Twitter and Instagram as well. Right now, let's get back to our game previews, and for that we head to the AFC North and Cleveland where the six-and-six Browns host the eight-and-four Ravens. These two teams just faced off in week 12.  Cleveland lost the week 12 matchup in Baltimore, that game 16-10, rushing for just 40 yards. That was a season low. Meanwhile, the Ravens are coming off a tough loss, lost by one point in Pittsburgh after a failed two-point conversion with just 12 seconds to go in that game. A thriller for the fans for sure. Baltimore now getting two-and-a-half on the road this week. Ed, which side do you like? Well, when you talk about the quarterback matchup here, I think it's really important to keep in mind that if a quarterback is out there, it doesn't mean that they are 100% healthy. When Baker Mayfield hurt his shoulder after week six, he just hasn't been the same quarterback. Since that injury, his total EPA when not pressured, which is a stable metric, it's only two. That's almost worse than average. Total EPA on a four-man rush, meaning the defense isn't blitzing, negative 13.6. And then total EPA on short throws from zero to nine air yards, it's just 3.2. It's not very strong. So all those stable metrics that you can look at without pressure, short throws, Baker Mayfield is really struggling. I get Lamar Jackson hasn't been playing well lately, but it hasn't been this bad. So I'm going to take not just the Ravens to cover, but the Ravens to win outright. Yeah, I'm going to go with the Browns if there was ever a defense for Baker Mayfield to get right against the Baltimore. They're different than the team he saw a couple weeks ago. They're number one corner Marlon Humphries out for the year, such a depleted secondary that John Harbaugh said that's why he went for two at the end of the Steelers game, walking wounded at cornerback. The Ravens come into this game, Lisa, 31st against the pass. I think the Browns settled the score they cover and win. I want to give a special shout out for our viewers with us in Chicago watching on NBC Sports Chicago. Hey, right now we're going to break down the Bears. Week 14 matchups sitting at four and eight. Bears aren't going far for this one guys, headed to Lambeau Field to take on the Green Bay Packers who are sitting at nine and three. Chicago is getting 12 and a half points on the road here. Cole, Ryan, you are in Chicago, so curious to get your take here, but Dave Weaver, I want to start with you. Let's get your pick first. Well, I mean, this is just too big of a rivalry for the spread to be as big as this. 12 and a half points. I went back to 1997. The Packers have only covered against the Bears once as a double-digit favorite. And that was in 2011 when the Bears didn't cover by a point with Josh McCown and quarterback who was starting his first game in four years. Khalil Bell, once they're running back and their receiver, one of them was Dane Sandsenbacher. Okay, enough said. You're supposed to cover against those guys. Too big of a rival for me to be laying that many points. The Bears last five games, by the way. They've kept them close, 11 or less, against teams like the Ravens and the Cardinals. I don't see why they couldn't cover this one, Cole. Well, I'm not falling for that. Bears banana in the tailpipe again because they failed me time and time again. It's the league's oldest rivalry despite the Bears being four games under 500. They have mustered up the ability to stick in ball games. We saw 22 points versus Arizona, but they allowed 33. And that was the fourth time this year. They've allowed 30 or more points. Now, Chicago, they are top 10 in defense and rushing, but that all sounds great. But what did the Packers do? And what did they do well? Well, they take away what you do well and they do it extremely well. So that's six great defense for Mike Petten and company that should be able to stop what the Bears bring to the table plus Green Bay, they won the last five versus the Bears. So let's just go ahead and make it a smooth six. Green Bay, they win in this one and they cover 34-21. Now to those bright lights on Monday night guys in a huge matchup for the NFC West and the NFC conference standings here. The eight and four Rams traveled to Arizona to face the 10 and two Cardinals. Hey, are the Rams back? Ended their three game skid, big win, 37-7. Over Jackson, I know everybody at home is going against Jacksonville. I know wide receiver Cooper cup having a historic season here became the first player in NFL history with at least 100 catches in 10 receiving touchdowns in the first 12 games of a season on fire. As for the Cardinals, Kyler Murray returned from an ankle injury that caused him to miss three games. He came to play though through for two touchdowns, ran for two more in Arizona's 33-22 win at Chicago. Cardinals giving two and a half points in this matchup. Tony, give me your pick here. Yeah, I think the look the Rams clearly have made a trend or a history this year beaten up on the Patsy's the really weak teams like they did against Jacksonville. I like him in this spot though. I mean Kyler Murray, it's one thing to beat Andy Dalton Stafford rebounded last week. His confidence is soaring. When I've got a game where I don't think there's going to be a huge home field advantage Dave and I think that the underdog can win the game outright. I'm going to take the two and a half points. Give me the Rams. Oh, what about when Kyler Murray beat Matthew Stafford in week number four by like whatever it was three touchdowns or so. This was a blowout in LA. This line seems small to me. Obviously they're getting a lot of respect after beating Jacksonville last week but the Cardinals are for real. Coles know that all year long they are going to probably shatter their franchise record of 13 wins. They got back in 2015. They do play the Cowboys on the road down the line but I don't see why they couldn't win this game and go on to win at least 15 this year. I'll take Arizona. I think this is the first time all year at least that I picked against the Rams and then Pony takes them. Weird. Yeah, so now it's on the record. Thank you. Thank you guys. All right you guys, we use the next gen stats on this show because that is what we do. We did a little bit deeper here. Ed used the next gen stats to bet the Raiders Chiefs game earlier in the show. Now I want us to give us three bets that you're using this next level data and these next gen stats are really going to give us good value on the Vandal Sportsbook app here in week 14, what do you got? I'm surprised the segment's still going on after all the Pat Mahomes hate that I spewed out earlier but hey. Hey, I'm a hometown girl.  I understand, I understand. So we'll move on to Nashville because the Titans are comfortable minus 1200 to win the AFC South but what hasn't been comfortable is this Titans offense over the last few weeks. Here is Ryan Tannehill's quarterback grid for the season. The short throws from zero to 10 yards, they're good relative to the rest of the league but specifically I want to talk about the importance of play action in making Tannehill effective. When Derek Henry was healthy, the Titans ran play action 27% of the time but lately it's down to 20%. Tannehill's total expected points added with play action is a solid 5.4 but without it, it's negative 19.9. You do not need a frightening run game to have effective play action. With the Titans coming off a week to retool I believe they will embrace more play action and cover against the Jaguars. Next, Panthers running back Christian McCaffrey is out for the year and just like the last time Carolina faced Atlanta they must turn to the backups. Here's how Chubba Hubbard played from that week eight game. 82 yards and 24 carries sounds like a lot but next gen shows us it should have been a lot more given the defense and how the average running back would have performed. Hubbard's rushing yards over expected was negative 37. One of the worst performances of the week especially given the workload. He had a successful run just 42% of the time. This performance explains why Amir Abdullah has been used more as a utility back because he has a higher success rate with every individual carry. That adjustment means I'm gonna lay the points against Atlanta. Finally, is Russell Wilson back from that hand injury? Well, that should be good news for Tyler Lockett, right? As seen by his route chart on Sunday's win over the 49ers. Lockett showcased his versatility running a variety of routes. It was a medium to deep threat. His air yards per target was a solid 12.2 yards. His expected completion percentage over expected was an astounding 28.1% one of the larger marks of the week and he was only double team 12.5% of the time meaning the defense gave Wilson opportunities to sling it to Lockett. It's only one week and I say it all the time do not succumb to recency bias but against the Texans who are sputtering out of control I'm laying the points. You actually do say that a lot. I think you have reminded us each and every week of this season. I do that. Awesome stuff, Ed. Thank you. Now you can take that information, use it to place your bets on the Fandalsportsbook app right now. You can place a wager on the bets. Hey, we just talked about or hundreds of others are all available for you right now. Again, that's the Fandalsportsbook app. All right team, time to focus on our betting markets with some game previews here. We're shouting out your local teams as we rip through more of the week 14 slate. Let's go. Fandalsportsbook breakdowns, we're starting now. We've got Washington hosting Dallas and hey, special shout out for our viewers in Virginia watching with us on NBC Sports Washington. Always love having you with us. The football team proved to six and six after beating the Raiders last week to win their fourth game in a row. They host the eight and four Cowboys who lead the NFC East. Dave Weaver, Washington is getting four. How do you play it? There were two and six by the way. So they've won four games in a row since their by week. Did you say they're giving four or getting four? They're getting four, then the game must be in Dallas. No, the games in Washington, they're hot and they're getting four points. To me, Washington is the play in this game. Here's something weird, 17-15. That score has happened 14 times in history of the league. Washington has won 17-15 two weeks in a row. So let's go crazy. Washington wins 17-15. And here we go with our Final Sports Book Week 14 preview for the New York Giants. Special shout out to our viewers watching with us on MSG. As we get right into it here, guys, the G-Men fell to four and eight with a loss against the Dolphins last week. New York has only scored one touchdown in two games since firing offensive coordinator, Jason Garrett. Here, Andrew Philiponi, Giants are on the road here at the seven and five charters getting nine and a half. Yeah, and I know Daniel Jones, Mike Glennon. I mean, this is not an ideal situation for the Giants whatsoever. However, chargers, volatility is the word. They're up, they're down, they're up, they're down. They beat Philly, they lose to Denver, they beat the Steelers, they lose to the Vikings, they go to Cincinnati and win. So it's their turn to have a let down. Lisa, follow that pattern. Take the Giants in this game with the big points. I want to welcome in our friends watching with us on Altitude in Colorado. Let's talk Broncos, shall we? Right? The team fell to six and six after a loss in Kansas City last week, but hey, it is now week 14 and Denver gets the one 10 and one Lions who just picked up their first win of the season. Ed, how about that? They were in Minnesota last week with that win. Here they are at Egros joining me now. The Broncos are giving nine and a half at home. How are you betting this game? Maybe it's a Lions let down, who knows? But I look at Teddy Bridgewater and I'm going to put my faith in him one more time. I've talked about this all season long as far as Bridgewater, his great, great ability to throw short, zero to 10 air yards, but he has also been outstanding against the Blitz. His EPA per drop back ranks third in football when a defense throws out five or more rushers. So what did Kansas City do in that last game? Well, they blitzed a little less. They dialed it back. Now part of that was context certainly, but also part of it was because Kansas City respects Teddy Bridgewater as a runner. Detroit, regardless if they blitz a lot or not that much, they have absolutely struggled generating quarterback pressures. I think this is an outstanding get right spot for Bridgewater. And yeah, it's a big spread, but I think Denver can cover. All right, New York, this one is for you. Our fatal sportsbook week 14 breakdown for your Jets and shout out to all of you watching with us on MSG. Always love having you with us here. Gangrene fell to three and nine after last week's loss to the Eagles. This week Jets are hosting the five and seven Saints. Clary, Jets are getting five and a half. How do you feel about this game? Well, Lisa, remember when the Saints and they were five and two, it seems like forever ago, everyone was wearing four button suits, but they've now dropped five in a row with so many questions continuing at the quarterback position. But when it comes to all that uncertainty, the Jets, they're the consummate slump buster. So I have to go who dad and say the Saints get the win here 24 to 14. Jets fans will be liking to hear that. Jets fans are home this week, which means the party this weekend is going down in New Jersey and the fatal sportsbook at the Meadowlands is the place to be. The fatal sportsbook, you take a look inside here, open seven days a week, watch wager and win with your favorite teams and players. The sportsbook is located right across the parking lot from MetLife Stadium. It is so easy to get to guys. On game day, just hop that free round trip shuttle from lot G. If you don't have a parking pass, that's all good too. Head to Reds restaurant in Carlstad in New Jersey. Catch the $10 shuttle to MetLife. Then head to Lodgy for that free ride to the fatal sportsbook. Mass transit, I say this every week, of course available as well.  Watch, wager, have fun with us and win there with us at the fatal sportsbook at the Meadowlands. Time now to give some underdogs a little love here on more ways to win. Cole, you've been rocking these moneyline moneymakers all season, including the picking the Patriots win on the road in Buffalo on Monday night. Here we are now in week 14. Give us a couple of underdogs that you think will win outright this week. Well, the AFC North, the most good and terrible division in all of football like Mr. Clarence from coming to America fame said, Baltimore, only a 500 team on the road in Cleveland division play. Well, they're not much better, they're one and two. So this win right here is gonna give Lamar Jackson and those Ravens a little bit of breathing room. You can go 27-21, Baltimore in this one. Then as we flip the coin to Falcons, well, they've only won back-to-back games this season one time. That was weeks five and six versus the Jets and the Dolphins. But last time they crossed paths with Carolina, it was a six point home loss. Now, both teams sitting at five and seven and I just can't roll with the Panthers here. They dropped three of their last four. So I'm going with the dirty birds to get the W in this one, 21 to 13. There it is. If you're smart better, you're gonna tail Cole's ups at picks, but I totally respect if you do you and do your own thing. You can get a risk-free bet, by the way, up to 1,000 bucks. You can place that bet right now on the Fandal Sports Book app. Just sign up for your new account. If you, for all of you new users, you will get a risk-free bet up to $1,000 just by using that promo code moreways, 1,000. And it gets better on this show because our experts bet it for you. Ed, fist bump for you, by the way. You have the Seahawks on the alternate spread minus two and a half. $1,000 risk-free bet collected 2,800 bucks last week. So let's start with you. Give us your week 14,000 risk-free bet. There's a future that I really like in this. I'm just kidding. We're gonna do an alternate spread once again. Same game parlay, mind you. We're going to the Lions Broncos game. Denver team total over 25 and a half with an alternate spread Denver minus 13 and a half. I'm expecting a blowout here. Lions let down game, $1,000 risk-free bet for more than 2,600. I'm gonna play a three-team parlay all underdogs. I don't think the Titans could even score eight and a half points, that's what they're favored by. Jacksonville covers there. You know, Houston will cover against Seattle. Seattle was a home dog last week and now they're on the road, favored by over a touchdown, no thank you. And of course, going back to the Bears, too many points against the Packers. So a three-team underdog parlay, 1,000 gets me almost seven grand. Dave, I'm gonna do a three-game parlay too but I'm not betting spreads. I'm gonna go with an under theme. They cash too. We don't have to root for touchdowns in every game. Cleveland and Baltimore under with two struggling quarterbacks. Houston, Seattle with Davis Mills at quarterback for the Texans. And then Atlanta, Carolina, no Christian McCappery. You're gonna collect over six grand if those three under set. Yeah, defensive minded, I dig it. Gamblers, make sure to sign up for a Fandalsports book account right now. To place your bet, remember, use that promo code Morways1000 to get your risk-free bet up to 1,000 bucks. It's easy, it's legal. It is live right now.  It's the Fandalsports book app. Again, use that promo code Morways1000. And finally, I wanna tell you about the Fandals casino app and how you can win a share of a million-dollar prize pool just by playing with us. The Fandals casino app is a secure online casino that has the best online gaming action. Fandals partnered with the top game developers to give players the most innovative online gaming experience, including live dealers for some of those table games. Tons of fun. There are also a bunch of promotions and bonuses that you can take advantage of, including that $1 million holiday spectacular. All you have to do is opt in daily and place real money casino wagers of at least $50 on the opt-in date. After that, you'll have a chance to be one of the 100 winners selected each day, play one day or every day through December 19th for your chance to win. Fandals casino is available for players 21 or older in New Jersey, Pennsylvania, Michigan, and West Virginia. So download the Fandals casino app right now and take advantage of the million-dollar holiday spectacular promotion. It's the Fandals casino app. And that will do it for us. That is a rap game picks best best DFS. We covered it all here. You know how we do. All right, check everything out on the Fandals sports book app right now. Use that promo code Morways1000. From all of us here at Fandals, thanks for watching. We'll see you next week.


It's been said that no matter how big you get, no matter how far you've come, no matter how great your accomplishments may be, that you better never, ever forget where you came from. And that seems like that's the exact thing that's happening with Todd Gurley with him scheduled to visit the Baltimore Ravens because we all know that he's from the crib. He's from Baltimore. I mean, excuse me. No, he's from Baltimore. I gotta make sure I say it the right way. I've been in Florida so long that Maryland accent is long gone. But anyway, Todd Gurley is scheduled to visit with the Ravens today. And what does this even mean for the Ravens? What does this mean for Todd Gurley? What does it mean for other running backs on the team? How could he fit in? We're getting ready to talk about all of that. But before we get into this video, please tell somebody that you love them. Please tell your people that you love them, that you care about them, and even just that you're thinking about them because a small, a tiny, tiny, tiny message like that could have a huge impact. You just never know. Because like we always say, people are going through so much stuff. So much stuff that they face on a daily basis.  You sharing something uplifting with them. You just being nice. It can go a super, super long way. Please don't forget that. That's very, very important just in life, period. Anyway, I love y'all and I appreciate y'all. So Todd Gurley to the Baltimore Ravens, for a visit, for a visit, it's not a signing yet. What could this mean? Now my guy, Terrence, he said, man, Todd Gurley, what are your thoughts on that? Always say add to your strengths. I knew it. This is the big move right here. And running is certainly the Ravens' strength that is their bread and butter. And last year, when I thought that, I'm like, there's no way that they're going to keep four running backs. There's no way that they're going to do that. Because I was like, they're not keeping Mark Ingram and Gus Edwards and J.K. Dobbins and Justice Hill. I was like, no, no. Because as soon as they drafted J.K. Dobbins, I was thinking, oh, man, Gus Edwards about to be out. They about to trade him. And I am so glad, so glad that I was wrong. But bringing in a Todd Gurley, what could that mean? Now, one of the things that I first thought of was, OK, is do we have any running backs that are injured? And no, we haven't heard anything about that. I mean, that photo of J.K. Dobbins and then the video to follow shortly after of him morcing Malik Harrison. And you just feel so bad for Malik Harrison, too. Because the photo, they tagged J.K. Dobbins, they had him all up in the air and it just said, sheesh. And I mean, when we looked at it, that's the same thing we said, sheesh.  And he just fell for me. And then, of course, the video surfaced and then that made it look even worse. But anyway, J.K. Dobbins is fine. We saw Gus Edwards didn't hear any reports about him being injured. And then one would think, OK, Justice Hill, is he hurt? We haven't heard anything about him. But then after that, since we get past the injury stage, nobody's hurt. All the running backs are healthy. Then you think this could be one of those things where it's like, OK, it could just be a looking seat. See how Todd Gurley is, see how Todd Gurley, what type of shape he's in. See how he's looking and feeling, especially because, you know, a couple of years ago, they said he had arthritis and his knees ain't been the same. But Todd Gurley, we know what Todd Gurley is capable of. And if he came to the Ravens, he would not have to be the number one or even the number two back. We know that he wouldn't be expected to do that. You may get in a little here and there, but it wouldn't be anything too crazy. So one thing that I think about and I know some other people thought about, oh, man, what kind of impact could this have on Justice Hill? We know Justice Hill is the backup running back. He's a backup to Gus and J.K. And the reason I say he's a backup running back because Gus and J.K. are like one A and one B. So where would this leave Justice Hill? Well, I actually think Justice Hill is safe. He's safe. Why?  Now, when he's a gunner, that means he's going to make that tackle on that punt returner and then, of course, on kick return on special teams, too. But also on special teams. And again, he got that he got the end because hardball special teams coach, special teams is a very valuable point part of the game. He's also a return man. He's a return man. You can do kick returns. He's done plenty of them before. So with him being involved a lot on special teams, Justice Hill is safe in my opinion. Todd Gurley would have no bearing on Justice Hill whatsoever. And then, of course, now you think about the thing where Eric Dacosta said ever since he said that, like it made a lot of the Ravens previous visits over the years, make a lot of sense, make a lot more sense, because they would bring in some guys that they would have for visits. And we'd be like, whoa, what's the point? Why are they doing that? Well, what for what? And Eric Dacosta said, hey, sometimes we bring in visits just to get some people's names circulating again, just to try to help some people get a job again. Now, with Todd Gurley, he is not necessarily a household name anymore. He used to be, but I just I don't think this visit would be to get his name out there again, because his name is already out there. I mean, he's had visits already with the Lions. He was obviously on that Super Bowl Rams team from a couple years back. He went and played for the Falcons last year. So Todd Gurley, he I don't think he really needs his name to be put out there like that. But this could be a move to where the Ravens may just be looking for extra depth. They could be looking for extra depth because, you know, we know that these Ravens, they love to run the football. They love to run the football. And the thing with that, one thing that confuses me a little bit is that is this year's offense, because I know a lot of us expect this year's offense to be different, significantly different. Now, we do expect them to run that ball like crazy, like they always do. But we also expect them to pass the ball. Now, I can't say a lot more, but I think it's going to be a significant difference in the passing game. I think they're going to go to more four and five wide receiver sets, more spread sets, because, you know, a Lamar hit in those in that spread. Lamar be doing some damage there. Lamar be doing some damage and hopefully to something else that they can incorporate, along with Lamar being under Shenamore, because that adds more depth to your playbook, but besides that, hopefully something else that they can incorporate more is the no huddle, the no huddle. The no huddle can be so just crucial. It can be very important and it can be a very powerful thing. So shout out to the no huddle offense, because I remember they incorporated it last year, but it was just for that Colts game. And then after that, we didn't really see it too often after that. So hopefully this will be the year that they incorporated that much more. Now, something that a point that somebody made because I tweeted this about Todd Gurley visiting with the Ravens. My guy Lamar X Bateman on Twitter, he said that an underrated stat here is that Todd Gurley was very good in the past game early in his career. So that could be something that would play affected to the Ravens, possibly signing a Todd Gurley. Now, me, honestly, I don't think they're going to sign. I don't. If they do, though, OK, cool. The rich get richer, but I don't think they're going to sign him. But we'll see because his chances of signing are higher because that compic formula that that's way out the window now, man, it's way past that little compic deadline formula. No, that's what it wouldn't it wouldn't impact that. You know, Ravens, you know, they let them compics, man. But anyway, he has a high chance of signing because of that. Now, my guy Dream Chaser 7054, he had a different view on Todd Gurley, on why the Ravens could possibly sign and why Todd Gurley made more than possibly sound with the Ravens. Well, he said it's because he still remembers Monday Night Football. Oh, and you remember the Jackson five with Lamar Jackson through five touchdowns? He ran all over the Rams, too. And that game, I remember going into that game thinking, oh, man, we got to go against and Donald. We got to go against Brock. We got to go against this this Rams team Jalen Ramsey. Oh, boy, these boys, that defense is for real, man. They are for real. And Ravens ran all over them and passed all over them, too. They had a field day against those Rams. And he said hashtag KD Kevin Durant mentality. Hashtag can't beat him. Join him. So so yeah, man, people are very interested to see what's going on with with Todd Gurley, very interested to see what the Ravens are doing with Todd Gurley and how this whole thing ends up. Now, I wouldn't be opposed to the signing. I wouldn't be opposed to it. But I again, for me, I think they would just be looking at it as a depth thing, as a depth thing, because you got your start in two and then behind them Justice Hill. So what would it hurt to have Todd Gurley back there, too? And again, like I said earlier, we know everything that Todd Gurley is capable of, everything that he has accomplished in this league. He started off his career hot. He started off hot, but then he got the big contract. Then I think he only played a year of that contract. Then the Rams said, you know what? No, man, we can't do it anymore. And they cut ties and it hasn't been the same since. So anyway, we'll see what happens. Team Keep It Clean. I love y'all. I appreciate y'all and y'all just keep doing. Keep going, keep going. If anything you're struggling with, anything you're dealing with, keep going, keep pushing because you'll be able to get through it. I know sometimes it does not seem for a lot of stuff and we struggle with certain stuff. If we're going through certain situations in life, sometimes it seems like, man, I ain't never going to be able to get through this. Trust me, you will, though, man. You will. I promise you. Love y'all. Appreciate y'all and we out.


Hey everybody, this is Brian and welcome to the 41st Flutter Tutorial. Today we're going to do something a little bit different. I've been getting a lot of feedback and some people will kind of want to see a quote-unquote real world application. So we're going to make a quote-unquote real world application. I don't edit my videos so you see all the successes, challenges, and complete and utter failures and spelling mistakes. So there may be parts of this you're going to want to fast forward through. I try to whip through it pretty quickly, but being what it is, it usually is filled with errors. So we're going to make a pizza ordering app. Now while this won't actually order a pizza, it will be the skeleton from which you could order a pizza if you had your own pizza company. So from here, we're going to create a directory. We'll call the screens. And we want to create another directory here called images. Now you notice how images is actually at the root. It's not down in the libs here. And we want to create another directory here called code. I'm just kind of showing how I break things up a little bit here. All right. So what we're going to do here is we are going to build an application that allows the user to order a pizza and select toppings and size and things like that. And I'm going to start the emulator and kick that off in the background while I'm sitting here talking. All right. Now, first thing we want to do is create a dart file here. We'll just call it pizza. And we're making this in the code folder. And this is going to be the actual state of what we're saving here. So class pizza. And in the past, what we've done is we've had the state per page. And what we're going to actually do in this is we're going to make this class on one page and then hand it off to another. And we're just going to make the list of pizza sizes that are available. And we're making this static because we want to be able to access this from outside of a instance of the class. You'll see what I mean here in a little bit. All right. Now we want to say string size, the initial size that we're going to let them choose equal sizes. element and we want zero. That has to be static or we won't be able to use that as an initializer. And then we want the map. We're going to call this toppings. Caps key didn't want to work there. I've been asked a lot of questions like how many of Flutter apps have I built? What have they been used for? Things like that. Really, they've been a lot of internal prototyping of future projects that I'm working on. I've actually been looking at getting a, I want to say, a prototype up and built for a big project. And I've been looking at different, make sure I spell pepperoni, right? Or that I'll never live that out. All right. There we go. Yeah. You guys will never let me live it down if I spell it. Although I always misspell everything. It's like a curse. But anyways, I, I want to find just like the perfect mobile framework to work with. And it's got to be cross platform. It's got to be a few things. And it's got to work with Firebase and Facebook integration. And it can't cost money. It has to be open source. There's a few requirements for this project. And that's what really led me to Flutter. So we're going to add just some toppings here, pineapple. Usually I'm like a pepperoni sausage extra cheese kind of guy. I don't really like pineapple and sardines. And I'm just adding a bunch of weird stuff. Onions, I guess those are all right.  Mushrooms. See peppers. I don't know. I got to think of some crazy stuff here like, I don't know, pickles. We'll call it the pregnant pizza. Maybe chocolate. Not sure. Geez, I misspelled chocolate. That's embarrassing. All right. What else could you throw on a pizza? I'm just trying to think of some really off the wall. Bananas. Why not a banana pizza? Banan. There we go. And one more. Why not? What could we throw on a pizza? Olives. There we go. All right. So really what this class is going to allow us to do is hold the state in memory as we pass it from one page to the next. And we've got the size. I should say the sizes that are allowed for the user to pick the default size, which is going to be the first one when this class is first created. And then we've got a map of toppings. And they are all false initially. All right. So that is in our code file here. Now we got to create some screens. Dark file. Here we go. Call this home. Home is kind of like always my de facto. What I'm doing next is going to just build out the rest of them. We want order. This will be where they actually order the pizza. And I've got to kind of slide my notes here a little bit. And then one more, which we will call review. This will be actually after they've, they've selected the pizza and their toppings and then they want to review their order before submitting it. That's kind of like the typical way of doing something. So we're just going to because these depend on each other, we're going to work backwards here. So what we're going to say is import and we're going to import the package flutter material. And then we're going to import the package pizza demo. And we want to be in code and we want to import the pizza dot dart file. That is our code file that has all the state goodness here. Then we'll say class review extends. We want the state list widget because we're not going to hold any state here. And we want the pizza called pizza order. And that's just going to be null initially. And then we want a list with string. This is what we're going to just kind of convert our pizza order to. And we could have wrapped this functionality directly into the pizza class. But I just kind of wanted to separate it so you could really see. All right, so we've got that and that. Now what we need to do is let's just get rid of this complaint here override widget build the context context. All right, that is going to include the body here. So we need to return a scaffold. And now it'll stop complaining for a minute. All right, so a couple of things need to happen on the review page. And this is the final page right before they submit their order is we need to actually take the existing order and render it out for them to view. And then, you know, basically have a button for them to do something with. So to render that out, we need to actually create a list. And then we're going to present a list view to the end user. So what we're going to say here is review. This is the constructor of the class in case you're still fairly new. So to use this class, you're going to have to hand us an existing order basically without that you just can't create it. I want to say pizza order equal order. And then from here, we're just going to say we're going to add the value of the size will say size equals. And then we want the then we're just going to say, let's add, and we're just going to add a blank line here. And then we're going to do, we're going to save a little bit of time here. And we're going to say pizza order dot map, actually toppings dot map, this is why I put it in a not map. This is why I put it in a map. So we could do the for each. And then we're just going to say bang, bang, and then do that, create our anonymous function here. So then we got the name and the value. And we're going to say if value then add the name there. So pretty easy to understand when we create an instance of this review dot dart, we are going to take the existing order out of the constructor, we're going to add it into our pizza order variable. And then we're going to generate a list, which we're going to present to the user in the form of a list view, which we've done before. So down here in the scaffold, we are going to say app bar new app bar, you messing up on me here. Well, title, okay, say review pizza order. And then in the body, we're going to say new container can do 32 padding. And let me get rid of this little bottom thing so we can see what we're doing here. Now, child, we want a new column. In the column, we have the children. And then we have our array of widgets. So we're going to say new text. And let's actually break this down a little bit here. And we want the font weight to be the font weight bold. So we're just going to boldface that review your order. And now that we got that, I think I'm just going to collapse that back down into one long one. Just to keep it nice and neat. Sometimes I get overly picky about this sort of stuff. All right, so we have our text. Now, this is something that if you're kind of zoning out on me, you're going to have to kind of pay attention to a little bit here. What we want to do is add a list view, like we've done in the past. The problem is, if your list view goes outside of the bounds or the visible area of the material that you're working with, it will display this ugly yellow and black bar. And you'll probably see that later on tutorial, but I'm going to add this just to get rid of it. It's a new expanded. And what expanded does is it well expands as far as you need it to go really without getting overly technical. And from this, we're going to say list view, that builder. And then of course, we do our item builder from that. So what we need to do now is let's break this down. We've got our item builder null. And let's do shrink wrap is true. That way we don't run in any bounding issues. Item count is equal to the list that count. Whoops. That's that length that count. And then for item builder, this is where we want to say the context context. What is this thing complaining about? No, can't be assigned to the parameter type. Well, we're not giving it no. Oh, I know what we missed. There we go. That should make it happy. So in here, what we need to do now is break this item builder out and actually have it build the items. We've done this before, but you know, just so we understand what's going on here. We're going to just simply return a new text. Pretty simple what we're building here. Let's get rid of that. And we're going to return the element at index. So really, we're just saying, hey, the list that length of the item count for the item builder, we're just going to go through each item and then print out each line of that list. Pretty simple, pretty easy to understand. There is our review page. And now working backwards, we're going to go to our order page. Actually, I think we're going to fast forward. We're going to go to the home page because I want to actually run this and display something here. So I'm going to say import. And we'll say package. And we'll do the flutter material package. Class home extends and we want the stateless widget because we're not holding a state at this point. And we want to override, maybe override the build function. I've had a couple people ask me, not just with these flutter tutorials, but other tutorials, how hard it is to actually make a tutorial. And it's pretty challenging trying to think, type, and talk all at the same time is not really my forte. As you can see, I'm making some very gnarly little mistakes here. So the home page is going to be very simple, but there's going to be a key element that I don't think we've gone over yet. We're going to just, you know, how to display an asset image. So what we're going to talk about is getting that in there. So we'll say app bar equal new app bar, title equal new text, pizza demo. Why not? And then from here, we're going to say body, just get our padding in there. And then we're going to say, Oh, do I want to center this? I want to just column it. I think I want to just, you know, I want to back this out a little bit. I do want to center that. There we go. Oopsie. There we go. There. So we're just going to center this container and then in the container, make a new column. And then in our children, we're just going to have simply two widgets in here. We're going to have the image asset and the raise button. Now, before we do the image asset, this is going to be key. We have to actually add the image in. So we're going to go to I have this little pizza image. If I can just blow this up, that's what it looks like. So I'm just going to copy this, literally copy it and then go over to my images folder and paste it in and make sure that it's in there. Now I do want to check one thing real quick. I think it's this pubspec.yaml file. And yeah, you see how it didn't add the asset in. So we're going to have to add that in. So let's, and it says literally to add assets to your application like this. So we're just going to go bang, bang. And we'll say images and we're going to say pizza.png. Pretty sure that's what it's named. And that's the full path to it from the base or from the root. So it's in slash images slash pizza.png. Just make sure that is in there. Pubspec's been edited. Pub failed. That's not good. What did we screw up here? Let's go back and look at that. Oh, that's why. Let's try pounding that out like that. That should work. Okay.  There's just certain parser that runs in the background and it wasn't tabbed. So putting that tab in there, suddenly it magically knew what I was talking about. All right. So what from here, we're going to say new and we're going to say image.asset.  Say new image.asset. There we go. And then it wants the fully qualified name here. So we're going to say image and then from there we are going to say new raise button and then expand this out. And we don't have the navigator in there yet. So let's work on our main real quick here. And we want to import the material app. We want screens and we want home.dart. Right now I'm on a mission just to get that homepage showing. So we're going to do a run app. My app doesn't exist yet. We're going to build that super quick. And then we'll say class my app. And we're going to extend a stateless widget out from here. We need to override. You guessed it. And then we're just going to simple do navigation like we've done before. We're going to say return new material app. And then from inside the material app we're going to do our navigation. What is this thing grabbing and complaining about? Does that build app? No, it doesn't. Some type blah blah blah. Why is that complaining? Widgets build context? Did I misspell something? See this is the part that drives me. That's about not editing my videos because you'll sit here for about 20 minutes watching me trying to figure this out. Invalid override. Build context isn't a subtype. Of course it is. Oh I see what it is. It's not widgets. It's widget. Derp.  All right. So there's our material app. And there we're going to say title. And we're going to say navigation. And then of course our routes. And we want the widget builder. Now that we've got our string widget builder we are going to simply say bang bang and then create our routes. And we're just going to copy and paste this bad boy because why not? Save some time. And from there we can just copy and paste this whole thing. And make our three routes. Home, order, and review. Boom. And we're just going to let's flesh out this order page real quick. We're just going to do the bare minimum on the order page. All right. Import package material. And then we're going to say extends the stateful widget. And we're going to override the state which doesn't exist yet because we're going to build it here in just a second. Always makes me nervous when I type things out before I've actually created them because then you know IntelliSense isn't helping me. And I have a nasty habit of typing faster or slower than I think sometimes or faster than I think. So we are just going to make the state of the order. And then we're going to, you guessed it, override the build. And from here we're just going to return a new scaffold. And I kind of want to mess with this one last just because this is going to be the kind of the meat of the application. And I really want to make sure we get this right here. So we're just going to say new center. And then in there we're going to say child equals new container.  What do I want to do here? New column. And we'll just leave that blank for now. I'm going to add the padding in there. That ginsets all 32.0 because that's kind of my favorite here. All right. So now it's time for us to actually try to give this thing a build and make sure it actually runs. We've got kind of the bare bones of our application. And so the main Dart file, we are going to actually we need to import some things. So this is going to complain. Review. All right. Now it should kind of somewhat run. So our main Dart file, we just have our material app and in there we have our routes. The goal of this is to bring up the home. And we're going to see if we can get that to work real quick here. We are actually missing a piece here. Home equal new home. Otherwise it won't do anything. There we go. So we're going to have our initial route in there. All right. Let's give it a whirl and see what breaks and what works. Pull up our Android emulator here. I've had a few questions about why I use the Android emulator instead of the iOS emulator. It's very simple. It's just because I'm programming on my Linux machine. If I was programming on my Mac, I would have a choice of both, which you could probably just do both at the same time. I haven't really gotten into that simply because I have my microphone plugged into my Android box. Android box has been kind of my main development box. All right. So there is our home page and the order button is grayed out because we haven't put that in there yet. We're going to do that navigator next. We can see there's our beautiful pizza icon and we're going to just start fleshing this thing out. So let's switch over to home and there's our on press as null. We're going to say on press bang bang. And then we're going to say, whoops, the navigator dot of context. And then we're going to just do a push name. And we're just going to push over to the orders page. Hot reload should grab that. Yeah. Now we can actually click our button and nothing happened. Oh, I think we're missing something here. Import package. Whoops. That's not what I wanted. Pizza demo screens order. I bet we just forgot the import here. Let's try that again. Hot reload and nothing happened. This should work. Let me rerun the whole thing. Maybe just didn't pick it up. If it doesn't run this time, I'll actually read the error message. Not a fan of modern day error messages. Come on. All right. What's going on here? Blah, blah, blah, blah, blah, blah, blah, blah, blah. Exception caught by gesture. The following assertion could not find generator of route orders. What? We have it right here. Oh, that's why order hence spelling error. All right. Let's try that again. Now suddenly it goes to our order page. All right. So we have basic navigation. We have an image and we're going to start actually just doing the order. The review page should be done. So we just got to really focus on this order page. Once we hammer this out, we should be pretty well done here. So let's flip into order and we got some work to do here. So we want to import our package. Screens review. We want to import the package from the pizza demo code pizza because we're going to work with that class. We're going to make a simple order here. And from here we need to actually go into this and actually build our state out. Say pizza, pizza order. Able new pizza. No, in the sense. Why have you betrayed me? All right. There we go. So we're going to have a couple things in here. We're going to have a, let me pull this up so you can actually see what the heck I'm talking about here. The way I want it is we're going to have a drop down box here so we can select the size. And then we're going to have a list of toppings in a list view and then a button at the bottom so that we can actually review the order. It's pretty simple, but it's a little bit of a learning curve to get this to work just right. So let's actually just start working on it. And we are going to say new drop down button, drop down button. Where are you at? There you are. Then we have items and null. So what we want to do here is we want to actually give it our template, which is going to be a string, which I'm not sure if that's really needed or not, but we're going to add it in anyways. So our items are going to actually be the pizza class that sizes. And then we want to map that. I don't think we really want the on change, do we? Yeah, we do. Hold on a second. Let's do this. Let's go. We want our value, what the initial value to be the order that size. There we go. That's what I was getting hung up on. What is this thing griping about? Too many positional arguments. What do you mean there's too many positional arguments? Why are there too many, zero expected but one found? What are you griping about here? Not liking this. Something's going on. Let's just start over on that. New drop down button. Bang. Item null. Oh, duh.  Children. Bang. Okay. That makes more sense why it was griping. I was hung up on that button. Anyways, new drop down button. That looks a little cleaner. Okay. Like I said, sometimes typing, thinking and talking all at the same time really don't mix well. So pizzaordered.size. So we want the initial size and then the on change, we're going to actually make a function here. So let's just mess with that first. We want to do the set size. Let me look at my notes, make sure I'm actually doing this right. Yep. All right, from the set size, we are going to just simply do a set state. In the set state, you might have already guessed what we're going to do here. We're going to say pizzaordered.size equals the size. And we should actually say value that we were not really confusing. Anybody here? All right, now in here, we can actually say our have to scroll down, make sure I'm in the right spot with my notes here. It gets really confusing if I get kind of off here string value. There we go. Now comes the really confusing part. I really don't like the way that the drop down button is handled, but it's just as what it is. So for the items, we have to do the pizza order. Actually, no, we don't. Sorry. Sorry. Sorry. We need to do the pizza that sizes that. And then from here, we do the map. And this is where it gets kind of really confusing for people. So we're going to say string value. And then we're going to map this accordingly. And then in the map, we're going to return a new thing. It's a drop down menu item.  So let's break this out a little bit so we can see what we're doing here. All right. So the initial value of this, or I shouldn't say the initial the value of this is value. And then the child itself, we're just going to make a new row. And then we're going to have children in here. And in the children, we're going to say new icon icons. What was it? Local pizza or something like that. I found this really cool icon. There we go. Local pizzas and icon. I was really surprised when I found a pizza icon. I was like, yay. It's little things in life that really make us happy, you know. And then here we're going to say simply size equals and then the value. Then in case we decide to mess with any more properties, hot reload, we're going to actually just start this whole thing over again. I did a lot of typing. I wasn't really trusting hot reload.  And we're going to have to figure out, whoops, nailed my microphone. All right. Let's see here type. Map list, iterable string, blah, blah, blah is not a subtype of list drop down menu. Say what? Map list, iterable. All right. So basically what it's arguing about is in here. I bet I know what the problem is. We didn't give it a type. Let's just stop this thing again. See what it's griping about here. Map list, iterable string dynamic is not a type of list drop to menu item string. Okay. Well, what is the problem with this? So we got drop down button string, pizza order sized. Oh, I see what's going on here. Okay. I think I see what's going on here. We're missing a list here. Yeah, two list. That's what's going on. If this is right, I'll explain the voodoo magic that just occurred. Tick tock, tick tock. Let's check our order and okay. Yes, what I thought it was. So now we've got a drop down list and we've got the on select. So we're on the on change that's tracking in the state. So the thing that I was missing here was this dot to list of this whole thing. And if you take that right there should highlight it. Yeah, it's on the pizza map. It's in the items because the items is expecting a list and I was just giving it a map. So I was just giving it a whole wad of data rather than an actual list. And that's why I was complaining. Oh, some of these error messages. All right. Anyway, so we've got this. This is a major hurdle right there. The rest of this should be quotey fingers should be fairly straightforward. All right. So now that we've got that we're going to new expanded. And I had to actually go into the the flutter live chat they have on their site because I didn't know what the heck was going on with this. I tried just adding a list directly and it went out of bounds and I'll actually demonstrate that in here in a little bit. And it showed that ugly bar that you guys may have actually encountered by now. Let's call it continue. All right. So in our expanded, we want to put a new list view in here. We'll do list view builder. And as you can see, our item builder is going to be null initially. Let's just get rid of that blank line. That way it doesn't get all confusing. All right. And we can just say should grab true. Probably don't really even need that. But I like putting it in there. And then item count. And the item count here is going to be the length of the toppings. Because remember that's a map under the hood. And then the item builder, we want to actually do a non-function here. And in this, I keep forgetting that index. I always forget that. That's my only really gripe about this. Otherwise, it's very beautiful the way that works. Now we're going to return a new checklist title, which we covered in previous tutorials. Let's put the semicolon up here. And we want to add a few things to this. First thing we want to do is the control, oops, control affinity. The control affinity, we want the list title control affinity to be leading. That puts the checkbox in the left instead of on the right. And then we want the title. And we want this to be the, oh gosh, what was it? The pizza order toppings. Keys.ElementAt. And then the index. Remember the key is the string. So we want the string portion, not the boolean portion. And then from there, we want our value. And this is going to be, we can just actually grab this whole thing. Don't be difficult. All right. So let's hot reload this to see if it works. Yep. As you can see, there is now our toppings. And there's our button. They're grayed out because we don't have the on change handler. So let's go ahead and wrap that in now. And let's do this. Set topping. And in the set topping, we of course need a int index and a boole value because we want to know the index and the value of that. And we are going to, of course, set state. And in our set state, we are just going to very simply say string key equal the actual key here. And then we're just going to say, whoops, set the value of that key. Now we need to wrap this guy into this. So where is it right here? Unchanged. Unchanged is going to simply be the, now it has the index and the value. Let's flip back over. Suddenly they're enabled. And we can actually click and unclick things. And it's tracking that in state as we do that. So every time we select or unselect, it's calling this set topping. And it's going through this little function right here. And we can actually scroll through the list and we can set the size. Last but not least, let's actually set the on press to this raise button. And we're just going to say, bang, bang. And this is going to be a little bit different. What we want to do is we want to do a push and notice how it has a context and now it wants a route. So we actually have to build the route manually here. So on our route, we're going to say new material page route. And we need a builder here. And I'm going to kind of break this down a little bit. That way we can see what's going on here. The builder, of course, is going to be the build context. And we want a new review because this is where we're sending it to. Now review, of course, you can see how it just popped up and rinded me. Order is null. Well, we don't want a null order. We want our pizza order in there. Why is it not doing that? Come on now. I know what's doing. All right. So we are sending our pizza order to it. Let's get rid of that semicolon or it's going to describe complain. So really, if you're following along, what we're doing here is we are taking that. Let me rerun the whole app here. We're taking the class. We're creating it, the class being this pizza.dart file, and then we're manipulating it. So no longer do we have variables locally that we're doing? Well, we kind of do. But now we're going to push this off to the review page. And you can see here's a review your order and it just has your toppings in there. And we can go back and the state is still perfectly there. So let's say we only want pepperoni and sausage because that's my favorite. And I'm too skinny to eat a large by myself. So I want a medium. So we have a medium with pepperoni and sausage. So that in a nutshell is kind of how that works. Now, some caveats to this is, A, it's not backed up in the cloud. That's the problem. So we will be doing, hopefully, in the near future, Firebase tutorials. Also, there should be a button down here that you would do a HTTP push to Pizza Hut or Little Caesars or Dominoes or whatever. You order your pizza from Bob's pizzas or whatever. Some other things is the problem with programming, you ever hear the expression, there's more than one way to skin a cat, kind of a gruesome expression, but there's more than one way to solve a problem. So this may not be necessarily the solution you're looking for. This is just something that I do for simple apps where I just make a class that holds all the settings I need. And I manipulate that as the state and then push that class over in the, where is it? The material page route. I just take that variable, that instance and just shove it straight over into the other file as part of the constructor here. That way, I just get the state and I don't have to worry about rebuilding it, loading it from a database or anything. It's all in memory, it's all good to go. Pretty simple, pretty easy to use. Now, one thing I did want to go over here, where is it? Order. Expanded. Yeah, this is what I was looking for here. I'm going to comma that. That didn't work out the way I planned it. Please hold. All right, so we are just going to take this whole chunk here and we're going to comment that out. But we are going to grab this list view and put this in here. Just so you can see what happens. You see already this thing right here. That was the first indicator that something went boom. And when you look at it now, this is why you need that expanded because the list view goes down lower and it puts this ugly thing here. And I, for the life of me, could not figure out how to get rid of that. That's simply why you put it in an expanded. So we're going to just get rid of that and come at this and come at that. Put everything right back the way it was and suddenly magically it works again and we can scroll down and life is good. So some key concepts that we've covered in this that I don't think we've covered in other tutorials is how to put an image up here. How to make an expanded, meaning if you try to take that list view and just put it into like a column or something you need to have an expanded in there. Otherwise, it shows that ugly bar and how to manipulate the state in another class, basically, or use another class as your state, I should say. And then, you know, just passing that class between them using the material page route. So this is kind of, I would say, not a super elite difficult tutorial, but this is definitely not on the beginner side. So you guys have been wanting kind of a real world example and I'm hoping this fits the bill. I'm hoping this answers a lot of like organizational questions and how you structure things and how you get images in and how you pass variables back and forth. That was a lot of talking and I'm pretty well spent. So for the source code for this and all of the tutorials, visit my website void realms.com. It's out in GitHub's and join the void realms Facebook group. There is 1800. We just breached the 1800 mark 1800 other programmers out there, all other languages and frameworks definitely help you with your problems. And if you're feeling so inclined, like if you're running a business, the site is 100% funded off donations. That's why I do not include advertisements on YouTube. So I'll feel free to donate. That's it. Thank you for watching.


Hello people, I'm Ginny Metherill and I'm a fourth generation rich. Today we're going to look at the biggest festival in the pagan calendar and that is the Winter Solstice. This festival has been celebrated for the whole of humanity and it is one of the great five festivals of the year and so therefore we're going to look at the traditions, the celebrations, the rituals and the rites that you might use to celebrate Yule. Yule is the great feast of the winter solstice. It's when we celebrate the darkest days of the year the winter solstice happens at 327am in the northern hemisphere when the sun is directly above the Tropic of Capricorn which is that line that spins around the bottom third of the world because of course Australia is pointed towards the sun and the northern hemisphere is pointed away from it so we get these darkening days. It seemed to the ancient that the sun stood still for three days and so therefore they celebrated this moment as the darkest death of winter and of course one of the main ways that we celebrate this festival is to bring light to it. It is a festival of light, a fire festival and that's why we have candles burning so the main event in any winter solstice celebration is of course the lighting of the fire and this is seen you know throughout the traditions which I'll go into a bit later. It's a really old festival this, it is as old as humanity itself. If we look at the great Neolithic structures that we have throughout the world most of them are aligned with the winter solstice for example in the UK we've got that wonderful cathedral stonehenge and the winter solstice is when the sun sets directly between the two largest trilithons which are the two largest stones and this can be seen right down the avenue of procession which leads up to stonehenge it is particularly magnificent they uncovered great archaeological evidence of huge feasting that happened which we believe happened at the winter solstice I mean how they know the archaeological evidence that it happened at the winter solstice I've no idea however this has been happening for over five six seven ten thousand years. We took the winter solstice to mean the birth of the sun and so therefore in order to encourage this birth we lit a lot of candles to bring forth that life. It is a really special moment in the cycle of the world in the wheel of the year because it is the point where our days start to lengthen and we look through to the coming of the next season. We believe that the name yule is actually taken from the old Norse yule meaning wheel because it represents the wheel of the year and we did have this wheel of the year ever turning taking us through those seasons. It is also at this point that the sun is thought to be born and in the depths of darkness will come the light and that is like all births all births happen from the dark into the light and so customs have developed over the years of how you would celebrate yule it is a very joyful festival and so we bring the most joy that we can you know and one of these ways is to commemorate the greenery that's going to happen in the coming months and that's one of the reasons why you would bring greenery indoors as I have here I've got some ivy and some holly. The holly is particularly good at this time of year it's got particularly fabulous berries on it but I think that's because it means we're going to have a really hard winter so a bit of a worry there is immense amount of folklore surrounding holly and the ivy. The holly king was the king who rains from the summer solstice to the winter solstice he is then defeated by the oak king and the oak king rains from the winter solstice to the summer solstice. This defeat is in order that the earth can be reborn. The berries on holly represented fertility these are the seeds from which the world is going to sprout in the spring and you would bring them in to bring fertility and encourage that growth in your own home so this also meant that we used to kiss underneath holly we always associate kissing underneath the mistletoe it was holly as well because holly brings fertility and it was considered great for future children it is also well known that holly is a protective plant and what it does is protects against malevolent forces and malevolent magic so evergreens really symbolize life especially when the bare bones of nature are currently apparent. If you bring a lot of greenery into your house and you know decorate your fireplaces and your mantelpieces whatever with a lot of greenery it's a sign that the nature spirits know that your house is a safe haven and they can take up residence here if they're escaping from the cold of winter. The wreath formation that we hang on our doors it's also a sign to the nature spirits that they are welcome here and that the fey may come and join you in your home. Yule is also the time that we look to our children it has always been so the romans had uvinalia the pagans had old man winter old man winter would bring presents to the young ones and then the christians have holly innocence day which i just think is rather odd which celebrates where the herod killed all the children in order to stop the rising of the christ child so that's nice isn't it anyway my point is that it is a time to look to the little ones to give them their presents and play with them. I went to lunch not so very long ago and the marvellous bells produces incredible yule log and doesn't it look delicious and it was now a yule log of course now we have turned into a delicious christmas pudding but in the old days it was a great big log and you would bring it into your house and burn it throughout yule. There were several traditions associated with the yule log it had to have been either given to you or taken from your own land in fact you just couldn't buy it that was the main issue you would decorate it with your evergreens and pour cider or wine over it is a sort of veneration of the winter gods and its ashes were very valuable they kept lightning out so it stopped you being struck by lightning if you decorated your houses with ashes it was also a well known witch-preventer so keep those witches away and burn yourself a yule log. The yule log is essentially a Germanic custom here in the west country in the UK we have a slightly more weird i think version we burn faggots of ash wood and this is to i'm not even sure what the custom was and the reasoning why behind it it is quite a big deal though down these parts because we are quite pagan one of my favorite traditions that are associated with the winter solstice is to do with the robin robins have always been harbingers of good luck they are one of the only birds that carols throughout the months of winter and so if you hear a bird singing it's most likely going to be a robin or possibly a ren robins were ever a great bird of the Celks the reason why they got their red breast is they help bring fire to humanity and got their breast burned as a result they also are very special at midwinter so the winter solstice on yule should you see a robin that robin then has the power to grant you a wish and how you get this is to say hello mr robin and ask them what you would like and then thank them for it let me know in the comments if you've ever done this or you do it this year and it comes true in fact yule is just really christmas isn't it if you look at the traditional christmas decorations that we have lighting of the christmas candles purely pagan giving of presents purely pagan and celebrating the darkest months of the winter i mean to be fair christmas is actually one of the youngest of the christian festivals you know it's only been celebrated for the last 1100 years and that's because we were so busy celebrating the winter solstice so lastly the thing that we need to do is to light the yule candle now the yule candle should always be red and i've got one here and this is a winter spiced candle so if i can open it right i've managed to get into it it smells absolutely delicious i can't wait to like this one the yule candle is always red and the red is a colour of protection joy fertility it's got a great strong energy the colour red and so your yule candle should be lit and not blown out accidentally you've got to be very careful about that otherwise it brings bad luck and you must keep it burning throughout the whole of your yule feast it's lovely isn't it smells delicious reminds me of my youth that's how i'm going to celebrate yule with feasting drinking friends party games presents bringing greenery in having a christmas tree putting up a lot of pentagrams on my christmas tree and my next video will show you how i'm going to do that otherwise do let me know in the comments below what your favourite christmas tree decoration is and don't forget my patreon covering meeting for yule when we're going to be giving presents and i'll show you what i mean by that and you'll get them in the most magical way possible is coming up next week do go to patreon.com forward slash ginni meterel to join otherwise please don't get forget to like and subscribe it is by subscribing to my channel but it really enables me to create these videos i will see you in the new year