Observable Flutter: Payments in Flutter

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
CRAIG LABENZ: Hello, everybody. Welcome to another episode of "Observable Flutter." I am your host, Craig Labenz, and today we have a special episode that will feature our first guest on the show. So I'm pretty excited about that. But before we fully get into it, just to remind everyone that this is a civil place on the internet, one of the last few remaining. So we are certainly abiding by the Flutter code of conduct here. Let's all remain respectful of any technology that we're talking about, even if we're advocating for something else. That is very important to me. A lot of creators of these technologies will be in the chat, and they are donating their time to us so that our apps can be up and running more quickly. But enough of that. So today, I'm joined by Jose-- and I'm now realizing I've never said your last name out loud. "U-jia"? "Ooh-jia"? Maybe your first task can be-- your first assignment can be to clarify exactly how to pronounce your name, Jose. But he joins me from Google Pay, and we're going to be talking about their Flutter integration, which covers not just Google Pay but also Apple Pay, so extremely handy for us. And let's bring everybody in here. So I'm going to do this. And Jose, welcome. JOSE UGIA: Hello, hello. CRAIG LABENZ: I think this crop is awkward, so let's try this. There we go. JOSE UGIA: That looks better. I have to say in your defense that I don't have an easy surname, so we can get to that. But before that, as the slide was saying, I'm joining from the Google Pay team, the Developer Relations team from Google Pay, and super happy and excited to be the first guest. Hopefully, this is something that I can brag about in the future. I think I'll be able to. CRAIG LABENZ: Yeah. If this ever gets to a stance where people are bragging about it, then something has gone right with the "Observable Flutter" show. JOSE UGIA: I hope so. CRAIG LABENZ: So Jose, do you maybe want to kick us off here with just-- I think a lot of developers-- a lot of people in the world have-- they're aware of Google Pay, but maybe don't know exactly what role it serves, especially if you were coming at it from the direction of a developer who's going to put it in your app. So maybe you just kind of orient us around how we should think about Google Pay and what problems it solves from a developer's perspective. JOSE UGIA: So put very simply, Google Pay is a product that Google builds to collect payments online that includes Android applications and websites as well. Sometimes this gets confused with the billing options in Google Play billing because if I'm coming from a developer world and I'm used to probably offering premium features from my app through Google Play billing, I might be confused. So just like to separate the two-- they are different products. You will want to use Google Play billing if you have an Android app on the Google Play store and you are selling digital goods like likes, stars, or features of your app. If you're selling elsewhere, so if you're selling physical services or physical goods like e-commerce, maybe a food delivery sharing economy, you can use Google Pay for that. Anything that you are using a credit card for, you can replace that with-- or you cannot not replace Google Pay. What Google Pay brings is it offers merchants or businesses the ability to have their customers pay with the cards that are already saved in Google Pay. So the experience is just much more seamless. It's a one-click experience if you are logged in already. So that's the main difference. CRAIG LABENZ: Gotcha. Yeah. Yeah, so this is not in-app purchases. This is e-commerce kind of purchases. And I always love when a website pops up Google Pay. I'm like, great, I don't have to go grab my wallet. JOSE UGIA: Right. CRAIG LABENZ: But the Flutter way would not be to only focus on Google Pay because Flutter doesn't only focus on Android and websites. So the integration that your team-- and I see you are a prolific contributor to the integration-- it is more broad than just Google Pay, right? JOSE UGIA: Yeah. So the objective really is to enable multiple payment providers, especially those that are more commonly used on certain platforms. So we started with Google Pay on Android and then Apple Pay on iOS because those are the ones which are most frequently used. But our vision for the plugin is such that other contributors, including ourselves, can add payment providers that they think they would like to see there. So the whole point of it is have a plugin, without making it too convoluted, that has payment providers that you may want to use in your Flutter application. And that may include, obviously, web going forward. That's something that is not supported at the moment, but that's the idea. JOSE UGIA: Mm-hmm. OK, nice. Yeah, a lot of plugins are kind of working on their web coverage. So nice to know that that's on the roadmap. JOSE UGIA: We are thinking about it. CRAIG LABENZ: Thinking about it. Thinking about putting it on the roadmap. Gotcha. Thinking. JOSE UGIA: Oh, well, it's-- yeah. Well, to be precise-- in fact, let's put it in a different way. It's an open source project, so we have a plan for it, but we will also love to see this project evolved into something that the community is also engaged in. We already see a good amount of engagement from the community, but let me just reiterate and voice it from here that, hey, it's an open project and we would love to hear thoughts, ideas, and [INAUDIBLE] contributions for sure. CRAIG LABENZ: All right. So I think I'm going to start by just showing very concretely what we're talking about here, which is pub.dev/packages/pay. So this is what we're going to be working with today, right? JOSE UGIA: Yeah, that's precisely it. Yeah, that's the package. CRAIG LABENZ: Yeah. So folks, we'll be kind of going through all of this. We're going to set this up. We're going to actually build out a payment thing and click something and-- I'm not going to spend any money, but I think we're going to see some kind of mock something happen, and I'm excited about that. I don't know-- I have read through this documentation, but I have not played with it because I want to be able to bring the perspective of the new developer to this conversation. Jose's bringing the expertise. Now Jose, we got a couple of questions about GPay and whatnot, and specifically in India. Do you want to take a second and kind of cover a few of these? JOSE UGIA: Yeah, so just very briefly, UPI is a payment system that is only, as far as I know, is only available in India. It's part of the country itself. Google Pay has certain features that are operational there. The product that we are going to concentrate on today, the Google Pay API, is not part of that. So this doesn't cover UPI. This covers online payments that go through payments processor. So if you-- worldwide, really. So if you're using a payment processor that supports Google Pay, that means you can use this API. But that wouldn't cover UPI. CRAIG LABENZ: Gotcha. OK, great. And then there was a name-- this was tripping me up as well. Would you mind clarifying the actual spelling and how to write the name, what you like to be called? JOSE UGIA: Yeah. So the name is, in fact, we got it slightly off in the title. It is Google Pay, actually. GPay is not a name that we use in the public. So that's something that-- it will be easier for you to find it if you use Google Pay and the Google Pay API. Probably saw on Google I/O this year that now we are differentiating between Google Wallet and Google Pay, so hopefully that makes it easier. Google Pay is everything related to payments, as the name indicates, whereas Google Wallet is the, let's say, the virtual wallet that you have on your device where you can have cards and you can have passes, where you can have boarding tickets and so on and so forth. Today it will be about Google Pay and its online API, so collecting payments on mobile apps and the web. CRAIG LABENZ: Yeah, gotcha. I think that typo in the show title just came from me because the Flutter team works with the Google Pay team a lot to help that app be performant and whatnot. And so-- and like you said, GPay is the internal name, and so I've heard that 1,000 times and just had lost track of the fact that it wasn't the full name. It wasn't until you flagged it that I even had any idea. So that was on me, folks. OK. JOSE UGIA: We're going to have many more opportunities to fix it in future episodes with Google Pay, right, Craig? Is that something that could happen? CRAIG LABENZ: It sure could, and we can start by me only saying Google Pay from here on out and not continuing to say the other name. JOSE UGIA: That works. CRAIG LABENZ: So Jose, do you think we are ready to begin? JOSE UGIA: Let's do it. If you are ready, then I'm ready. I'm taking more of a laidback approach, which I enjoy. CRAIG LABENZ: Yeah. So let me hide some of these previous things. Oh, this goes back quite a ways. I do pay for Postico on my personal machine, folks, but I won't right now. So let me grab a terminal here. And-- oh, that's an odd-- look at this aspect ratio it just popped in with. JOSE UGIA: Hmm, interesting. CRAIG LABENZ: Yeah. Go into my Development folder. Right. Yes. Oh, my goodness. I got cold fingers this morning. It's wintertime. I'll increase my font size after all these typos. And what should we call our app that we're going to build? JOSE UGIA: I'd just call it-- do you have a personal app where you're selling something, Craig? CRAIG LABENZ: I don't currently. JOSE UGIA: OK, so-- CRAIG LABENZ: Should I quickly found a business? JOSE UGIA: Yeah. So why don't we call it Craig's Corner? It sounds very appealing to me. CRAIG LABENZ: All right, Craig's Corner, nice. JOSE UGIA: [INAUDIBLE] CRAIG LABENZ: See, I was going to call it something terrible like Payments. But Craig's Corner is a lot more exciting. All right. Here we go. So let's hide this. Go full screen. Let's open the main file, main.dart, and make sure our font is big enough. I think we're going to go this big, make sure everyone can read it. OK. So I presume the first thing that I need to do is install the Pay plugin. That right? JOSE UGIA: That sounds like a great idea, yeah. CRAIG LABENZ: I've never seen pubspec.yaml this in my face. This is really something. Let's add a dependency of pay. Wow, the autocomplete on that is so fast. I don't think there was time for a network request. I wonder if that extension periodically caches all of the names locally. It must. It's so fast. JOSE UGIA: Just following up on a couple of questions. Sorry to interrupt. Google Pay is at the moment only available on-- for Android devices. On iOS, Google Pay is not available at the moment. Why is that? I think it's a bit more complicated to answer, but basically, this is online-based. So technically, it's something that could be doable. I think it has a bit more of a background really starting with very likely Apple iOS users will be more probably prepared already to pay with Apple Pay. It's definitely something that has to do with usage in the end, but I wouldn't be able to give you the right-- the full answer because I don't have it. CRAIG LABENZ: Yeah, and it seems vaguely reasonable to me. Apple also has the requirement that any app that offers a different payment method must include Apple Pay as well. So it would technically be possible for GPay to show up in an iOS app, but Apple Pay must exist. So anyone with an iPhone probably has Apple Pay set up, so yeah, I can absolutely imagine that there's a little bit of diminishing value there. JOSE UGIA: Mm-hmm. CRAIG LABENZ: All right. Any other questions that you've seen that you want to cover real quick? JOSE UGIA: Anything that I see? Where, in the new app or do you mean referring to the library? CRAIG LABENZ: One person, by the way, says that your volume is a little loud, Jose. Would you mind-- yeah, maybe just kind of chop 20% off the top. JOSE UGIA: Let me try. CRAIG LABENZ: Thanks for that, Kenneth. JOSE UGIA: I can start speaking very softly. Let me try-- CRAIG LABENZ: That's the old-fashioned way to do it, yeah. You actually just reduce your vocal cords. Messed up. JOSE UGIA: Sound settings. CRAIG LABENZ: Cannot deal with technology. JOSE UGIA: Input volume. CRAIG LABENZ: Yeah, thank you, Kenneth, for that feedback. We obviously are not listening to ourselves right now. All right, I'm scanning the other questions. Oh, Rinzin asks, is this part of the fullstack Dart series or a new format? There will-- fullstack Dart is, I think, going to be basically a permanent mainstay on this show, but it won't ever be the only topic we cover. So there will be irregular detours into lots of other aspects of Flutter development, like today, the first one. Also, I should say, this was originally going to be a "Boring Show." episode back in the summer. Jose is in Spain, I am in California, and it is difficult to get two people from those locations into the same room. So we kept having scheduling issues. And finally, when I was starting a livestream, it was like, Jose, I think I can stop canceling on you if we just meet digitally. So this was many, many, many months in the making. Jose pitched this forever ago. JOSE UGIA: We really tried. We have to say that. We really, really tried. It just didn't work. Now I'm super happy that we are going for this new format. We are the newest kids in the block. CRAIG LABENZ: That's right. OK. So any thoughts on where we should start? I guess I can just pull up the documentation again. What do you think? JOSE UGIA: Yeah, so that's a great way to start. I'll say there's two potential integration paths. If you-- I'd recommend most developers to just go ahead and use the basic one, which is you basically add a button, which is a widget, and it's similar to any other widget in Flutter. You add some configuration and you'll be good to go. That's what you're showing right there, Craig. For most of you, that's going to be OK. If you have a more complex or dedicated integration, there's another, more customized path. It requires a bit more coding, but it gives you a lot of freedom. I think probably as much freedom as you would need. So we have these two options because there's-- not every payment flow is the same. But I'd say, why don't we start with the basic one and see how we do? Just, like, to warm up. CRAIG LABENZ: Yeah, absolutely. I do have one question that I was just curious about on my own. So we can-- as I was reading the documentation previously. But we see here that there's reference to these configuration assets, and they're dedicated JSON files. And they're mentioned up here in the doc, where it says take a look at some of the examples, blah, blah, blah. And so I'll just click over to that real quick. And we see that they're in the Assets folder, and they're just hard-coded JSON files that indicate all kinds of things, like shipping methods and whatnot. And my first reaction when I saw this was, does this mean I'm going to have to ship a new val-- a new version of my app to respond to on the ground business changes that might happen? The pricing change of shipping could fluctuate and now all of a sudden, I have to release a new version of my app. And I'm wondering, when you mention that other pathway that has-- involves more coding but basically opens up the full universe of flexibility, is this one of the areas of flexibility that you get where you maybe have some more dynamic configuration? JOSE UGIA: Not quite. CRAIG LABENZ: I'm putting you on the spot here. JOSE UGIA: We to have that-- we want to have-- no, that's what we should do the whole time. I'll definitely be generous with you as well. No, this flexibility is something we want to bring for every integration approach. In fact, we right now have the file, the JSON file that you are showing. You can still change things because the display items, so the items where you set the things that you're purchasing and the price, that's still dynamic. But there's one pull request that is going to emerge shortly, probably by the time-- if you're watching live, maybe not now, but if you're watching this later on YouTube, probably by this time, it will be already merged-- that gives you the possibility to not use files, but use strings directly. So you can form that string in whichever way is convenient to you, and then you can receive it from your server, for example, if you have multiple configurations. And then you can build them into the widget and [? top ?] it. And we plan to have that for both integration paths, just to give you that flexibility, which we think is necessary, to be honest. CRAIG LABENZ: Yep, I agree. It also feels necessary to me. And just to fully close the loop on what you're saying, this is also a string, of course. And he's just saying, you can use strings. But this is a string to an asset that is then loaded in process. So you're talking about the raw data gets threaded in-- JOSE UGIA: Precisely. CRAIG LABENZ: --here instead. Yeah. Nice. JOSE UGIA: Precisely. Yeah, one thing that we'll consider as well is having actual typed classes with builders so that you can-- if you want to build them strictly dynamically-- we haven't done this yet because we don't see a big use case for that. Most of the times, that configuration is either pretty set or it's configured somewhere else not in the app because we are talking about payments, something that could change, as you pointed out. So we don't see a clear use case. But that's something that the community talks about and they bring it up. That's something that we can do as well. We have been planning to do it, yeah. CRAIG LABENZ: OK. Well, thank you for humoring me there. Where should I start? In the documentation, it also mentions creating these integrations with Apple or with Google, basically registering your actual business and whatnot. Is that required for just to kind of see a Hello World version of this working locally? Is this where I should begin? JOSE UGIA: Not required. CRAIG LABENZ: Great. JOSE UGIA: 99% sure not required. So let's see if we can avoid it, yeah. CRAIG LABENZ: Wonderful. Didn't want to do it. All right, so where should I start? I've done this so far. That's it. JOSE UGIA: Yeah. You can go ahead and create-- oh, that's a good example. You can go ahead and create the Google Pay button and Apple Pay buttons in your layout. Just place them where you feel they fit best and see what we see. CRAIG LABENZ: OK. I'll just start with the Google Pay button. And you know, I don't even know if I have an Android emulator running on my machine. We're about to find out. We're about to find out a lot of things, including why the dictionary pops up when you just try to highlight stuff. JOSE UGIA: No [INAUDIBLE]. CRAIG LABENZ: OK. Got this code. We're back into main.dart. Let's get rid of the terminal here. And oh yeah, I've got to get rid of all the comments. The ceremonial beginning. [INTERPOSING VOICES] CRAIG LABENZ: The first maneuver of any new project. JOSE UGIA: That's a quick way, that approach. So Gustavo, we have a little note at the bottom stating that it is not an officially supported Google product. It's not a product. It's an open source project. So that's all that it means. We will still keep on contributing. So much as we expect to see contributions from the community, we will still be active to it as much as we can. So it's just like a note that goes there for non-official products, like open source projects. CRAIG LABENZ: Yeah, and so to make sure I fully am understanding here, this disclaimer is just about this package. I mean, Google Pay is obviously an officially supported Google product. It's just this Flutter package that is not an official Google product, is that-- am I-- JOSE UGIA: Correct. CRAIG LABENZ: --reading the room right-- correctly there? JOSE UGIA: Yeah, and it's good that you pointed it out, especially since it involves integrations with other providers. As you can see, it's not only Google Pay there. And that's the way we wanted it to be. In fact, like, it shouldn't matter what we want it to be because we want this to be something that is owned by the community, not Google Pay. CRAIG LABENZ: Oh yes, simulator is what I want. When are you going to launch? There we go, simulator. I actually don't think I've installed an Android emulator on my computer, which is funny. I used to have one, and then I got a new work computer and I just don't think I have since. So we're going to go the Apple route, which may surprise some folks. But that'll really show the power of the Pay package. It is not only for Google Pay. So I'm going to add this button to-- we're just in the counter app here. Oh yeah, I got to save to format after the edit. We've got our center thing here. I guess we'll just kind of put it in this column. And of course, we have to bring in-- wow, I've never looked at my editor this big. It's really quite jarring. All right, so we need to give it our handler, our callback. And the tooltip is so aggressive. We need-- we owe it the callback and the actual things that are being purchased. Now, this paymentItems parameter, this is presumably not my full inventory. Is this the user's cart, essentially, that they're buying? JOSE UGIA: Precisely. Yeah, that's precisely it. CRAIG LABENZ: OK. It's there. Great. So I was also wondering about this status final_price. Can you tell me a little bit about this parameter and the enum here that we're dealing with? JOSE UGIA: Yeah, so this is an area where multiple providers have different nomenclature, but it comes to say whether a price is already final or it may change. You may want to say that price is changing for multiple reasons. For example, if-- let's say you're booking a car sharing ride, so you don't know ahead of time how much that's going to cost. So that price is not final. Or there might be charges in terms of taxing or shipping. So if the price is subject to change, you want to use those different values. Now again, every provider uses a different set of values. For now, we have found a good middle point between Google Pay and Apple Pay. But as we add more providers, that's something that may be subject to change. And maybe at some point, become platform-specific. We are trying to avoid it, but it's something that could happen. CRAIG LABENZ: Right, right. Yeah, I can imagine if you get different sets, like imperfectly overlapping sets of states that different providers offer. But OK, yeah, this makes sense here. Cool. So I'm going to return. We've got our paymentItems. We still don't have the handler. And I'm going to remind myself what the signature to that looks like. Oh, it takes a paymentResult object. Well, that's the very-- JOSE UGIA: It's just basically-- CRAIG LABENZ: [INAUDIBLE] JOSE UGIA: --the result of the payment, yeah. You will see now. JOSE UGIA: So the type of this-- oh, it's dynamic. What? This is surprising. JOSE UGIA: Yeah, that's the result. So that is-- CRAIG LABENZ: Oh. JOSE UGIA: That is the outcome of the payment selection that you have made on screen. CRAIG LABENZ: Dynamic. All right, so yeah, I want to-- I think I'm just going to print this to start paymentResult so we can see what we're dealing with. Which, of course, means I could have just put-- I could have literally written print right here and in fact, that is what I will do because I love a good tearoff. So for now, we are just going to print what we are returned. So what would happen right now if I run the app? Is it going to do something? JOSE UGIA: You will need-- so what will happen is the button won't show. One property that these buttons have, the basic integration, is that if you cannot pay with that payment provider, the button hides automatically. And so since we haven't provided the configuration, it's going to error there and then hide with-- you can still see the error on the-- there's a callback with an error. CRAIG LABENZ: OK. JOSE UGIA: But the widget will disappear. CRAIG LABENZ: Got it, OK. Yes, as soon as I asked what would happen, I remembered, and then it was exactly what you launched into. Now, it's nice that you said the buttons hide. So does this mean I can just, in my code, show-- I can just have both widgets sitting there and I don't need to actually check the platform, they'll hide themselves? JOSE UGIA: Yes. CRAIG LABENZ: Or do you still think it's a best practice to check if iOS and then conditionally show the Apple Pay button? JOSE UGIA: Yeah, there's different trains of thoughts for that. You probably have an opinion. Maybe there's a guidance from Flutter that I don't know about. But basically, the basic way will do it for you. The customized way, then it's your duty there to take care of that. So it really depends on what your style is, how you're doing your application. Basically, both would be supported. If you want to have control over that, then you can go with the custom integration. If you're fine just dropping the buttons and have them do what they need to do, then you can go for the basic. CRAIG LABENZ: Got it. OK. So I'm just-- first of all, I've made my Assets directory in the wrong directory. But I'll just call this apple_payments.json real quick. And then we're going to move this entire folder. I've copied in the exact raw data. Oh, thanks for the reformat, VS Code. That's real nice. OK, let's move this directory up to the root. One thing I noticed-- I was expecting to see these assets called out in the pubspec.yaml and I don't think they were. What is going on with my terminal? There we go. Well, let's move lib/assets to just assets. There we go. OK, now our folder is in the correct location, and this, we simply called-- what did we call it? apple_payments.json. apple_payments. OK. Now, the pubspec.yaml that I was just talking about, when I looked at the examples-- pubspec.yaml. So we'll go back to the Example folder and pubspec. In the Assets spot-- oh, it does, actually. I'm just-- I just missed it. OK, that's great. I'll also make this a little bigger so folks can see. Sorry. Assets, here we go. Doo-doo. And where did this even go? Where did I read that? Oh, right in the Flutter directory, or the Flutter entry right here. So I'll put it here under Assets. All right, I think that'll work. So it's building. And now it makes a lot more sense how that will be pulled in. Oh, you have an Images directory. Are those images just for the fake inventory? They're not really-- JOSE UGIA: Yep. CRAIG LABENZ: --the buttons. JOSE UGIA: We have a shop only with one item that is a T-shirt. So that's the only one we sell in the sample app. We needed an image for that, yeah. CRAIG LABENZ: I would buy this. JOSE UGIA: How many times? It's the only one item we have, so you have to buy it, like, multiple times so-- CRAIG LABENZ: Again and again and again? Yeah, you get one of those, like, ultra-utilitarian wardrobes where you just wear the same shirt every day. Simply so you can test your e-commerce app. I love it. OK, are we now ready to run? Oh, this is interesting. This is maybe hanging. I think-- JOSE UGIA: Let's see. CRAIG LABENZ: [INAUDIBLE] JOSE UGIA: In the meantime, we keep on receiving questions. Thank you for them. AMG at 6:25, you do not need a-- to have PC to be compliant with PCI DSS if you're integrating through a payment gateway, which is one of the ways in which you can use Google Pay, with a gateway. If you're doing a direct integration-- that is, if you are processing payments yourself-- then you will need to be PCI DSS compliant. But that's no difference from your current payments approach. CRAIG LABENZ: I'm so glad you're here to answer those kinds of questions, Jose. I don't know the legal things about payment accepting whatnot. Of course, you do. Boy, you are-- I love it. JOSE UGIA: Yeah. CRAIG LABENZ: Are there any other questions-- JOSE UGIA: Let's see. Maybe next time, we switch positions, and I'm coding and you answer questions. CRAIG LABENZ: OK, yeah, then I can just relax. Any other questions that you're seeing that you to get to while this builds? JOSE UGIA: Let's see. The GPay source code. If you're talking about the source code for the plugin that we are working with, definitely you have it in GitHub. You can find it through the pub.dev link that Craig's using. And not only find it, but also hopefully contribute or leave your thoughts. For Google Pay-- for the Google Pay product source code, we don't have source code to be shared for you. CRAIG LABENZ: [LAUGHS] I can only presume they meant-- JOSE UGIA: At this point. CRAIG LABENZ: --the package. That would be a-- that's a bold-- I admire that question, if they were asking about the actual Google Pay source code. JOSE UGIA: You have to be holistic. CRAIG LABENZ: Right, right. Any other questions while it is-- oh, apparently my volume is a little quiet. So I'm going to turn my gain up slightly and we'll see if it works. JOSE UGIA: Oh, there's a question that I-- it's a bit better. There's a question that I missed. Mohd Ubaid-- "Are we also covering Stripe integration with Google Pay?" We are going to cover the integration with PSP. We're payment gateway agnostic. That means that once you receive the paymentResult, then what you have to do is send that payment information to your gateway, whatever that is. Could be Stripe, could also be any other. Most PSPs do have libraries as well to let you send that to them. Or alternatively, you can use-- you can do it through your backend, like you do today when you receive a credit card and you send it to your PSP. Concretely for Stripe, they have a Flutter library as well or Flutter plugin, and it's well integrated with Google Pay-- or sorry, with the Pay plugin. So that means that once you get the paymentResult, you can use the Stripe plugin to send that information to Stripe to the backend. CRAIG LABENZ: Let's go-- oh, interesting. So-- JOSE UGIA: Huh. CRAIG LABENZ: I-- we didn't-- we don't have "Buy with" anywhere in our code. JOSE UGIA: You should have a width, I think, in the button. CRAIG LABENZ: Width. All right, we'll start with that. And I'll just say 200 for now. OK? Much wider. That worked. JOSE UGIA: Mm-hmm. CRAIG LABENZ: What do I change "Buy with"? [HUMS] Function, child, child on error. Wow, I am actually not seeing-- oh nope, that ain't it, either. JOSE UGIA: What are we looking for? CRAIG LABENZ: Oh, I was just wondering the "Buy with" text here. What if I wanted this to say-- JOSE UGIA: Oh. CRAIG LABENZ: --checkout or something? JOSE UGIA: Oh yeah. That's not modifiable as per, in this case, Apple Pay's guidelines. Google Pay's has those different types of buttons, but that's why you have a type property. If you can see on line 70-- CRAIG LABENZ: Oh. JOSE UGIA: --you have multiple types of buttons there, and that changes the label. CRAIG LABENZ: Whoa. Whoa, whoa, whoa, whoa, whoa. All right. Hey, checkout. Literally what I wanted. JOSE UGIA: Yeah, checkout. Let's go with checkout. CRAIG LABENZ: And the answer is-- zzz. JOSE UGIA: Let's see. CRAIG LABENZ: Trying to rebuild. JOSE UGIA: What's going on? CRAIG LABENZ: Also, I'm going to try to make this-- oh, whoops. Let's see if we can get everything on the screen here. So-- why didn't this rebuild? This still says "Buy with." We'll do a hard restart. JOSE UGIA: Let's try another one. Maybe that's the default. CRAIG LABENZ: Ah, checkout. JOSE UGIA: Oh, checkout, yeah. CRAIG LABENZ: So-- oh, I wonder if there's a little hot reload issue with the implementation of this bug-- or this button. Try again. JOSE UGIA: Maybe. CRAIG LABENZ: Checkout and we'll go back to, let's say, book. I'm curious what that one is. Oh yeah. JOSE UGIA: Huh. CRAIG LABENZ: I wonder if this is like a closure or something in there, because I know those don't get sliced over for a hot reload. JOSE UGIA: Maybe keeping the state internally. Maybe we don't have stateful one internally. We'll have to-- CRAIG LABENZ: Pay button is-- JOSE UGIA: Take a look at that. CRAIG LABENZ: --stateful. Yeah, I don't know. Interesting. All right. We can file that one away for further-- or for future investigation. Are we ready to click the button, Jose? JOSE UGIA: We can only try. CRAIG LABENZ: Indeed. [INAUDIBLE] no. Output, right? Let's see what we get. JOSE UGIA: Yep. CRAIG LABENZ: Nothing so far. Oh, Debug Console. That's what I wanted. But still nothing. So what did you expect to happen? Should something have popped up? JOSE UGIA: Let me see. Hmm. Can I take a look at the widget, the Apple Pay button widget? CRAIG LABENZ: Yeah. JOSE UGIA: The configuration is there. paymentItems. Yeah, it looks good. onPaymentResult print. onPaymentResult is there. No, that actually looks good to me. Interesting. Is Apple Pay enabled on that device? Maybe that could be it. CRAIG LABENZ: Oh, that's a good question. So I'll go to the home screen. You know, I have no idea how much of a headache it might be to enable this on a simulator. We might have to, like, sign in. Which feels like a real hassle. I'd have to look up my Apple password. JOSE UGIA: Maybe. Let me see. CRAIG LABENZ: Accessibility. Well, let's see what this says. Let's see if this kind of mentions it. Then we get to use-- oh here, is this kind of-- no, that's just Apple Wallet. I don't think. That's also different from Apple Pay. I think I'm going to have to sign in. So do you think I should get-- I'm probably going to have the same issue on an Android emulator, aren't I? I think I might just bite the bullet and sign in, which I will-- will, of course, involve not typing my password on the stream because it will be my real Apple ID. [LAUGHS] Best not to broadcast that password to the whole world. I'm looking at-- JOSE UGIA: At this point, [INAUDIBLE].. CRAIG LABENZ: --right now in one password. Jose, do you want to take a few questions while I do this? JOSE UGIA: I was taking a look at that because I was expecting your password to be not very short. But let's not disclose any information about it. OK. So as you will point out, Aksh Desai, Google Pay in India works a bit differently and right now, it is not covered in the Google Pay API-- the Google Pay API, as a whole, including this library as well-- being UPI is a completely different method to do real-time payments, which is, by the way, a great system. But again, Google Pay API will be applicable if you're using a payment gateway like Stripe or Braintree, Adyen-- any payment gateway that is supported, you can use it with Google Pay. In fact, I do believe that this is a payment collection mechanism that is also available in India. So if you're doing it through UPI, you cannot use the API. But if you are using a PSP, then you can use the Google Pay API as well. Let me see. What else do we have? I'm trying to concentrate on questions that I can answer. CRAIG LABENZ: That seems like a [INAUDIBLE].. JOSE UGIA: Screen share. Flutter web. Yeah, hi, Lima Tech. This is a question from a bit sometime ago, so hopefully you're still with us. We are-- we have web integration in our pipeline. Also, the Flutter team is very passionate about reminding us of the importance of including web, which is something that we appreciate. For the time being, we are-- it's not under development. But that's something that we will consider for next year. But once again, remember that this is an open source project, so there's a big discussion open in GitHub about this. So one option is that we have contributions from a group of external contributors as well. So this repo doesn't have to be one or two-- we can share a bit the effort to get. Then that certainly will speed up things. But yeah, any thoughts, any feedback. There's a discussion about web in GitHub. And at the same time, we are still looking into it ourselves. So hopefully, we can get to it next year. It will help a lot to hear your use cases about that as well, by the way, if you use the comments for that. We see a very solid use case for using Google Pay in Android. We do support web as well, but we have seen less interest than on Android from the Flutter community. So that's something that we'd love to hear about, if you have different thoughts. CRAIG LABENZ: All right. I suspected I might be hitting a dead end, so I started to read the live chat and Karan, Developer Karan, tells us that we have to use a real device for this. Is something that you've encountered, Jose, when you've been testing this? JOSE UGIA: You can definitely use a simulator. I do have mine set up. But I do believe I'm logged in. It's been a while since I've used it, but I'm logged in with my device, and that works fine. You can test your Apple Pay integration. As you can imagine, I've tested Google Pay a bit more than Apple Pay, but as far as I can remember, yeah, that should work. CRAIG LABENZ: So you think I should be able to do what I'm trying to do right now. JOSE UGIA: I think so, yeah. CRAIG LABENZ: Now, the same person also says we have to add a-- I think they meant sandbox ID. Does this ring a bell for what you might have done? JOSE UGIA: I don't think that's necessary, no. CRAIG LABENZ: OK. Karan, I very much appreciate the ideas. Hey, Gianfranco's here. Yesterday on-- or at least was here four minutes ago. Yesterday was on update Q&A, offering a lot of great intel. So I don't want to just spend forever here trying to get this set up, but we seem to be blocked on having it set up. JOSE UGIA: So-- CRAIG LABENZ: So that is-- JOSE UGIA: --are we-- CRAIG LABENZ: --something of a constriction. JOSE UGIA: Were you able to log in your Apple account, Apple ID? CRAIG LABENZ: I'm logged in, yeah. My wife and here, like all the real things. JOSE UGIA: Still the button doesn't show? CRAIG LABENZ: Oh, you know what? I haven't-- I assumed I was going to have to activate something here. But no, let's go back to the app. That could be what's up. JOSE UGIA: Yeah. Try. CRAIG LABENZ: All right, we're in the corner clicking. Nothing. But let's restart. Clicking. Nothing. Phooey. JOSE UGIA: Yeah, that should trigger the payment sheet. Open it up from the bottom. So it's something related to the device or your account. Let me see if I have cards on my device. CRAIG LABENZ: Yeah, I'm looking at my real phone now to see where does Apple Pay show up. Oh, there's Wallet and Apple Pay is a thing in settings. Did I see that here? It's underneath the App Store. No. [LAUGHS] JOSE UGIA: Does Apple Pay needs to be enabled, maybe, in that device? CRAIG LABENZ: So on my real phone, under this section with General Accessibility and Privacy and Security, then there's an App Store and Wallet and Apple Pay section. Before Passwords, it's right in here, and it just isn't showing up on the emulator. I'm going to read the real chat again. CRAIG LABENZ: Try this once-- iOS Simulator, Features, Authorize Apple Pay." OK. Like that. iOS simulator, I think they might mean-- I'm trying to figure out what that first-- oh, Features. I see it now. Features. OK. Authorize Apple Pay is grayed out. JOSE UGIA: Huh. Let's see. CRAIG LABENZ: Well, no, it's not grayed out. Maybe just the keyboard shortcut was grayed out. This is an excellent-- JOSE UGIA: One thing. CRAIG LABENZ: --idea. [LAUGHS] JOSE UGIA: It is neat. CRAIG LABENZ: So I don't-- yeah, it's hard to tell whether or not this has worked. I mean, I clicked it. JOSE UGIA: And me-- I think we're missing also the integration requirements potentially on the project. We may need to enable the-- we may need to enable Apple Pay. I bet that was already enabled, but we can check on the XC workspace to see if Apple Pay's enabled there. Do you have Xcode over there? CRAIG LABENZ: Yeah. Oh, I can. Now, I didn't start from the sample. So if that's part of the thing-- let's make notes-- JOSE UGIA: Ah, yep. CRAIG LABENZ: --of all-- these are all great bits of documentation that we should add to the package. So I'm going to just open the directory. Cool. JOSE UGIA: Yeah, so that's-- in the requirements, in the pre section on the Read Me, you have a link to the Google Pay and Apple Pay requirements. CRAIG LABENZ: [INAUDIBLE] JOSE UGIA: Those that we jump before, because I said that we can skip them-- OK, we can skip the consoles, but there are some requirements that we cannot escape. So. CRAIG LABENZ: [LAUGHS] JOSE UGIA: But I think it was just that one, so let's see. Yeah, that first step on Apple Pay. CRAIG LABENZ: So this one? Integration requirements? JOSE UGIA: Yeah. Yeah, I think that's it. CRAIG LABENZ: I see-- right. JOSE UGIA: Especially-- CRAIG LABENZ: Take a look at [INAUDIBLE].. JOSE UGIA: --that one, Enable Apple Pay Capability. CRAIG LABENZ: In Xcode. Oh, OK. After creating a merchant identifier-- so we we're still skipping that, and hopefully that'll work. But we obviously-- JOSE UGIA: I think we're going to skip it. CRAIG LABENZ: --want to [INAUDIBLE].. Apple Pay. So open the project, select the project, choose the target. All right, we're going to do this one at a time. Here we go. We've got the target. Next. Choose the target from the app and the popup thing. OK, so I think I did that. Signing and Capabilities. Great. JOSE UGIA: Yeah, in Apple Pay utility, probably. CRAIG LABENZ: In the toolbar, click the Library plus button. No, wait, where is that? [INTERPOSING VOICES] CRAIG LABENZ: That could help. What did it say here? In the toolbar, click the Library button to open the Capabilities library. Where's this plus button? It didn't make a provisioning profile and it seems like maybe a-- oh, here we go, Capabilities. OK, Pay. What are you going to do? What? JOSE UGIA: I think I see Apple Pay there. CRAIG LABENZ: Well, that's good. It makes one of us. Where do you see it? JOSE UGIA: But you don't. CRAIG LABENZ: Oh, on your Xcode you see it. JOSE UGIA: Yeah. Nice code. CRAIG LABENZ: Goodness gracious. All right. At what point should we pull the plug and do this in an Android simulator? Also, are we going to have all of the exact same headaches in an Android simulator? JOSE UGIA: No. Give me 20 seconds. CRAIG LABENZ: All right, I'm going to-- JOSE UGIA: Maybe one minute. CRAIG LABENZ: --close this app as well. Xcode enable Apple Pay on iPhone. JOSE UGIA: Whoa, I have way more items. CRAIG LABENZ: That's not even remotely what I had typed. Apple Pay iOS emulator. JOSE UGIA: Why don't you try with Wallet? CRAIG LABENZ: I need a paid developer account, Ray says. I have that. I definitely have a paid developer account. JOSE UGIA: Used to be-- it used to be Apple Pay before. Maybe it's Wallet now. Why don't you try with Wallet in the Capabilities? CRAIG LABENZ: OK. Returning to Xcode. JOSE UGIA: Yup. CRAIG LABENZ: Capabilities, Wallet. JOSE UGIA: Try Wallet. CRAIG LABENZ: I don't see it here, either. JOSE UGIA: You don't see that, either? Huh. CRAIG LABENZ: Nothing. Why? JOSE UGIA: Interesting. CRAIG LABENZ: What a miserable thing. JOSE UGIA: Mm. CRAIG LABENZ: Also, just the Capability whole plus here is grayed out. JOSE UGIA: A little bit. CRAIG LABENZ: I wonder if this has anything to do-- I wonder if it's only willing to do those with a successful provisioning profile. I've never actually seen this fail before, but I'm also wondering if, on my personal machine, this would pass. JOSE UGIA: Right. CRAIG LABENZ: [INAUDIBLE] I really suspect it would pass on my personal machine. But I don't know what I didn't-- what I'm missing on this machine. JOSE UGIA: It could be that, yeah. But I think if we can enable it there, I believe that we won't be able to see it working. CRAIG LABENZ: OK. JOSE UGIA: [INAUDIBLE] CRAIG LABENZ: Should we switch over to an Android emulator, do you think? JOSE UGIA: Let's try that. CRAIG LABENZ: OK. So I'm going to need to-- first of all, let's kill you. Thank you for your service. And create an Android emulator. That's what I want to do. Oh boy. Yeah, I don't think I've done any of this since getting my upgraded work computer. AVD Manager is missing from the Android SDK. JOSE UGIA: Do you have Android Studio with that? CRAIG LABENZ: I thought I did. I know I did on my old computer. Nope. We're really starting from scratch here. [LAUGHS] JOSE UGIA: Just do it-- CRAIG LABENZ: Good stuff. JOSE UGIA: Yeah, Hamza, I'm standing, because otherwise I get to relax. And I can move around as well. Hopefully that's not bothering you. Craig is definitely much more static. Yeah, that standing desk that has a manual mechanism. So every time I want to put it up or down, I have to roll a little knob for a while. But then after a few seconds, I'm done with it. CRAIG LABENZ: That's pretty hardcore. JOSE UGIA: It's not bad. But I can justify to myself the automatic one. I change the height of the table only a few times per year. CRAIG LABENZ: Mm. So you stand a lot. JOSE UGIA: Yeah, especially for calls. And it's got one of those, like, treadmills that people do, although I haven't been able to concentrate-- I don't think I'll be able to concentrate if I walk and type at the same time. That must be very hard. CRAIG LABENZ: Yeah, I've heard that takes a lot of getting used to. I did have a coworker-- JOSE UGIA: [INAUDIBLE] CRAIG LABENZ: --that tried that. He could only walk-- yeah, he had a very specific-- it was back when I was at Zapier. Great company, by the way. He would-- he was very precise about the exact speed that if he went above that speed, he would lose all focus. All right, we're not importing any settings. Oh, this is all happening on the wrong window. Let's bring this over. Yeah. Next. I can't click any buttons other than presumably Cancel. JOSE UGIA: Oh, do you have-- [INTERPOSING VOICES] CRAIG LABENZ: Send usage statistics to Google. Here we go. OK, Standard, yeah. JOSE UGIA: That. CRAIG LABENZ: Next. JOSE UGIA: Yeah. CRAIG LABENZ: Sure, let's start with Light Mode-- I mean, Dark Mode. Sure, install the things. I'm going to need the emulator. Probably the build tools. I'm going to need the platform. I'm going to need all those things. I'm going to need this-- JOSE UGIA: So while you entertain yourself with the installation of Android Studio, I have a question for you, Craig. Well, actually, TEC has that question. And they are curious about whether you're using a virtual background. Or is that your real room? CRAIG LABENZ: Oh. Hmm-mm. No, there's no plant here. Also, my hand doesn't actually cease to exist when I go too far to the right. So keen eye. It is a virtual background. I have a green screen behind me and a bunch of lights in front to light up the green screen so I don't cast a big shadow on it. And why isn't this letting me do it? I can't press any of the buttons. JOSE UGIA: Accept. You have to accept all of them, that one as well. CRAIG LABENZ: Oh, there's more. I see. JOSE UGIA: Yep. CRAIG LABENZ: Got it. JOSE UGIA: Train Of Thought, I've been using M1 for about a year now. And I was expecting some bumps on the road, but I have to say that I haven't probably experienced any-- maybe only a couple of them. Even with things like Docker, it's been pretty smooth. So I don't foresee you having issues developing Flutter with M1. I'd actually expect the opposite-- that it, it works fine for you. CRAIG LABENZ: Yeah, I haven't had any issues. Every now and then, you'll run into a weird one, like the gRPC package for Python, they had not released the correct universal binary for a 1 version of Python. So it was like, on a project that I had, I couldn't update to the latest. I had to stay on, like, Python 3.9 instead of 3.10 or something for a long time because the gRPC thing just wouldn't compile. So you'll run into these really random gotchas. But in general, it's all quite ironed out at this point and quite smooth. Also, I am taxing my laptop absolutely to the max right now. I've got OBS running, we're streaming, got video calls going. And my old Intel Mac could have heated the planet if I tried to do that. And on the M1 Mac that I'm using now, the fan's not even on. It's like cool to the touch. Honestly. It's not above room temperature. So it is just unreal how powerful they are and how efficient they are with that power. All right. JOSE UGIA: Cool. CRAIG LABENZ: I've done this. We're not making any-- JOSE UGIA: If you can get to the SDK. So that on the menu on the top for Android Studio, you should be able to see the simulator. Oh yeah. CRAIG LABENZ: Oh, this is-- JOSE UGIA: Oh, that's still missing? CRAIG LABENZ: All right. Yeah. So what-- presumably Android Studio is the correct place to walk through setting this up, right? JOSE UGIA: Yeah. Do you have-- can you see the menu at the top? I cannot see it on the livestream, the menu for Android Studio. CRAIG LABENZ: Oh, it's very limited. It just says Android Studio, File, and Help. JOSE UGIA: OK. Ah, that one. CRAIG LABENZ: That might be because I need to get into a project. So I think I'm just going to make an empty project real quick. Basic Activity, I guess. Oh, I'll make one with GPay. Woo-hoo, that might save some time. JOSE UGIA: Yeah, fantastic idea. CRAIG LABENZ: And sure do love all this. JOSE UGIA: Yeah, that looks OK. CRAIG LABENZ: Finish. JOSE UGIA: OK, so now at the top right, we can-- CRAIG LABENZ: An inch. JOSE UGIA: --access the simulator from there and see what's missing and install it. CRAIG LABENZ: All right. We're in Android Studio. JOSE UGIA: All right, so you have that little icon next to the elephant on the right side. Or Device Manager, that works too, yeah. CRAIG LABENZ: All right. JOSE UGIA: Oh yeah, your device. CRAIG LABENZ: This seems familiar. I knew I had it on my old one. I don't know how I got migrated over. Let's see if it runs. If it does, then-- yeah, a Kotlin IDE error has occurred. Are we running the device? OK, it says it's connected to the emulator. JOSE UGIA: Mm-hmm. CRAIG LABENZ: Sure, use whatever you want. Eavesdrop on me. [LAUGHS] Imagine if emulators had that capability. That would be the most devious thing in the world. It would also be deduced in, like, a minute. Wow, the emulator is running tucked into this corner. JOSE UGIA: Yeah. , You can make it come out or-- CRAIG LABENZ: I'll pop it out. JOSE UGIA: --make that window a bit bigger. With the-- so if you-- CRAIG LABENZ: How about I pop it out? I think that's what-- JOSE UGIA: Minimize-- CRAIG LABENZ: [INAUDIBLE] JOSE UGIA: At least you can minimize the window above in the Device Manager. You can make that small. CRAIG LABENZ: Oh, OK. All right. JOSE UGIA: And then your device will be big. CRAIG LABENZ: Now, is this-- JOSE UGIA: [INAUDIBLE] you get it out. CRAIG LABENZ: Yeah, I would like to do that. Oh, that wasn't it. Full screen. Yeah, I don't know. I'm not seeing how to do it. Maybe if we re-- right-clicking's not doing anything. These buttons don't seem to do anything. This is not it. Showing Maps and whatnot. I don't see Payment here, so we'll see. All right, I've got an emulator running. Even though this is tucked into Android Studio, do you think we're going to see it from-- JOSE UGIA: You should be able to see it. CRAIG LABENZ: Yeah, I was hoping it would just kind of show up here. Let's-- JOSE UGIA: Yep, should show. CRAIG LABENZ: --reload this. How do you even reload VS Code? I'm blanking on this. JOSE UGIA: We'll need to reopen it again. CRAIG LABENZ: Wow. JOSE UGIA: I wonder why you don't see the SDK in there. Maybe it's your Flutter path to-- your Flutter config to the Android SDK is not properly set. CRAIG LABENZ: [INAUDIBLE] JOSE UGIA: One of those things that you do once 10 years ago and you don't have to do it again. CRAIG LABENZ: Never do it again. Right? And then you get a new computer and you have to do it again, but you don't realize till you're on a livestream. JOSE UGIA: [INAUDIBLE] CRAIG LABENZ: One of those things. JOSE UGIA: That's how it happens. CRAIG LABENZ: So do you remember how to just kind of restart VS Code? I guess I can also-- I've never used Android Studio, honestly, but I could try to use the Flutter project from here. JOSE UGIA: You could-- CRAIG LABENZ: Do you use Android Studio or VS Code? JOSE UGIA: Or you can-- why don't you use the Flutter command line to take a look at the devices? Isn't there, like-- I recall it was some Flutter devices, something like that. CRAIG LABENZ: Yeah, I don't know what it is. But it does exist. Or just Flutter devices, list all connected devices. [HUMS] By the way, Jose, feel free to keep your eye on the live chat to see if anyone is-- JOSE UGIA: OK, so it shows that-- CRAIG LABENZ: --has the correct answer for us here. CRAIG LABENZ: Yeah, you have it there. CRAIG LABENZ: So it's just the VS Code thing. So I guess we can just can run-- JOSE UGIA: So you can-- yeah, you can try flutter run. CRAIG LABENZ: Oh, but also let's put in the Google Pay button now instead. JOSE UGIA: All right. That'll be a good idea. CRAIG LABENZ: Go back-- let's go to Packages. JOSE UGIA: True, you could do Flutter-- do you know if we have the Flutter plugin? Do you get this laptop from the box right now out, Craig? You can tell us. CRAIG LABENZ: [LAUGHS] No, I've had it for some time, but I've never used Android Studio. As we all saw, I just had to download it. All right, onGooglePayResult. This, we're still just going to put print. And then-- JOSE UGIA: Yeah, that works. CRAIG LABENZ: I've got to grab the other asset. So let's do that real quick. Let's grab the Google asset. Get the wrong-- JOSE UGIA: Yeah, we may need the Flutter plugin for VS Code, if we don't have it yet. CRAIG LABENZ: Oh, the Flutter plugin for VS Code? Yeah, I have that. Yeah, yeah. JOSE UGIA: Oh, you have that. CRAIG LABENZ: [INAUDIBLE] JOSE UGIA: Oh, you have it because you can see the play button, yeah. CRAIG LABENZ: New file, there we go. Google Pay. And we'll call this-- put it in the Assets folder. google_payments. There we go. JOSE UGIA: So Lalit Kumar, you can integrate in-app payments on Apple Pay with a plugin. I believe there's a plugin for that. This payments plugin is for-- if you remember at the beginning, we mentioned that this is for physical payments. So anything that is outside of the scope of the Apple Store or the Google Play store. I cannot talk about the App Store guidelines, but the Google Play ones will be constrained to digital assets. So if you're doing digital assets, you can use any type of digital payments in pub.dev to do that. For the Pay plugin, we'll be [INAUDIBLE] for physical payments, so remember things like e-commerce, clothing, tools, some physical services like gym membership, food delivery, and things like that. CRAIG LABENZ: One quick thought for you, Jose-- when you bump your table, we hear that loud and clear. JOSE UGIA: I'm not paying [INAUDIBLE] since I'm standing. CRAIG LABENZ: It just was more pronounced for me. All right, we are building to the device, which-- JOSE UGIA: Progress. CRAIG LABENZ: --we may only see launch here. That will be really quite an adventure, but we'll find out. All right, I'm going to look at some questions as well, see if we have any unrelated to this. Waiting for Material 3 update for GPay. Will it come soon? Do you know what they mean by this? This question was from almost an hour ago. JOSE UGIA: So the Google Pay button has its own style guidelines and its own design that will come with the plugin. So you don't have to worry about that. Whether we keep that consistent with the Material 3 style, I'm sure that's something that the team is trying. But for the purpose of this plugin, you can simply go with the designs that are provided to make it easier for you. That's assembling. Yeah, I love the restart tips that we are getting. This is so many times useful. So-- CRAIG LABENZ: Oh, to see the thing. JOSE UGIA: --thanks for that. CRAIG LABENZ: Yeah, I was just blanking on how to restart the IDE. I thought it was like-- there is a way to restart it in place, right? What am I-- JOSE UGIA: I see. CRAIG LABENZ: --blanking on for VS Code? JOSE UGIA: I don't know about it, if there's a way. I always-- I may have been doing it wrong for ages now, but always was close it and open it again. I know Android Studio has one way to restart, but I didn't know that was in VS Code. CRAIG LABENZ: Higher Android SDK version, of course. So we need to set our-- do you know what the version we want to set is? JOSE UGIA: Yeah, try 21. CRAIG LABENZ: 21, OK. JOSE UGIA: Is-- CRAIG LABENZ: Right, what do we have set? JOSE UGIA: If you go-- if you search minSDK, yeah. JOSE UGIA: We'll do [? hardcoded ?] for now. CRAIG LABENZ: 21, you said? JOSE UGIA: Yeah. CRAIG LABENZ: OK. JOSE UGIA: So. CRAIG LABENZ: All right. JOSE UGIA: Can restart with Command-Shift-P. Ah, reload the window. That's what you wanted, probably. CRAIG LABENZ: Uh. JOSE UGIA: That's it. CRAIG LABENZ: Thank you. JOSE UGIA: [INAUDIBLE] CRAIG LABENZ: I had some muscle memory of typing "reload" and I just was suddenly blanking on where I would type that. 10 points to House Gryffindor or whatever house the person who said that wants them forwarded to. And it seized the emulator. Can you believe it? JOSE UGIA: [INAUDIBLE] CRAIG LABENZ: So I'm going to just try to click Run up here, Start Debugging. That's what I always press. Aha. All right. JOSE UGIA: All right. CRAIG LABENZ: It's thinking. Can you believe it? All right, I'm also scanning. I need to set the path to Android tools in your shell file. Oh, someone's pointing out further setup for this. Now, we might have it working at this point. But thank you, Kishan, I appreciate that. Hey, Felix. How you doing? We are just running in place over here today, Felix. [LAUGHS] Doing a lot of setup. It's been-- JOSE UGIA: Storebought for a new laptop and one hour integration. CRAIG LABENZ: [LAUGHS] New-ish. New-ish. I think I got it in October. All right, let's see here. So-- JOSE UGIA: So that must be running already. CRAIG LABENZ: I think so. So is it-- hey, it is! OK. So I'm going to click the button. JOSE UGIA: Are you nervous? CRAIG LABENZ: Requires a Google account on this device. JOSE UGIA: Aha. Yep. CRAIG LABENZ: Progress! JOSE UGIA: Yep. CRAIG LABENZ: OK. So let me sign into Google on this device. JOSE UGIA: And don't worry-- your users of your apps, they will have that already set up on their device. They will have a Google account already set up, so-- CRAIG LABENZ: Why do you always have to do this? JOSE UGIA: --don't worry. This is just like a Craig and Jose problem. CRAIG LABENZ: Here's an exciting thing-- the normal sidebar Chrome for the emulator. How do I start doing this? Where do I go-- oh, maybe I go here? Is this going to-- I don't want to screenshot. Go back, that should-- is this right? JOSE UGIA: Yeah, no, that's-- yeah, any of those would work. So if you pull-- CRAIG LABENZ: Do I go to Settings? JOSE UGIA: Yeah. Yeah, that's fine. And then account. Something that should be searchable. CRAIG LABENZ: I have a Pixel myself. But again, I've only signed in once ever, so. JOSE UGIA: Try Account. CRAIG LABENZ: Not a very snappy experience on this emulator, I got to say. JOSE UGIA: No, yeah. CRAIG LABENZ: Ooh! And by not snappy, I mean unusable. [LAUGHS] JOSE UGIA: Hmm. CRAIG LABENZ: Wow, can't do anything. Oh, do I have to literally type here? JOSE UGIA: You could-- CRAIG LABENZ: Also, what input? JOSE UGIA: --if you set-- you have to select-- yeah, the input is not selected. Let's see if we can select the Settings. CRAIG LABENZ: It says don't [INAUDIBLE].. JOSE UGIA: Yeah, like emulators now are very quick. CRAIG LABENZ: Non-responsive. JOSE UGIA: That's something from 2012. At max, there's a Pixel 3a API. CRAIG LABENZ: So I wouldn't mind. Can I turn this off and let's try to launch it from VS Code. Because that might launch it outside of whatever embedded universe that this is in. JOSE UGIA: That will launch it outside, yeah. Yeah. CRAIG LABENZ: Right, yeah, it certainly won't-- JOSE UGIA: Got to try. CRAIG LABENZ: --get fired up in here again. All right, so let's-- JOSE UGIA: It looks like the Android SDK now, so you can try-- CRAIG LABENZ: Stop. Yep, I do. So we're going to go back to this Pixel. Here we go. Sure. Aha. This is the UI I'm used to, which allows for-- actually, those were the same buttons they were showing. Now, maybe in here can I do account things? No. JOSE UGIA: No. This is just for mocking and configuring the device and mocking some information. CRAIG LABENZ: Awesome. It says, check if you have Google Pay. Well, I did. Create this-- oh no, that was that project I made that we're not using anymore. We will have to check if we have Google Pay on this device once it boots. JOSE UGIA: The simulator seems really slow. So why don't you try a new simulator, because this image is, what, 3-- [INAUDIBLE] 3. Try the new one. It's ARM64, so you should be fine. But maybe you can try create a new one. Maybe this one is filled with-- oh, you are there. CRAIG LABENZ: [INAUDIBLE] JOSE UGIA: OK. CRAIG LABENZ: It wants to record audio. No for sure. While we're using the app? Go away, please. All right. So this should tell us we need an account again, right? So now we're back to-- JOSE UGIA: So that's snappy enough. CRAIG LABENZ: --doing account things. OK, here we go. Clicked the thing. It may work. JOSE UGIA: I hope so. CRAIG LABENZ: It's working a lot better. JOSE UGIA: Yeah. CRAIG LABENZ: Typing "account." JOSE UGIA: There you go. CRAIG LABENZ: When I clicked Google Assistant, I'm not sure if this was-- JOSE UGIA: That works. CRAIG LABENZ: --correct or not. This is the-- JOSE UGIA: Yeah, that works. CRAIG LABENZ: --direction I should follow? OK. JOSE UGIA: If you sign into that account, it will sign into other accounts as well. CRAIG LABENZ: Luckily, I have one password to access all of my passwords. JOSE UGIA: So. Kristi Codes-- this is the life of the developer most of the time-- setup, more setup, and less coding. And I think that's partially the purpose of this, right, Craig? CRAIG LABENZ: Indeed. JOSE UGIA: To illustrate a real integration process. CRAIG LABENZ: Yep. We're carrying the torch forward of "The Boring Show," which was Filip's old creation, for those who've been around Flutter for a while. Filip Hracek left Google about a year and a half ago, but he was the original creator. It was his idea to have "The Boring Show" to just show developers from the Flutter team not knowing what they were doing, getting stuck. And we are certainly living that energy today. All right, I'm signing in offscreen. I have to say, this emulator is still incredibly slow. I don't know if it's because it's realistically provisioning Pixel 3, like, memory and whatnot. It's not too snappy. Anyway, finding my password. Carry on, Jose. JOSE UGIA: Yeah. So lots of great tips over here. Thank you for that. And thank you for the support. I'm glad to hear that this type of setups are useful to you. It's definitely-- yeah, some config. But those are the kind of things that you do once. And during your development process, it's only just like the new parts that you have to configure again. So-- but it's great to see the support coming from your end, and the empathy as well. Glad that you can see reflected. CRAIG LABENZ: All right, I'm signing in. I've completed the two-factor. It wants me to-- JOSE UGIA: That's very quick for a two-factor. CRAIG LABENZ: Yeah, Google Apps-- JOSE UGIA: I believe that's a skill that we need, just the signing in and dull bit. CRAIG LABENZ: Yeah, sure, whatever. I'm in. Oh, sorry, I wasn't saying that to you. I was saying it to all these popups. I love what you were saying, Jose. All right, switching back over, now that I'm not typing my password. Hello, Craig. Hello there. JOSE UGIA: All right. CRAIG LABENZ: Hello, John. Hello, John. A little "Jurassic Park" for you. Oh my goodness. I wish there was a mode that was like, this is fake. JOSE UGIA: VS Code? Yeah. CRAIG LABENZ: This is not a real phone that I will be using for the rest of my life. JOSE UGIA: The I don't care mode. The developer mode? Yeah, there's some from a developer mode. It could be useful there for account creation as well. CRAIG LABENZ: Man, I can't believe how slow this emulator is. Every click is just like, I'll take that under advisement. JOSE UGIA: Hmm. CRAIG LABENZ: We can even see here-- look at the frame rate. Those were not dropped frames on the stream of the spinner. It was just struggling. Now it's working, but it was just struggling to spin the spinner. All right, do we have any other exciting questions? JOSE UGIA: Just seeing that it's so useful to-- well, try again. It's so useful to have that help coming from a few dozen-- CRAIG LABENZ: Oh, it's trying to connect to Assistant. JOSE UGIA: --hundreds of developers. CRAIG LABENZ: I don't care about Assistant. I just want to be-- [INTERPOSING VOICES] CRAIG LABENZ: --which think I am, because I'm not worried about Assistant. Yeah, yeah, yeah. JOSE UGIA: It might [INAUDIBLE]. CRAIG LABENZ: This should be good. Hopefully it shows me here in Accounts. This would mean that we're in. Yeah, we're in. All right. Don't care about Assistant. Go away. Go back. Home. JOSE UGIA: It must be something with the configuration devices. These days, simulators are very quick. CRAIG LABENZ: Yeah, something's not right. All right, start debugging. JOSE UGIA: There we go. I think this is the one, Craig. This is it. CRAIG LABENZ: We're going to see something print. It's going to happen. JOSE UGIA: This is it, I think. CRAIG LABENZ: [HUMS] JOSE UGIA: Ah, so the loading widget, Kenneth, with this plugin, at least, we have given you a little property in the Google Pay widget that allows you to send any type of widget that shows while the button is loading. So you can-- we have a basic load indicator, but you can have anything you want there. It's just basically a widget, so you can configure that the way you want to. There's the property you can see right now on the screen called a loading indicator. We have a circular progress indicator, but you can add there whatever you find convenient. CRAIG LABENZ: Yep. And you can add those anywhere. JOSE UGIA: And so that was like an easy way. Yeah. CRAIG LABENZ: OK. I clicked it. JOSE UGIA: I think it didn't catch it. Now it caught it. But the simulator is gone now from screen. Oh, it's behind the-- CRAIG LABENZ: Oh, yeah, yeah, yeah. JOSE UGIA: --VS Code. CRAIG LABENZ: Oh, it's thinking. JOSE UGIA: Yes. CRAIG LABENZ: Oh-ho-ho. It did not immediately reject our attempt. So great. JOSE UGIA: On a connection that allows us to see all the different colors in the Google spinner. Then yellow again and then green, all of them. Fast connection to the internet. CRAIG LABENZ: I wonder how they picked those colors. [LAUGHS] JOSE UGIA: Can't guess. CRAIG LABENZ: All right. Oh, that's my old address still. App is currently running in a test environment. Transaction will not result in an actual charge. Great. Strongly preferred. JOSE UGIA: Mm-hmm. CRAIG LABENZ: That's a nice-- JOSE UGIA: That's why it's read. CRAIG LABENZ: Nice DX there, yeah. JOSE UGIA: That text was changed two weeks ago. And it's more descriptive now. Hopefully that's the case. CRAIG LABENZ: Nice. OK. And it crashed. [LAUGHS] JOSE UGIA: Wait for it, wait for it. CRAIG LABENZ: All right, let's find exception main. Failure delivering result. Activity. More-- [LAUGHS] JOSE UGIA: I think this is the result of your simulator. Pretty sure. I think you clicked the button twice and too intense. CRAIG LABENZ: OK. JOSE UGIA: We're probably coming back. CRAIG LABENZ: All right. JOSE UGIA: Give it another go. CRAIG LABENZ: In theory, it would cease to accept taps after the first one. [HUMS] Looking at the live-- ah, yes. Julian or "Hulian" says, oof. And I feel you. But maybe 12th time's the charm, as they say. That is what they say, right? OK. I'm going to flick it but one time. JOSE UGIA: [INAUDIBLE] CRAIG LABENZ: I've clicked it. I saw a line appear here. JOSE UGIA: Yep. CRAIG LABENZ: And we switch back and we have a sheet. And it thinks. And it gives us the screen. So we click Continue. But once. And it spins. JOSE UGIA: Very much so. CRAIG LABENZ: I'm not going to lie, I think it's going to crash. JOSE UGIA: I don't think so. CRAIG LABENZ: Because-- JOSE UGIA: Take a bet. CRAIG LABENZ: All right! I bet you-- JOSE UGIA: [INAUDIBLE] CRAIG LABENZ: --this is when it crashed before. After it stopped spinning, it went back to this. [GASPS] I never decided what-- I never said what I was going to bet you, but where did it print? JOSE UGIA: Whatever that was that you were going to bet, it's coming my way. At least you got print. CRAIG LABENZ: I was going to say a drink when I see you next, which will also be the first time we ever see each other. So-- JOSE UGIA: Easy bet. CRAIG LABENZ: It didn't print. But it also didn't crash. JOSE UGIA: Yeah, let's-- we can try debugging to make sure that print is doing the right thing. Print-- JOSE UGIA: Yeah, so-- JOSE UGIA: Apple Pay. No, it's fine. CRAIG LABENZ: Yeah. Same signature, so even though the name isn't the same. Where is print? Here we go. All right. Here we are. Hot restart because anonymous functions don't behave how you might want them to in hot reload all the time, so we've got to be cautious there. All right, I'm going to clear this. Now I'm going to click the button. JOSE UGIA: So the JSON file should be fine. AlphaRadeon, thanks for the tip. If the JSON file is not right, you will get an error back, and this screen that you're seeing right now won't load. CRAIG LABENZ: Yeah, so I did-- JOSE UGIA: Our button is-- CRAIG LABENZ: --switch us to the sample as well. JOSE UGIA: Yeah, so-- CRAIG LABENZ: But good, very good idea. Because we started with the Apple one, so that absolutely would've been an easy thing to forget. OK, we're here again. Continue. Oh, you know what I didn't do was put in a debug statement. I don't think putting a debug here is going to matter. I mean, it's just obviously not getting to this result because we've not even-- even if it was null, if it was empty, we should see a blank line. JOSE UGIA: Mm-hmm. We had a print-- CRAIG LABENZ: So I think it's-- JOSE UGIA: --on it before. CRAIG LABENZ: Right, which was doing the same thing. That was identical functionality. And yeah, same-- nothing. Have you ever seen this, Jose? It doesn't print. JOSE UGIA: No. Well, the callback is not being called. But wait, is the screen gone already on the simulator? CRAIG LABENZ: Sorry, no, it's still-- oh, the sheet is gone, yeah. JOSE UGIA: Yeah, the sheet is gone. Huh, no. CRAIG LABENZ: All right, I'll move this over so they can share the screen. JOSE UGIA: Are we debugging? CRAIG LABENZ: Mm. JOSE UGIA: Oh yeah, we're debugging, right? CRAIG LABENZ: Yeah. Yep, yep, yep. I always run start debugging. So one thing we still didn't do was any setup for Google. So the integration requirements. JOSE UGIA: No, it's not necessary. Oh, print. Ha, is print going to do what we want to do? I'm using all the time debugprint. CRAIG LABENZ: I never use debugprint, but I know it's a thing. So what does debugprint take for us? A string, so this, we'll need to jsonEncode this map. And then we'll have to import convert. So this will be dart/convert. This needs to be a colon. OK, now we have jsonEncode. All right, debugprint. I don't think it's going to make a difference, but I'm willing to test that theory and be proven wrong for the 50th time on national television. All right, I can't tell-- JOSE UGIA: I'm more with you this time. Not betting this time, though. Yeah, I think we'd be much better off with the-- if we could maybe try with a fast simulator. Every single time, it's taking us a little bit. I don't know if that's an option, but maybe that's something we can do. CRAIG LABENZ: Yeah, let's-- I'll just start the download on a good simulator. So also, as everyone can see, I don't do this very much. Oh, Tools. This is where it was, right? Device Manager. So this is where we'd add a new device. So how about a Google-- a Pixel 6, that should do it, huh? JOSE UGIA: Mm-hmm. CRAIG LABENZ: So I'll say Next. API 33, that looks good. Next. Now, I want one with Google Play, Google-- what does it say here? JOSE UGIA: Ah, go to. CRAIG LABENZ: --APIs. JOSE UGIA: Yeah, no, but that's-- it should say-- no, go back. Yeah, I know, I know what the issue is with this. So Pixel 6 doesn't have it. You have to go to one that has the Play Store. Do you see the little icon with the Play in Pixel 4? CRAIG LABENZ: Oh, like this one here, yeah, OK. JOSE UGIA: So that's where you want to. CRAIG LABENZ: I have to go all the way back to Pixel 4? JOSE UGIA: Mm-hmm. CRAIG LABENZ: Interesting. Why do the new ones not have that? JOSE UGIA: And then you see Google Play, right, on the target. On the right side, you see Google Play. CRAIG LABENZ: Hmm. Yep, yep, yep. JOSE UGIA: Yeah, that's a good [INAUDIBLE].. CRAIG LABENZ: So I'm going to need to download-- do I need to download these, it looks like? JOSE UGIA: Yeah, it looks like you don't have it. Which may explain-- might be that the Pixel 3 was running on a non-Google Play services image. No, otherwise the button wouldn't show, I think. CRAIG LABENZ: Well-- [INTERPOSING VOICES] CRAIG LABENZ: Something's not right. JOSE UGIA: Might be that. CRAIG LABENZ: I've killed that. We're going to do the new one. Luckily, it's downloading pretty quickly. Use Pixel 4, Muhammad says. Good eye. You and Jose were vibing. We've got more, more people figuring it out. And then we had, use Pixel money. Let's go with the-- JOSE UGIA: [INAUDIBLE] CRAIG LABENZ: --sticky Shift key. [LAUGHS] JOSE UGIA: Pixel pay your device. CRAIG LABENZ: Yeah, I love it. Pixel pay, Pixel money. OK. It's doing-- checking the existing file, sure. [HUMS] JOSE UGIA: All right, so that's unzipping. Is that actually an M1 that you're running on right now? CRAIG LABENZ: It is. I was just bragging about how well it can multitask and here it is multitasking in front of everyone's very eyes. JOSE UGIA: Oh, it's going back to-- CRAIG LABENZ: And doing an OK job of it. All right, so-- JOSE UGIA: All right, so we can-- CRAIG LABENZ: I appear to also need to download this. JOSE UGIA: No, you can cancel that and use Tiramisu. [INAUDIBLE] CRAIG LABENZ: Oh, it just wasn't clicked. That's right. OK, good, good, good. JOSE UGIA: Yeah, that looks good. CRAIG LABENZ: All right, here we go. We're going to add that it has Google Play, just for my future reference because I will forget. All right. Here we are. JOSE UGIA: For our future videos. You may need to log into that one as well. But let's see if it's faster. Should be faster. CRAIG LABENZ: It seems very likely. Oh, I didn't want to launch it here. This was a terrible mistake. JOSE UGIA: Oh. Mm-hmm. Or you can-- CRAIG LABENZ: Well, I can still sign in here. JOSE UGIA: You can sign in there, yeah. CRAIG LABENZ: All right, full screen. Seems a lot faster. This image is also literally a 10th-- no a 20th the size of my Google 3 image. That was 10 gigabytes. This is 500 megabytes. JOSE UGIA: True. CRAIG LABENZ: I have no idea how-- JOSE UGIA: Oh, I believe that's the side. I think that's probably the external disk, probably. CRAIG LABENZ: Oh, like-- JOSE UGIA: Let's see if the-- CRAIG LABENZ: --the provision to disk. JOSE UGIA: Yeah, that's what I believe. Is this any faster? CRAIG LABENZ: It sure seems faster. JOSE UGIA: Well. Well. CRAIG LABENZ: It's not amazing. If I bought a new phone and it behaved like this, I would be upset. But it's faster than the other one. All right. Account. JOSE UGIA: Yeah, this brings me back to 2014 simulator issues. CRAIG LABENZ: It is also possible that it's all the calls in the streaming and whatnot. JOSE UGIA: That's probable. CRAIG LABENZ: I'll test it again off stream and see if it kind of wakes up. JOSE UGIA: Probably. CRAIG LABENZ: All right, good. Account has no results. JOSE UGIA: Yeah, it will be called differently now in the new settings. This is a different image. Tiramisu. What about-- CRAIG LABENZ: I would expect this to just be at the top and incredibly easy. JOSE UGIA: I think it's Passwords and Accounts, yeah. Yeah, I wonder why it didn't find Accounts if you typed Accounts. Yeah. CRAIG LABENZ: Got Accounts. JOSE UGIA: Accounts. CRAIG LABENZ: [INAUDIBLE] JOSE UGIA: Now here's another opportunity for us to see your password again. CRAIG LABENZ: All right. I'll try to avoid-- JOSE UGIA: Not like [INAUDIBLE] CRAIG LABENZ: [LAUGHS] You can read all my spam email if you log in. You can see all-- my energy company, PG&E, Pacific Gas and Electric, has been sending me, like, three emails a day. And thankfully, they're not like, you didn't pay your bill. I checked to make sure that there was no problem with that. It's just like random nonsense. JOSE UGIA: I see. CRAIG LABENZ: All right. I'm typing values. This isn't very fast. I think if this doesn't work, we should basically cut our losses and just talk philosophically about things and pretend it printed. What do you think about that? JOSE UGIA: Yeah, that sounds good. I think we went anyway the full way through the integration, which is the objective. And it will work fine on normal computers with normal simulators, so don't worry. But I have a feeling that what we were missing is a new device with Google Play services. So I think that one is going to give us a result. CRAIG LABENZ: I'm two-factor-- JOSE UGIA: I'm pretty sure. CRAIG LABENZ: --right now. JOSE UGIA: Android Studio instead of VS Code. Well, Android Studio's, FredWP, pretty much you can develop with whatever you're comfortable with these days, which is very nice, both the Flutter and Android. I personally find useful if you're doing Android-specific things and you have to fiddle with Gradle with a simulator, with some polls, I think an IDE or Android Studio is useful. At the same time, I think there's a good reason to use light, more lightweight IDEs like VS Code or Sublime Text. I personally use it for smaller projects, I use VS Code or Sublime Text. And if I have to do-- if I have to handle a lot of dependencies and deal with Android stuff, then I use Android Studio. But both work. CRAIG LABENZ: So I just signed in and then it took me back to the screen where I would begin signing in. It just didn't work even though it did work. I think we should call it. I don't think me signing in to another emulator and having it choke and think for five seconds on every click is too useful. But yeah, folks saw how to get started and-- oh man, we hoped to get a lot further in this episode than we got. The malfunctioning, basically non-existent-- Uh-oh. Jose, I think you need to plug in your computer. But you probably know that, because it looks like it just turned off. What an amazing bit of-- oh, he's back. Was it your camera or your computer whose battery just struggled? You're muted as well. You might need to juggle your audio inputs. JOSE UGIA: What about now? CRAIG LABENZ: Now we hear you. You look-- JOSE UGIA: So the camera-- CRAIG LABENZ: [INAUDIBLE] JOSE UGIA: --that was 100% charged thought that that was too much as well, so switched off on me. CRAIG LABENZ: It reached zero charge, huh? JOSE UGIA: Right. CRAIG LABENZ: Yeah, I have a-- there's a battery that actually just plugs in. It's like a faux battery-- just kind of provides the physical interface, but otherwise draws power from the wall. And that is a nice thing. All right, well, let's just take some questions here and wrap up a little bit. There's a lot of hard questions we didn't get to and a lot, honestly, a lot of Google Pay things we didn't really get to, unfortunately. JOSE UGIA: A quick comment, maybe, before-- CRAIG LABENZ: What's up? JOSE UGIA: If I may. A quick comment, if I may. And that is that just for you to know that this is really the full integration where we did. So with just the bits that you see right now that Craig implemented, that should be good enough to get you going with integration. So as you can see, it's only a few lines of code. That's for the basic integration. We're thinking or considering doing the Customized one. We didn't get time to get to it this time. Maybe at another time. But just for you to know that if you have a more specific checkout process, you can use that custom path to integrate payments in your app as well. CRAIG LABENZ: Oh. JOSE UGIA: So the question is-- CRAIG LABENZ: Julian says, increase the memory. JOSE UGIA: I think simulators typically come with a good configuration already now. Like, it's been a while since-- I haven't looked at it. So you do that on the Device Manager. So if you go-- if you close this and go to the-- if you close this on the right side, you can see on the right of the simulator, you can see Device Manager. So there you can change the hardware settings if you edit it. CRAIG LABENZ: Oh, this I think really is what we would do. JOSE UGIA: Yeah. Let's see. See Advanced Settings. CRAIG LABENZ: --telling it-- ah, here we go, OK. So internal storage, 2 gigs. Yeah, where is its memory? Oh, RAM, here we go. A gig and a half? That feels like it should be plenty, right? JOSE UGIA: Yeah, should be good enough. CRAIG LABENZ: Good idea, though, for sure. JOSE UGIA: Yep. CRAIG LABENZ: Yeah, this feels all definitely fine. Very odd. All right. Well, good thought for sure. Click on Settings. JOSE UGIA: So-- CRAIG LABENZ: On the right. And you can stick it out in Android Studio. OK, I did want to do this. Settings. JOSE UGIA: Oh, that icon above the pointer. You have it like-- CRAIG LABENZ: Over here? JOSE UGIA: --that one, maybe. CRAIG LABENZ: View Mode. Ah, here we go. Undock or Float? I don't know which one we'll want. Where did it go? Come back! Oh, it just disappeared. I can't find it. JOSE UGIA: Maybe it's on Kristi's screen. CRAIG LABENZ: Android Studio. Oh, wait. All right, let's try again here. View Mode. Let's try Float. Nope. Float is back to what we had. View Mode. Oh, I clicked Float and then it just put it to Dock Pinned. JOSE UGIA: What about Window? There you go. CRAIG LABENZ: Also not what I expected, but OK. [LAUGHS] I think Float was it and it just failed for some reason and had a fallback. JOSE UGIA: It does looks like it. CRAIG LABENZ: Yeah. JOSE UGIA: Varon, you can use Google Pay for free. Yeah, the integration is-- comes at no cost. You can just simply get the API, sign up, and you're good to go. CRAIG LABENZ: Julian, we're in trouble. If you're out of here, we got no chance. [LAUGHS] Have a good one, though. All right. Well, I don't personally run an e-commerce app, but this is absolutely where I would start if I did, especially with the cross-platform opportunities. But yeah, I feel like sometimes with Firebase, obviously we had it a bit with Pay-- whenever you just kind of leave that raw application code layer of your app and you start to integrate with more advanced third parties, especially if they relate to the device, then you can just have quite a bit of setup. And had I anticipated that, I would have gone through it in advance. Unfortunately, I wanted to enter this with a very fresh perspective so I could ask questions on the stream. And then that led to asking questions about how to set up an emulator on the screen. So very exciting. Jose, any last thoughts on your end? JOSE UGIA: What I would like to say is that keep in mind that this is something that we wanted to build for the community as an open source project, just have it-- think of it as your home, really. We have a package page in pub.dev and we have a repo page in GitHub, so again, hopefully it feels like home to you. And we accept-- it's really easy to get set up, to contribute. We have a code of conduct and good practices for the repo that you just can go ahead, take a look, and jump in, if you want to make any contributions. We want this repo to be something that necessarily doesn't necessarily live on Google Pay's end, although we'll keep on contributing and support into it. So yeah, just wanted to call that out. Any thoughts-- CRAIG LABENZ: Do you have a contributing guide? JOSE UGIA: --or ideas are welcome. Go ahead. Yeah. CRAIG LABENZ: Yeah, you do. I'm not seeing it. Am I missing it? JOSE UGIA: If you go to Flutter plugin, so if you go one level up, you're now in Flutter plugin Pay. CRAIG LABENZ: Oh, right, right, right. Google Pay was the org. I was thinking Flutter plugin was the org. That makes no sense. Yeah, yeah. OK, here we go. Great, great, great, great, great. Nice. JOSE UGIA: Yeah. CRAIG LABENZ: Nice. JOSE UGIA: So yeah. Yeah, feel free to come leave your thoughts and code. We'll be happy to help with that-- CRAIG LABENZ: [INAUDIBLE] JOSE UGIA: --and hopefully it's useful. CRAIG LABENZ: Nice, very nice. All right, Jose, thank you so much for joining. Men, when you do stuff live, sometimes you bump into unexpected things, like you have a new machine and haven't set things up. And I'm sorry that I subjected you to that, but you're a real trooper. And I think we covered the basics. We had hoped to cover some stuff beyond the basics, but we didn't get there. But I really appreciate you joining. It's getting into the evening for you in Spain, right? What time is it right now? JOSE UGIA: It's about 7:30 PM, which is a perfect time to livestream with you. CRAIG LABENZ: [LAUGHS] Too kind. Well, it's also maybe a perfect time to have some dinner, so I'm going to release you to that. And folks, this will be our final "Observable Flutter" for the year. Next week on December 29, I'm going to be in space cadet mode and not thinking about the real world. And then we'll be back in January. So I look forward to seeing everyone again. I don't know what the first topic yet is going to be in January, but I'll figure it out, and we'll tease it a bit or just announce it outright-- JOSE UGIA: (WHISPERING) Google Pay. CRAIG LABENZ: --before the episode. Jose's volunteering to return. He wants more of this. Although-- JOSE UGIA: [INAUDIBLE] CRAIG LABENZ: --if you drive, it'll probably go 1,000 times better. So maybe-- all right, folks, until then, happy holidays, happy New Year. We'll see you all in 2023 with your freshly discarded resolutions. JOSE UGIA: Happy days. Thanks for joining. Bye.
Info
Channel: Flutter
Views: 18,412
Rating: undefined out of 5
Keywords: payments in flutter, flutter payments, Observable flutter, what is observable flutter, live coding, code tutorial, coding tutorial, how to code, live code, flutter livestream, flutter stream, flutter latest, flutter updates, what’s new in flutter, flutter tutorial, introduction to flutter, how to use flutter, google stream, google livestream, flutter developer, flutter developers, google developer, google developers, flutter, google, Craig Labenz
Id: WGE4p6y2r_k
Channel Id: undefined
Length: 97min 0sec (5820 seconds)
Published: Fri Dec 23 2022
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.