wikipaka intro music Hello and welcome to this first talk. Today I'm going to give... into cross platform development using Flutter. What is Flutter? Flutter is a cross platform development kit. Here. Fancy logo you can see over there. OK, we will talk about how to install Flutter. We will talk about the special features of Flutter, hence, widgets, which will have a look on their plugins. We will have a look on two different kinds of these widgets, stateful and stateless widgets. And at the end, we will talk about the main feature, Flutter's part of the code, so you do not have seperate style files or seperate layout files. OK, how would you install Flutter? Well, if you are used to Git, it's actually quite easy. You simply clone their git repository, update the path and you have the flutter tool installed. That installs two things: The library Flutter and the programming language Dart, Dart the programing language you use with Flutter. Of course you could use Dart without Flutter, but Dart is usually used with Flutter and Flutter only works with Dart. OK. Well, if you are not interested in cloning git repositories, if you are not that used to command prompts, you could easily install Flutter using the plugin of your development environment. For example, Visual Studio Code or Android studio so intellij, they offer very user friendly plugins with a quick installation guide for Flutter, automating all these steps. OK, what is Flutter like? If we have a look on Flutter, we talk about different things. We have the framework within Dart, we have the engine and we have platform specific code. Flutter consists of something called the "Flutter tool". That's not listed in the graphic you can see there. That's what you use to create an application. For example, if you type "flutter create mynewapplication" in the command prompt, that's the Flutter tool you use. But as soon as you've done an application, you have this... it works the way the graphic presents it: You have this framework consisting of everything you can see and everything you can do. You have buttons, for example "Material" buttons, these are the two main theme styles, so "Material" is the Android and Chrome OS one and "Cupertino" is the iOS-style user interface. The framework takes also care of the rendering animations, interactions with users. So gestures, if you tap a button or if you move around something on the UI, that's something the framework takes care of. And under the framework, there's the engine. The engine operates everything which is not specific to your application, so the general stuff of Flutter. It takes care of the interaction with the Dart virtual machine. It takes care of platform channels. For example, if you want to access native code, takes care of accessibility, it interacts with the operating system and so on. And beside of those two, there's still the embedder. The embedder is, what is, yeah, typic for one kind of device, for example, or for one platform, for example, for Android. The embedder takes care of threads of process management, takes care of the event loop of the operating system, and it takes care of interaction with native plugins. And most importantly, it's responsible for packing the application. For example, if you have raw Dart code, no device would be able to execute it. So the embedder is responsible for hacking this code into an executable on Windows, into a JavaScript file on the Web or into an APK file on Android. OK, well, now I already introduced these widgets, I talked about Material and Cupertino widgets, but what is a widget? Yeah, a widget is pretty much everything you can see in a flutter app. A widget is any user interface element, sometimes allowing interaction, sometimes not. But everything you can see in an application is called widget. You can imagine a widget like, for example, HTML elements. You simply put them into each other and create a document tree. But unlike if you use HTML, you do not have HTML for the layout, CSS for the style and JavaScript for the interaction. If you have Flutter, these widgets provide all these three parts. So the widget performs the layout, the widget offers style and offers interaction with the user. Hence you do not have any separation between style and content of the application. That's a very good feature for development and makes many things such as refactoring code. But there are different types of Stateless widgets without any kind of feedback they can provide. They are once rendered and afterwards they are present. Or if the parenting widget decides, well, I no longer want to show this, for example, text, that is just being removed without any interaction of this widget. Another point are stateful widgets, they allow interaction. So for example, if you have a text as a stateful widget, it can tell - it is able to tell the application after a couple of seconds: OK, now I want to change my own color or I want to change my font size, so it has an own event loop and can decide based on things happening inside this widget. That's usually a bit, yeah... not these low level widgets like text, but all these high level widgets like list views consisting of several children and so on, menus, they consist of a menu button and drop down menu and whatever, or even the whole page of an application. All these are widgets, stateful widgets. OK, time to provide some code samples. That was a bit of introduction into the architecture. Let's have a look on code. Well, congratulations. That's a simple Flutter program. If you write it and you provide a declaration of homepage, you should be able to run an application on your mobile phone. Yeah. What does it? It executes the main function, calling a method call, calling a function called runApp, which runs a Material app. So following the Material design you know from Android or Chrome OS. OK, but of course, we need to implement homepage. Well, let's have a look at a bit more difficult widget. silence ...tell the widget everything it needs to know for building, in our case, we simply return a list type, consisting of an icon and an outline button. The outline button can do anything. It can share a text. So you would see your share prompt on your mobile phone or on the web it would download the text. OK. But why is it stateless and not stateful? Simply because it cannot interact with itself, the widget is unable to change one of its variables, the widget cannot set a timer, it simply could not... if you would tell the widget, well, wait five seconds and do whatever, it would not change the appearance of the widget, because it is once built and afterwards, it has no more... it no longer has the ability to change its appearance or behavior. Only the parenting widget - so, for example, the list we put this scoredetail inside - it could trigger a rebuild of this widget, but not the widget itself. To clarify this point, we'll have a look at a stateful widget. It is a bit shorter, because the stateful widget consists of two classes, state class, that's what you can see over there. And, well, the actual declaration that it is a widget. But the state is much more interesting if we look at it. OK, you first see there are... we first initialized some variables. Afterwards, we have a method called initState. That's something which is being triggered the first time the widget is built, afterwards we declare another method. And at the end we have our build-method. Yeah, what does or what's the difference from this build-method to the build-method we had in our stateless widget... I hope you can see my pointer, yeah. We have here, we have an if statement here, a short if statement. So the build method checks whether a variable called testLoaded - that's being declared at the top here - whether it is false or true. And it correspondingly reacts. So if it's true, a list view is being displayed and otherwhise a progressindicator is being shown. OK, but well, that's something we could still implement in a stateless widget, but there's another big difference here. We have something which changes something as soon as something happens. Well make some things. It's an expansion tile, so a list tile which can be expanded. It's a builtin widget of Flutter. And as soon as it is being opened, it's... a local method is triggered: Here we have this loadScore method and that is being triggered. We do not know what it does, but I can tell you, it will load some data from wheresoever and it will change this variable. So afterwards, after this method is being triggered, the test data here will be something different. It will no longer show the progress, but it will show this inside a single widget without any communication, without any external stuff, without any JavaScript, getElementById or something like that. The widget simply decides on its own behavior. That's very comfortable, believe me. OK, now we already talked a bit on JavaScript, it's somehow different. Well, Flutter is often being compared to JavaScript using React native and Electron. So what's the difference? Well, let's first look on JavaScript. You write an application in JavaScript, you actually have JavaScript and JavaScript is a Web language. Hence, you need a web view or something similar to render anything of your app. That means it consumes an immense amount of memory and CPU power because, well, if you ever used chromium or Firefox on the low-end device, you know that JavaScript can be, well, quite painful. Well, there are highend mobile devices. But if you develop an app, you should always keep in mind that there are mobile devices with much less power and less than two gigabyte of RAM. OK. And if you have Flutter in opposite, you create a native app and you have native code which is being executed beside the Dart virtual machine with almost the same look and feel, you know, from your platform. If you have JavaScript and opposite, you usually have a fancy design you made, which is actually good for web development. But it's usually not exactly the design packed from a mobile device. There are very strict guidelines. If you ask Apple or if you ever published an app to the App Store, you know, there are very strict guidelines at Apple. And at Google there are guidelines as well, but they're not that strict. But if you use Flutter, you automatically obey these guidelines and produce apps with a native look and feel. And another advantage of Flutter, it's more an advantage in comparison to native native apps, you have the same data and the same code on the same on all your platforms. Yeah, because if you write native applications, well, you have two code bases and the applications behaves differently on all platforms. And if you have Flutter, you have one code base for all your platforms and obviously it behaves the same way on all platforms. That's much easier for your users if she should ever change their device. Yeah, and the major point I already mentioned at the first point, there is almost no loss of performance. Yeah. So Flutter is actually a very good framework for creating apps for Android, IOS, desktops such as Windows, Mac OS or Linux, Free BSD is unfortunately not supported - or even webpages. OK. Yeah. And at that point, I want to thank you for your the attention of this talk. Feel free to attend my next talk on Flutter. Tomorrow I will give an advanced view on cross-platform development using Flutter. We will focus on animations and the way Flutter works under the hood. Now there should be an online Q&A. Thank you for your attention! Herald: Hello, this was the lecture by the one with the braid about Flutter and we are now switching to a small Q&A session here. There has been exactly one question in the IRC. You can ask questions by the hashtag rC3Wikipaka and in the rC3Wikipaka IRC channel on hackint. There's been one question, which is: What is the main feature of Flutter, which lets me decide for it instead of, for example, react native? Could you answer that question? (incomprehensible) Herald: The one with the braid, we've got problems with your sound. We can't receive you via ninja, only via our backchannel. (incomprehensible) Herald: And now they're gone. The one with the braid: Can you hear me again? Herald: Here we are again. Herald: Yeah, we can hear you now. The one with the braid: OK, perfect. Well, the question was, what could convince someone to use Flutter? I would say the main advantage, the principal advantage of Flutter is the performance and the native-like applications you get. If you use Flutter, you get native design of the operating system you run on and you have no lack of performance. That's the main difference to JavaScript, for example. So you act native. Herald: Would you consider yourself to be a flutter fan or aficionado? The one with the braid: Oh, yeah, I'm a huge fan of Flutter. Herald: OK, we can tell that. You do have other talks about Flutter in the coming days, don't you? The one with the braid: Yes, tomorrow at 12 o'clock, there is a second talk on Flutter - advanced cross-platform development using Flutter. We will focus on Animations and on the way the engine, so the underlying engine of Flutter works. Herald: Alright, there's been another question in the meantime here, again by hanswurst10. React native also gives you native components and design, etc. Isn't that true? The one with the braid: Yeah, it's true. But well, I would call the Flutter components more native. They are built 100 percent according to the style-guidelines of the operating systems. If you use Material patterns, they are 100 percent Material. So as you know them from your Android phone, for example. And I noticed in react native, you sometimes have issues... not issues, but some components do not properly look exactly the way they should look, and they often do not look the way the users expect them to look. Herald: Alright, thanks for the answers to the questions, there have been some more detailed questions as a follow up on the IRC, but I've posted in the IRC a link where you can all join into for a little BigBlueButton session, where you can go into more detail exchange. The one with the braid, thank you so much for your input. This has been the first broadcast of the day and of RC3, and we will continue to follow up with a little break and continue our program at Sixteen Hundred Central European Time. Thank you. The one with the braid: OK, see you. Herald: Bye bye. wikipaka outro music Subtitles created by c3subtitles.de in the year 2021. Join, and help us!