[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:00.00,0:00:19.13,Default,,0000,0000,0000,,{\i1}music{\i0} Dialogue: 0,0:00:19.13,0:00:23.32,Default,,0000,0000,0000,,Herald: I would like to welcome our first\Nspeaker for the day and he's amazing. His Dialogue: 0,0:00:23.32,0:00:28.36,Default,,0000,0000,0000,,talk which he's been working on all night.\NA warm welcome! Dialogue: 0,0:00:28.36,0:00:32.41,Default,,0000,0000,0000,,{\i1}applause{\i0} Dialogue: 0,0:00:32.41,0:00:38.19,Default,,0000,0000,0000,,Speaker: Yeah good morning. My name is\N'the one with the braid' and today I will Dialogue: 0,0:00:38.19,0:00:46.04,Default,,0000,0000,0000,,give an introduction into Flutter. What is\NFlutter? Flutter is a software development Dialogue: 0,0:00:46.04,0:00:57.70,Default,,0000,0000,0000,,kit for creating cross-platform\Napplications from one single codebase. Dialogue: 0,0:00:57.70,0:01:03.33,Default,,0000,0000,0000,,Here you can see the great logo of\NFlutter. Brief history of Flutter: Flutter Dialogue: 0,0:01:03.33,0:01:13.22,Default,,0000,0000,0000,,was announced by Google in 2015 as a new\Nframework for creating Android Dialogue: 0,0:01:13.22,0:01:26.71,Default,,0000,0000,0000,,applications. It was initially launched in\N2018 and since that it has become one of Dialogue: 0,0:01:26.71,0:01:39.01,Default,,0000,0000,0000,,the most popular cross-platform software\Ndevelopment kits. Getting started with Dialogue: 0,0:01:39.01,0:01:46.62,Default,,0000,0000,0000,,Flutter, well, we will have a look at the\Ninstallation of Flutter, at one of the Dialogue: 0,0:01:46.62,0:01:54.14,Default,,0000,0000,0000,,special features of Flutter called\Nwidgets. There we'll have a look on two Dialogue: 0,0:01:54.14,0:02:00.47,Default,,0000,0000,0000,,different types of widgets called stateful\Nand stateless widgets. And at the end we Dialogue: 0,0:02:00.47,0:02:07.18,Default,,0000,0000,0000,,will have a look at something really\Nstrange in Flutter: Unlike in actually Dialogue: 0,0:02:07.18,0:02:14.28,Default,,0000,0000,0000,,every other software you use for mobile\Ndevelopment you write the design in your Dialogue: 0,0:02:14.28,0:02:25.06,Default,,0000,0000,0000,,code but not in any XML files but directly\Ninto your Flutter code. Installation is Dialogue: 0,0:02:25.06,0:02:34.19,Default,,0000,0000,0000,,quite easy on Linux and Mac OS. You can\Njust clone the git repository from Github, Dialogue: 0,0:02:34.19,0:02:41.45,Default,,0000,0000,0000,,update your PATH and enjoy your new\NFlutter installation. On Windows you need Dialogue: 0,0:02:41.45,0:02:49.23,Default,,0000,0000,0000,,to download pre-built binaries as Windows\Nis unable to execute shell scripts. That's Dialogue: 0,0:02:49.23,0:02:57.67,Default,,0000,0000,0000,,it about the installation. Now we will go\Na bit deeper into the technology Flutter Dialogue: 0,0:02:57.67,0:03:09.54,Default,,0000,0000,0000,,is using. Flutter is written as an\Nextension for the language Dart, that's Dialogue: 0,0:03:09.54,0:03:15.31,Default,,0000,0000,0000,,what you can see over there, it's a\Nframework for the language Dart. And you Dialogue: 0,0:03:15.31,0:03:21.21,Default,,0000,0000,0000,,can actually say the language Dart was\Ndeveloped for Flutter and Flutter was Dialogue: 0,0:03:21.21,0:03:29.23,Default,,0000,0000,0000,,developed for Dart. Actually no one is\Nusing Dart without Flutter yet, so it was Dialogue: 0,0:03:29.23,0:03:38.82,Default,,0000,0000,0000,,made just for Flutter. The language Dart\Nis written in C++ and C and the so-called Dialogue: 0,0:03:38.82,0:03:47.27,Default,,0000,0000,0000,,Flutter engine is written and C++ and C\Ntoo. Why? It's simply because this allows Dialogue: 0,0:03:47.27,0:03:55.10,Default,,0000,0000,0000,,low-level rendering, that means Flutter\Ndoes not need any libraries of the Dialogue: 0,0:03:55.10,0:04:01.09,Default,,0000,0000,0000,,operating system it's executed on. So if\Nyou run an Flutter application on Android Dialogue: 0,0:04:01.09,0:04:06.31,Default,,0000,0000,0000,,you won't need any libraries of Android.\NIf you run it on iOS you won't need any Dialogue: 0,0:04:06.31,0:04:12.27,Default,,0000,0000,0000,,libraries of iOS and if you run it as a\Nwebpage you won't need any JavaScript Dialogue: 0,0:04:12.27,0:04:24.93,Default,,0000,0000,0000,,dependencies. What does the engine provide\Nus? The engine provides actually the basic Dialogue: 0,0:04:24.93,0:04:34.33,Default,,0000,0000,0000,,rendering of the layout, core functions\Nlike I/O access, graphic encoding and Dialogue: 0,0:04:34.33,0:04:43.71,Default,,0000,0000,0000,,decoding, animations, accessibility\Noptions and network of course. It's using Dialogue: 0,0:04:43.71,0:04:55.30,Default,,0000,0000,0000,,the Skia library of Google, it's quite\Nwell known in Android and even for desktop Dialogue: 0,0:04:55.30,0:05:03.44,Default,,0000,0000,0000,,development. That's what the engine does\Nand on top of the engine you will have Dialogue: 0,0:05:03.44,0:05:09.72,Default,,0000,0000,0000,,which is visible, and which is visible is\Ncalled widgets. An application is built Dialogue: 0,0:05:09.72,0:05:19.57,Default,,0000,0000,0000,,out of many widgets. You can just imagine\Nwidgets like HTML tags, you just put them Dialogue: 0,0:05:19.57,0:05:26.07,Default,,0000,0000,0000,,into each other, they have several childs\Nand so on and you get a tree of widgets as Dialogue: 0,0:05:26.07,0:05:35.92,Default,,0000,0000,0000,,you get a DOM tree in JavaScript and HTML.\NThat's how you can imagine of. Whoops, I Dialogue: 0,0:05:35.92,0:05:43.94,Default,,0000,0000,0000,,hate these buttons. Let's have a closer\Nlook at these widgets. As already Dialogue: 0,0:05:43.94,0:05:50.10,Default,,0000,0000,0000,,mentioned at the beginning we have two\Ndifferent kinds of widgets. We have these Dialogue: 0,0:05:50.10,0:06:02.79,Default,,0000,0000,0000,,stateless widgets, they provide no\Nfeedback. For example a simple text or an Dialogue: 0,0:06:02.79,0:06:11.26,Default,,0000,0000,0000,,image or buttons, a ListView, a table,\Nthey could be displayed as stateless Dialogue: 0,0:06:11.26,0:06:19.04,Default,,0000,0000,0000,,widgets. A stateful widget is able to\Nprovide feedback means you can tell a Dialogue: 0,0:06:19.04,0:06:27.20,Default,,0000,0000,0000,,stateful widget "if you press this\Nbutton please do this". That's something Dialogue: 0,0:06:27.20,0:06:33.75,Default,,0000,0000,0000,,you only can do with stateful widgets but\Nnot with a stateless widget. But why do Dialogue: 0,0:06:33.75,0:06:38.22,Default,,0000,0000,0000,,you separate between these stateful and\Nstateless widgets? Couldn't you just make Dialogue: 0,0:06:38.22,0:06:48.15,Default,,0000,0000,0000,,one type of widget ? It's due to better\Nperformance because stateless widget is Dialogue: 0,0:06:48.15,0:06:57.28,Default,,0000,0000,0000,,being rebuilt as soon as its content\Nchanges. For example we create a text Dialogue: 0,0:06:57.28,0:07:05.45,Default,,0000,0000,0000,,containing the variable "hello_world" with\Nthe text "Hello world" and now if we Dialogue: 0,0:07:05.45,0:07:13.22,Default,,0000,0000,0000,,change the variable "hello_world" the\Nwhole widget, this text will be Dialogue: 0,0:07:13.22,0:07:24.51,Default,,0000,0000,0000,,rerendered on the screen. Every stateless\Nwidget will be just re-redenred without Dialogue: 0,0:07:24.51,0:07:30.86,Default,,0000,0000,0000,,being able to be informed about a change\Nof anything. And that's a difference to a Dialogue: 0,0:07:30.86,0:07:38.99,Default,,0000,0000,0000,,stateful widget. A stateful widget is able\Nto say "Okay, I now want to change because Dialogue: 0,0:07:38.99,0:07:45.12,Default,,0000,0000,0000,,a timer was running down, because an event\Noccurred because of I don't know what". Dialogue: 0,0:07:45.12,0:07:56.40,Default,,0000,0000,0000,,And a stateful widget is not being rebuilt\Nby its upper widget, by its super widget Dialogue: 0,0:07:56.40,0:08:05.02,Default,,0000,0000,0000,,and so on. Means a stateful widget will\Nnot be changed if the state of the upper Dialogue: 0,0:08:05.02,0:08:14.49,Default,,0000,0000,0000,,widget changes. That's the difference\Nbetween this stateful and stateless stuff. Dialogue: 0,0:08:14.49,0:08:23.34,Default,,0000,0000,0000,,I do not want to get deeper into the\Ntechnology. Let's just have a look at some Dialogue: 0,0:08:23.34,0:08:29.99,Default,,0000,0000,0000,,shortened source code. If you write an\Napplication for example a mobile Dialogue: 0,0:08:29.99,0:08:38.20,Default,,0000,0000,0000,,application in Flutter it will actually be\Njust this. Okay you will have to implement Dialogue: 0,0:08:38.20,0:08:45.67,Default,,0000,0000,0000,,this homepage but that's actually all you\Nneed. You have the main method in which Dialogue: 0,0:08:45.67,0:08:52.02,Default,,0000,0000,0000,,you call runApp() and there you provide an\Napplication, in this case a Material app. Dialogue: 0,0:08:52.02,0:08:58.65,Default,,0000,0000,0000,,Material means it uses the Material\Ndesign. Material design is a design Dialogue: 0,0:08:58.65,0:09:05.32,Default,,0000,0000,0000,,standard by Google, you know it from\NAndroid but I could tell Cupertino app as Dialogue: 0,0:09:05.32,0:09:12.76,Default,,0000,0000,0000,,well then it would show an iOS like user\Ninterface or I could just create my own Dialogue: 0,0:09:12.76,0:09:21.73,Default,,0000,0000,0000,,style if I want but no one would like it.\NAnd there we provide just the homepage and Dialogue: 0,0:09:21.73,0:09:31.38,Default,,0000,0000,0000,,now we'll have a look at the home page.\NHere you can see a basic class in Dart. Dialogue: 0,0:09:31.38,0:09:38.01,Default,,0000,0000,0000,,Dart is the language for Flutter. You can\Nsee it is a stateless widget, means if the Dialogue: 0,0:09:38.01,0:09:44.98,Default,,0000,0000,0000,,app opens it will be built, if the app\Ncloses, it will be moved to trash. If - I Dialogue: 0,0:09:44.98,0:09:51.23,Default,,0000,0000,0000,,don't know what - if the system decides:\Nokay better we say if I don't know what, Dialogue: 0,0:09:51.23,0:09:56.72,Default,,0000,0000,0000,,we reduce network traffic, so the\Nstateless widget cannot react, it will Dialogue: 0,0:09:56.72,0:10:03.80,Default,,0000,0000,0000,,just get the information from the\Napplication and the operating system. Dialogue: 0,0:10:03.80,0:10:15.66,Default,,0000,0000,0000,,Yeah. We here... the most important in any\Nwidget in Flutter is the build method the Dialogue: 0,0:10:15.66,0:10:21.62,Default,,0000,0000,0000,,build-method contains everything which is\Ndisplayed on the screen. In our case we Dialogue: 0,0:10:21.62,0:10:30.86,Default,,0000,0000,0000,,will display a ListTile, means one\Nelement of an ListView containing some Dialogue: 0,0:10:30.86,0:10:41.56,Default,,0000,0000,0000,,text and a button which will share any\Ntext if you press it. But that's not the Dialogue: 0,0:10:41.56,0:10:47.96,Default,,0000,0000,0000,,interesting part. Important is this build\Nmethod which tells okay this widget, my Dialogue: 0,0:10:47.96,0:10:58.94,Default,,0000,0000,0000,,widget TestScoreDetail should look like\Nthis on the screen. Here again, this is Dialogue: 0,0:10:58.94,0:11:04.99,Default,,0000,0000,0000,,everything which is finally displayed on\Nthe screen, everything which is within Dialogue: 0,0:11:04.99,0:11:15.04,Default,,0000,0000,0000,,this build method. That was a stateless\Nwidget, a stateful widget is a bit more Dialogue: 0,0:11:15.04,0:11:24.32,Default,,0000,0000,0000,,complicated. You can see over there,\Nthere's not written just Dialogue: 0,0:11:24.32,0:11:31.30,Default,,0000,0000,0000,,JoinTestScoreTile, but\NJoinTestScoreTileState, means this is the Dialogue: 0,0:11:31.30,0:11:39.14,Default,,0000,0000,0000,,class containing the state and the state\Noffers different - you could sort, you Dialogue: 0,0:11:39.14,0:11:47.62,Default,,0000,0000,0000,,could call them stages. First of all, the\Ninit state, in our case we do not modify Dialogue: 0,0:11:47.62,0:11:51.99,Default,,0000,0000,0000,,anything, it does not need to be\Ninitialized, that's why we just call the Dialogue: 0,0:11:51.99,0:11:59.84,Default,,0000,0000,0000,,super init state method but what you could\Ndo an init state for example who would be Dialogue: 0,0:11:59.84,0:12:06.18,Default,,0000,0000,0000,,loading something from network, if my\Nwidget should display - I don't know - Dialogue: 0,0:12:06.18,0:12:13.66,Default,,0000,0000,0000,,data from Wikidata and you would place the\Ncode for loading this data in the init Dialogue: 0,0:12:13.66,0:12:25.15,Default,,0000,0000,0000,,state method. This is being executed\Nbefore the widget is built the first time. Dialogue: 0,0:12:25.15,0:12:34.62,Default,,0000,0000,0000,,Here you can see the build-method again\Nand here I highlighted why we need a Dialogue: 0,0:12:34.62,0:12:42.66,Default,,0000,0000,0000,,stateful widget in this case. You can see\Nhere, it's an if-statement, a short and Dialogue: 0,0:12:42.66,0:12:51.29,Default,,0000,0000,0000,,inline if-statement. When you build the\Nwidget, it checks whether the variable Dialogue: 0,0:12:51.29,0:12:58.84,Default,,0000,0000,0000,,testLoaded is true, testLoaded is\Ninitially false so the first time the Dialogue: 0,0:12:58.84,0:13:04.02,Default,,0000,0000,0000,,widget will be opened, it will skip down\Nthere and it will show an progress Dialogue: 0,0:13:04.02,0:13:11.57,Default,,0000,0000,0000,,indicator, means a spinning circle in the\Ncenter. And as soon as this should ever Dialogue: 0,0:13:11.57,0:13:21.24,Default,,0000,0000,0000,,change, it will as soon as this variable\Nwill get true, it will show this part and Dialogue: 0,0:13:21.24,0:13:32.45,Default,,0000,0000,0000,,that's why we need a stateful widget,\Nbecause the widget has to react on Dialogue: 0,0:13:32.45,0:13:44.51,Default,,0000,0000,0000,,variables within the class. Over there,\Njust at the beginning of the Dialogue: 0,0:13:44.51,0:13:52.35,Default,,0000,0000,0000,,implementation of this class, you can see\Nsome variables initialized at the Dialogue: 0,0:13:52.35,0:13:59.16,Default,,0000,0000,0000,,beginning. These are variables which are\Navailable within the class. It's just like Dialogue: 0,0:13:59.16,0:14:14.03,Default,,0000,0000,0000,,you can see the use, it's the only use in\Nthis case over there. And again, as it's a Dialogue: 0,0:14:14.03,0:14:21.13,Default,,0000,0000,0000,,widget, everything which is provided by\Nthe build, by the whole build method is Dialogue: 0,0:14:21.13,0:14:27.39,Default,,0000,0000,0000,,what the widgets, what the widget looks\Nlike. So in the first case it will be this Dialogue: 0,0:14:27.39,0:14:38.05,Default,,0000,0000,0000,,and afterwards it will be this. And now one\Nmore property of a stateful widget: Here Dialogue: 0,0:14:38.05,0:14:47.86,Default,,0000,0000,0000,,we return an expansion tile, you can\Nimagine like a part of a list which is Dialogue: 0,0:14:47.86,0:14:52.65,Default,,0000,0000,0000,,expandable with an arrow button and if you\Npress it will show some more detailed Dialogue: 0,0:14:52.65,0:15:02.90,Default,,0000,0000,0000,,information and there we set a listener on\Nthe change of its expansion and as soon as Dialogue: 0,0:15:02.90,0:15:11.14,Default,,0000,0000,0000,,it will be expanded, the first time, we\Nwill just execute this function loadScore Dialogue: 0,0:15:11.14,0:15:20.59,Default,,0000,0000,0000,,and maybe the loadScore function would be\Nthe function changing this boolean to true Dialogue: 0,0:15:20.59,0:15:26.40,Default,,0000,0000,0000,,and as soon as it will be changed to true\Nwe have our widget providing the Dialogue: 0,0:15:26.40,0:15:36.91,Default,,0000,0000,0000,,information within there. That's the main\Ndifference to a stateful to a stateless Dialogue: 0,0:15:36.91,0:15:48.39,Default,,0000,0000,0000,,widget. Now just a little compared to\Nother cross-platform frameworks you maybe Dialogue: 0,0:15:48.39,0:15:55.67,Default,,0000,0000,0000,,know. I will compare it with JavaScript\Nframeworks like React and Electron. Okay, Dialogue: 0,0:15:55.67,0:16:02.78,Default,,0000,0000,0000,,if you have a JavaScript mobile\Napplication, you usually load in webview, Dialogue: 0,0:16:02.78,0:16:09.59,Default,,0000,0000,0000,,consuming about 200 megabytes RAM. This is\Nugly for a mobile device, because no Dialogue: 0,0:16:09.59,0:16:14.47,Default,,0000,0000,0000,,mobile device wants to provide 200\Nmegabyte RAM for five applications, Dialogue: 0,0:16:14.47,0:16:23.20,Default,,0000,0000,0000,,because not every mobile device has that\Nmuch RAM. That's how JavaScript works Dialogue: 0,0:16:23.20,0:16:28.76,Default,,0000,0000,0000,,because you need a web viewer and webview\Nneeds all this stuff, webview needs a Dialogue: 0,0:16:28.76,0:16:33.56,Default,,0000,0000,0000,,JavaScript engine, style engine and so on.\NThat's different in Flutter, because Dialogue: 0,0:16:33.56,0:16:40.15,Default,,0000,0000,0000,,Flutter code is being compiled to native\Ncode. Means if I compile this application Dialogue: 0,0:16:40.15,0:16:47.14,Default,,0000,0000,0000,,for Android, the code will be compiled to\NKotlin code which is then executed. Means Dialogue: 0,0:16:47.14,0:16:56.59,Default,,0000,0000,0000,,no need for JavaScript, no need for virtual\Nmachines or anything like that. That's Dialogue: 0,0:16:56.59,0:17:04.28,Default,,0000,0000,0000,,why the consumption of memory is much\Nlower. The next point is its native look Dialogue: 0,0:17:04.28,0:17:11.54,Default,,0000,0000,0000,,and feel. If you, for example, if you\Nwrite an app in JavaScript you have the Dialogue: 0,0:17:11.54,0:17:17.04,Default,,0000,0000,0000,,problem that its JavaScript and not the\Nnative design of the platform. If I write Dialogue: 0,0:17:17.04,0:17:25.46,Default,,0000,0000,0000,,an Android app in Flutter, I can just tell\Nthe app: Ok, you should, you shall now Dialogue: 0,0:17:25.46,0:17:29.68,Default,,0000,0000,0000,,look like an Android app, provide material\Ndesign, provide buttons which look like Dialogue: 0,0:17:29.68,0:17:35.60,Default,,0000,0000,0000,,Android buttons, provide a navigation\Ndrawer like an Android application and so Dialogue: 0,0:17:35.60,0:17:42.00,Default,,0000,0000,0000,,on. That's actually almost impossible with\NJavaScript but in flutter it's actually Dialogue: 0,0:17:42.00,0:17:50.35,Default,,0000,0000,0000,,the standard. Then this, there I will come\Nto one of the problems of Flutter: It's Dialogue: 0,0:17:50.35,0:17:57.73,Default,,0000,0000,0000,,the same layout on all platforms. Means if\NI tell my application: Okay, you shall Dialogue: 0,0:17:57.73,0:18:02.79,Default,,0000,0000,0000,,look like an Android application, it will\Neven look like an Android application if I Dialogue: 0,0:18:02.79,0:18:10.25,Default,,0000,0000,0000,,compile it for a Linux desktop or for iOS.\NMeans you as developer have to decide Dialogue: 0,0:18:10.25,0:18:16.25,Default,,0000,0000,0000,,which layout will be used and this layout\Nwill be used or this design will be used Dialogue: 0,0:18:16.25,0:18:24.73,Default,,0000,0000,0000,,on every platform you deploy the app to.\NOf course, you can use some styling stuff Dialogue: 0,0:18:24.73,0:18:33.18,Default,,0000,0000,0000,,within the app to make it more like a\Nnative designed platform application for Dialogue: 0,0:18:33.18,0:18:39.07,Default,,0000,0000,0000,,your platform and no loss of performance\Nis what I just explained at the beginning Dialogue: 0,0:18:39.07,0:18:49.54,Default,,0000,0000,0000,,as native app. I hope I could, I was able\Nto introduce some bit of the idea of Dialogue: 0,0:18:49.54,0:18:57.49,Default,,0000,0000,0000,,Flutter, I would just now start like to\Nstart an Q&A about Flutter, about what it Dialogue: 0,0:18:57.49,0:19:05.89,Default,,0000,0000,0000,,is able, what you can do with Flutter and\Nwhat you cannot do with Flutter. Thank you Dialogue: 0,0:19:05.89,0:19:08.13,Default,,0000,0000,0000,,for your attention. Dialogue: 0,0:19:08.13,0:19:18.49,Default,,0000,0000,0000,,{\i1}applause{\i0} Dialogue: 0,0:19:18.49,0:19:24.97,Default,,0000,0000,0000,,I don't know, shall I moderate? I would\Njust ... oh, ok well then you can just Dialogue: 0,0:19:24.97,0:19:28.44,Default,,0000,0000,0000,,ask.\NQ: You said that is compiled to native Dialogue: 0,0:19:28.44,0:19:35.07,Default,,0000,0000,0000,,code and then afterwards we need a\Ndifferent tool change for each OS. Dialogue: 0,0:19:35.07,0:19:40.35,Default,,0000,0000,0000,,Do we have some experience, what is the\Neffort, what do we have to do to, let's say Dialogue: 0,0:19:40.35,0:19:43.59,Default,,0000,0000,0000,,run it in {\i1}incomprehensible{\i0} Dialogue: 0,0:19:43.59,0:19:48.35,Default,,0000,0000,0000,,A: Well, you actually, the question was\Nwhether, Dialogue: 0,0:19:48.35,0:19:54.25,Default,,0000,0000,0000,,what you have to do for running or for\Nproviding one app at four different Dialogue: 0,0:19:54.25,0:19:58.03,Default,,0000,0000,0000,,platforms. Well, everything you have to do\Nis running Flutter build and name of the Dialogue: 0,0:19:58.03,0:20:04.94,Default,,0000,0000,0000,,platform. So if you decide to deploy it to\NiOS, Android, Linux and Mac OS you can Dialogue: 0,0:20:04.94,0:20:15.15,Default,,0000,0000,0000,,just execute "flutter build apk" for\NAndroid, afterwards "flutter build ios" Dialogue: 0,0:20:15.15,0:20:22.02,Default,,0000,0000,0000,,for iOS, "flutter build linux" for Linux\Nand "flutter build macos" for Mac OS. So Dialogue: 0,0:20:22.02,0:20:29.84,Default,,0000,0000,0000,,you actually do not have to go deeper into\Nthe single platforms. Flutter provides Dialogue: 0,0:20:29.84,0:20:39.21,Default,,0000,0000,0000,,everything you need there. Did I answer\Nyour question? Dialogue: 0,0:20:39.21,0:20:48.68,Default,,0000,0000,0000,,Q: {\i1}(incomprehensible){\i0}\NA: Yeah, it will install it automatically, Dialogue: 0,0:20:48.68,0:20:54.12,Default,,0000,0000,0000,,if you download it, if you download\NFlutter and you execute it the first time, Dialogue: 0,0:20:54.12,0:20:59.93,Default,,0000,0000,0000,,it will ask you to install this and this\Nand this, the Android tool chain, the iOS Dialogue: 0,0:20:59.93,0:21:16.84,Default,,0000,0000,0000,,Xcode tool chain and whatever you need to.\NQ: I have a question. At the main function Dialogue: 0,0:21:16.84,0:21:23.61,Default,,0000,0000,0000,,you just have to define your style and the\Nhome page right. So what is hindering me Dialogue: 0,0:21:23.61,0:21:29.46,Default,,0000,0000,0000,,to say: Release a version for Android to\Nthe Android style then just change the Dialogue: 0,0:21:29.46,0:21:33.44,Default,,0000,0000,0000,,style for something that looks more iOS\Nand then release a different version for Dialogue: 0,0:21:33.44,0:21:37.27,Default,,0000,0000,0000,,iOS?\NA: Yes, sure you can do it and Flutter Dialogue: 0,0:21:37.27,0:21:47.44,Default,,0000,0000,0000,,even offers a parameter of material app,\Nyou can provide their theme data class and Dialogue: 0,0:21:47.44,0:21:54.91,Default,,0000,0000,0000,,within this theme data class you could\Ntell the application: OK, on iOS I should Dialogue: 0,0:21:54.91,0:21:59.12,Default,,0000,0000,0000,,behave and look like this and on\NAndroid I should behave and look like Dialogue: 0,0:21:59.12,0:22:03.62,Default,,0000,0000,0000,,this. So even offers native\Nfunctionalities for this. Dialogue: 0,0:22:03.62,0:22:12.16,Default,,0000,0000,0000,,Q: Thank you for this nice talk. Who has\Ndeveloped Flutter and how it is protected Dialogue: 0,0:22:12.16,0:22:20.24,Default,,0000,0000,0000,,by being bought by Oracle.\NA: I don't think Oracle will buy Flutter, Dialogue: 0,0:22:20.24,0:22:27.12,Default,,0000,0000,0000,,because it's developed by Google and I'm\Nquite sure Google won't sell it. And as Dialogue: 0,0:22:27.12,0:22:33.75,Default,,0000,0000,0000,,its open-source, it will remain open\Nsource. I'm not sure about license, it was Dialogue: 0,0:22:33.75,0:22:47.15,Default,,0000,0000,0000,,I guess it was Apache or MIT license. So\Nit won't become closed-source software Dialogue: 0,0:22:47.15,0:22:52.33,Default,,0000,0000,0000,,tomorrow.\NQ: Hi and thanks again for the talk. What Dialogue: 0,0:22:52.33,0:22:57.37,Default,,0000,0000,0000,,I would actually know, is the performance\Nof all native components, I mean like all Dialogue: 0,0:22:57.37,0:23:08.80,Default,,0000,0000,0000,,native code the same on all platforms?\NA: Yes-No because some functions are not Dialogue: 0,0:23:08.80,0:23:14.89,Default,,0000,0000,0000,,available on every platform. For example,\Nif I run the application on the web, you Dialogue: 0,0:23:14.89,0:23:20.92,Default,,0000,0000,0000,,won't be able to save local files or open\Nlocal files, because that's not what a Dialogue: 0,0:23:20.92,0:23:28.22,Default,,0000,0000,0000,,website should do or just can do. But\Nyeah, on the mobile platforms actually Dialogue: 0,0:23:28.22,0:23:31.22,Default,,0000,0000,0000,,everything is the same, on the desktop\Nplatforms everything is the same and in Dialogue: 0,0:23:31.22,0:23:38.10,Default,,0000,0000,0000,,the web, it's a bit different.\NQ: Hi thanks for the talk. What about Dialogue: 0,0:23:38.10,0:23:43.73,Default,,0000,0000,0000,,capabilities like Bluetooth Low Energy. Is\Nthere any restrictions or something like Dialogue: 0,0:23:43.73,0:23:51.34,Default,,0000,0000,0000,,that to get deep into the platform?\NA: Well, Flutter provides access to Dialogue: 0,0:23:51.34,0:23:57.55,Default,,0000,0000,0000,,Bluetooth. The only restrictions you may\Nhave is from your platform, but even if Dialogue: 0,0:23:57.55,0:24:04.42,Default,,0000,0000,0000,,you want to use a feature which is not\Nimplemented in Flutter, you can access Dialogue: 0,0:24:04.42,0:24:09.72,Default,,0000,0000,0000,,native code. So from flutter you can just\Ncall Swift code on iOS and Kotlin code for Dialogue: 0,0:24:09.72,0:24:15.46,Default,,0000,0000,0000,,Android and so on, if anything is not\Nimplemented in Flutter. Dialogue: 0,0:24:15.46,0:24:20.71,Default,,0000,0000,0000,,Q: Hey I was a little bit late, in the\Ntalk you maybe already talked about this, Dialogue: 0,0:24:20.71,0:24:25.84,Default,,0000,0000,0000,,but what kind of projects did you make\Nwith Flutter and did you think that Dialogue: 0,0:24:25.84,0:24:29.02,Default,,0000,0000,0000,,Flutter was a good fit for these projects\Nor not? Dialogue: 0,0:24:29.02,0:24:35.05,Default,,0000,0000,0000,,A: Well what I do with flutter is actually\Neverything running on mobile devices, Dialogue: 0,0:24:35.05,0:24:42.29,Default,,0000,0000,0000,,because I'm not such a huge fan of the\Nnative programming languages of iOS and Dialogue: 0,0:24:42.29,0:24:49.85,Default,,0000,0000,0000,,Android. I don't like Java and I don't\Nlike Swift, that's why I got used to Dialogue: 0,0:24:49.85,0:24:57.86,Default,,0000,0000,0000,,Flutter. And yeah, I think it's actually\Nvery good for this, because you only write Dialogue: 0,0:24:57.86,0:25:05.21,Default,,0000,0000,0000,,code once and then you can deploy to all\Nthe mobile platforms. Applications I Dialogue: 0,0:25:05.21,0:25:13.35,Default,,0000,0000,0000,,developed were mostly JugendHackt\Nprojects, projects of youth hackathons, of Dialogue: 0,0:25:13.35,0:25:22.27,Default,,0000,0000,0000,,the open knowledge foundations.\NOther questions? Dialogue: 0,0:25:25.87,0:25:31.59,Default,,0000,0000,0000,,Q: Hello. All the widgets are emulated and\Nnot native widgets of the operating Dialogue: 0,0:25:31.59,0:25:41.97,Default,,0000,0000,0000,,system, of iOS or Android?\NA: It's not emulated nor if you use the Dialogue: 0,0:25:41.97,0:25:48.69,Default,,0000,0000,0000,,native design, it's the native design.\NFlutter provides its totally own graphics Dialogue: 0,0:25:48.69,0:25:54.67,Default,,0000,0000,0000,,library, so even if you use Cupertino\Ndesign on iOS, it's not the Cupertino Dialogue: 0,0:25:54.67,0:26:00.63,Default,,0000,0000,0000,,design from iOS but the Cupertino designed\Nfrom Flutter. So independent of the Dialogue: 0,0:26:00.63,0:26:04.35,Default,,0000,0000,0000,,platform, it offers its own graphics\Nlibrary. Dialogue: 0,0:26:04.35,0:26:09.65,Default,,0000,0000,0000,,Q: So you lose the integration with\Naccessibility features from the operating Dialogue: 0,0:26:09.65,0:26:14.88,Default,,0000,0000,0000,,system?\NA: No that's what I told on this slide: Dialogue: 0,0:26:14.88,0:26:22.07,Default,,0000,0000,0000,,The engine, the low-level engine provides\Na accessibility component, for example, Dialogue: 0,0:26:22.07,0:26:26.86,Default,,0000,0000,0000,,and, yeah, pipes them to the native\Nplatform. Dialogue: 0,0:26:29.52,0:26:35.55,Default,,0000,0000,0000,,Q: So what's the main advantage compared\Nto other frameworks like Qt? Dialogue: 0,0:26:35.55,0:26:43.34,Default,,0000,0000,0000,,A: Better performance, I would just say\Nand many more platforms, because most of Dialogue: 0,0:26:43.34,0:26:48.63,Default,,0000,0000,0000,,the frameworks are just - they are usually\Njust available for mobile platforms. Dialogue: 0,0:26:48.63,0:26:53.87,Default,,0000,0000,0000,,Electron focus on, for example, for\Ndesktop platforms and flutter provides Dialogue: 0,0:26:53.87,0:27:00.07,Default,,0000,0000,0000,,them all and just from one single codebase\Nand its native code you execute. Dialogue: 0,0:27:00.07,0:27:05.64,Default,,0000,0000,0000,,Q: Have you ever worked with background\Nservices, native background services on a Dialogue: 0,0:27:05.64,0:27:10.67,Default,,0000,0000,0000,,platform? Like Android service?\NA: Yeah, Flutter provides background Dialogue: 0,0:27:10.67,0:27:17.93,Default,,0000,0000,0000,,services and if you use them, it will just\Nsubscribe the native background services Dialogue: 0,0:27:17.93,0:27:20.94,Default,,0000,0000,0000,,of the platform you're using. Dialogue: 0,0:27:29.53,0:27:31.41,Default,,0000,0000,0000,,Q: What's the current state of IDE Dialogue: 0,0:27:31.41,0:27:37.14,Default,,0000,0000,0000,,integration because with other frameworks\NI had problems that the IDEs I use are Dialogue: 0,0:27:37.14,0:27:44.27,Default,,0000,0000,0000,,mostly the ones from JetBrains and those\Ndidn't work with all frameworks I tried. Dialogue: 0,0:27:44.27,0:27:52.59,Default,,0000,0000,0000,,A: Flutter offers official support to\NAndroid Studio and Visual Studio Code, but Dialogue: 0,0:27:52.59,0:28:00.77,Default,,0000,0000,0000,,for many other IDEs there are third-party\Nplug-ins with language support for Dart Dialogue: 0,0:28:00.77,0:28:15.61,Default,,0000,0000,0000,,and Flutter.\NQ: Are there any restrictions on how far Dialogue: 0,0:28:15.61,0:28:27.49,Default,,0000,0000,0000,,you can make your app ready for, for\Nexample provisioning profiles on iOS to Dialogue: 0,0:28:27.49,0:28:36.64,Default,,0000,0000,0000,,get ready to in the store or is it just\Nraw building for that platform and Dialogue: 0,0:28:36.64,0:28:42.87,Default,,0000,0000,0000,,everything else if you want to get it in\Nthe store or you have to go native? Dialogue: 0,0:28:42.87,0:28:54.55,Default,,0000,0000,0000,,A: No, I never had a problem with that. I\Npublished three apps for iOS. iOS has most Dialogue: 0,0:28:54.55,0:28:59.56,Default,,0000,0000,0000,,restrictions and I never had any problem,\Nbecause the design of flutter follows all Dialogue: 0,0:28:59.56,0:29:05.74,Default,,0000,0000,0000,,the guidelines and they pay attention on\Nfollowing the guidelines of the maintainer Dialogue: 0,0:29:05.74,0:29:10.45,Default,,0000,0000,0000,,of the stores of all the platforms they\Nsupport. Dialogue: 0,0:29:13.68,0:29:21.95,Default,,0000,0000,0000,,Q: The person there asked about IDE. I\Nunderstood IE and that's a good point - Dialogue: 0,0:29:21.95,0:29:29.92,Default,,0000,0000,0000,,web platform: How the Microsoft browsers\Nare supported as they are used heavily in Dialogue: 0,0:29:29.92,0:29:34.99,Default,,0000,0000,0000,,big environments.\NA: Sorry what was, what should I say? Dialogue: 0,0:29:34.99,0:29:40.95,Default,,0000,0000,0000,,Q: My question is how Flutter supports the\NMicrosoft browsers, even if we don't want Dialogue: 0,0:29:40.95,0:29:47.00,Default,,0000,0000,0000,,use them all but we need do somehow.\NA: According to the README of Flutter Web Dialogue: 0,0:29:47.00,0:29:54.35,Default,,0000,0000,0000,,repository, there's no support for\Nbrowsers by Microsoft and I even tried Dialogue: 0,0:29:54.35,0:30:00.95,Default,,0000,0000,0000,,once, you will see an empty screen in\NInternet Explorer and on Microsoft Edge Dialogue: 0,0:30:00.95,0:30:07.13,Default,,0000,0000,0000,,you will get many crashes. But this will\Nchange in January as Microsoft will start Dialogue: 0,0:30:07.13,0:30:13.70,Default,,0000,0000,0000,,rolling out the chromium based Microsoft\Nedge to all Windows 10 devices and even Dialogue: 0,0:30:13.70,0:30:21.34,Default,,0000,0000,0000,,older Windows devices. So that's\Nsomething, I say I don't care about . Dialogue: 0,0:30:21.34,0:30:23.85,Default,,0000,0000,0000,,{\i1}Music{\i0} Dialogue: 0,0:30:23.85,0:30:49.00,Default,,0000,0000,0000,,Subtitles created by c3subtitles.de\Nin the year 2021. Join, and help us!