My Final Flutter Video

Theo - t3โ€คgg
16 Aug 202314:25

Summary

TLDRThe speaker discusses the appropriate use of technologies like Flutter, React Native, and game engines for app development. They argue that understanding the nature of the application and its requirements is crucial. Flutter is criticized for its lack of native platform integration, leading to a subpar user experience. React Native, with its strong native bindings and community support, is praised for more complex applications. The speaker emphasizes the importance of choosing the right tool for the job to ensure the best outcome for users and developers.

Takeaways

  • ๐ŸŒŸ Flutter is often misunderstood, with people not fully grasping what it is, what problems it solves, and what an application truly is.
  • ๐Ÿ“Š A spectrum is proposed to categorize applications based on their need for native features and the level of animation and interactivity.
  • ๐ŸŽฎ Video game engines like Unity are best suited for highly animated and interactive applications, whereas simple, static applications may not require such engines.
  • ๐Ÿช Applications like Pokemon Go straddle the line, being both highly animated and requiring numerous native features like GPS and push notifications.
  • ๐Ÿ” The 'game engine line' is introduced as a threshold where an application's animation justifies the use of a game engine for optimal experience.
  • ๐Ÿ’ก Flutter is likened to a web browser or game engine for apps, aiming to provide a cross-platform solution but often sacrificing native performance and integration.
  • ๐Ÿ“ธ Flutter's approach to handling native features involves baking screenshots and stills of iOS elements into the app bundle, leading to an 'uncanny valley' experience.
  • ๐ŸŽจ Flutter's sweet spot is identified as being ideal for applications that focus on animations and have minimal interaction, such as animation platforms.
  • ๐Ÿ“ฑ For applications requiring more complex native features or better suited for a native experience, React Native or native development is recommended over Flutter.
  • ๐Ÿ“ฑ React Native, paired with Expo's packages, offers a powerful solution for building multi-platform mobile applications with strong native integrations.
  • ๐Ÿš€ Code push and over-the-air updates are highlighted as significant advantages of React Native, allowing for quick bug fixes and feature updates without App Store constraints.

Q & A

  • What is the main issue with using Flutter for applications that require native features?

    -The main issue is that Flutter avoids using native components as much as possible. Instead, it uses screenshots and stills of native features, which can result in an uncanny valley experience where the app feels almost, but not quite, native. This can lead to poor user experience and performance issues, such as incorrect scroll behavior, because Flutter doesn't fully integrate with the native platform's decades of development.

  • What is the 'game engine line' in the context of the spectrum described?

    -The 'game engine line' is a conceptual boundary on the spectrum that separates applications that benefit from using a game engine like Unity for their animation and interactive needs from those that would be better served by sticking to native platform features and rendering. It indicates the point at which an application's requirements for animation and interactivity are significant enough to justify using a game engine.

  • Why is React Native a better choice for certain applications compared to Flutter?

    -React Native is a better choice for applications that require complex native features or tighter integration with the platform because it provides a stronger binding layer with native code. It also benefits from a large ecosystem of packages that simplify native development, making it easier to access native features and SDKs without having to write everything from scratch.

  • What are some advantages of using React Native with Expo?

    -Expo provides a collection of native bindings for React Native that simplify development. These include Expo Font for loading third-party fonts, Expo FileSystem for direct file system access, and Expo Dev Menu for development tools. Expo also facilitates over-the-air updates and code push, allowing for quick deployment of bug fixes and small changes without going through the App Store review process.

  • How does the speaker view the use of Flutter for building e-commerce apps?

    -The speaker discourages the use of Flutter for e-commerce apps, arguing that it can hurt the users, the engineers, and the business itself. This is because Flutter's approach to not using native components can lead to a subpar user experience and performance issues, which are critical for the success of e-commerce applications.

  • What is the speaker's main criticism of Flutter's approach to native features?

    -The speaker criticizes Flutter's approach to native features because it does not fully utilize the native platform's capabilities. Instead, Flutter recreates its own versions of native components, which can result in an inferior user experience and performance. The speaker argues that this is particularly problematic for new developers who may be misled into thinking that Flutter is a suitable choice for all types of applications.

  • What is the 'sweet spot' for using Flutter according to the speaker?

    -The speaker identifies a 'sweet spot' for using Flutter as being in the area of applications that are not quite games but have defining characteristics in their animation frameworks. For apps that focus on performant animations with minimal interactions, Flutter can make sense because it provides a way to build and render animations across different platforms effectively.

  • Why does the speaker argue that React Native is a powerful solution for mobile development?

    -The speaker argues that React Native is powerful because it allows for the development of applications with complex functionality that requires native features. It provides a strong binding layer with native code and a large ecosystem of packages, making it easier to access native features and SDKs. Additionally, features like code push and over-the-air updates give developers the ability to quickly deploy fixes and updates without going through the App Store, which is a significant advantage.

  • What is the speaker's view on the state of iOS support in Flutter?

    -The speaker believes that the state of iOS support in Flutter is currently poor, citing issues with the animation layer since iOS moved to the Metal engine. The speaker mentions that there are unresolved issues that have been ongoing since the transition, indicating a lack of maturity or robustness in Flutter's iOS support.

  • What does the speaker suggest is a better approach for developers choosing a technology stack?

    -The speaker suggests that developers should be more responsible and thoughtful in their choice of technology stack. They should consider the specific requirements of their application and the user experience, rather than simply choosing a technology because it is popular or the one they are most familiar with. The speaker encourages developers to understand the strengths and weaknesses of each platform and to make informed decisions based on the needs of their project.

  • What is the speaker's opinion on the Flutter community's understanding of its platform's limitations?

    -The speaker feels that the Flutter community, particularly its most vocal members, often fail to acknowledge or understand the limitations of the platform. They argue that these developers tend to focus on the advantages of Flutter while downplaying or ignoring the significant drawbacks, especially when it comes to the user experience and performance on non-native platforms.

Outlines

00:00

๐Ÿค” Understanding the Role of Flutter in App Development

This paragraph discusses the misconceptions around using Flutter for app development, emphasizing the need to understand what Flutter is, its purpose, and the nature of applications. It introduces a spectrum ranging from non-native to native features, using Pokemon Go as an example to illustrate where different types of applications fall on this spectrum. The speaker argues that while Flutter has its place, it's not suitable for all types of applications, especially those requiring significant native features.

05:00

๐ŸŽฎ The Game Engine Line and Flutter's Position

The speaker defines the 'game engine line,' a threshold where an application's need for animation justifies using a game engine like Unity. They contrast this with native platforms and Flutter, which avoids native controls and instead uses its own rendering and logic. The paragraph highlights the limitations of Flutter in providing native experiences, such as push notifications or platform-specific behaviors, and suggests that for certain types of applications, like animation-focused ones, Flutter might be a suitable choice.

10:02

๐Ÿšซ Criticisms of Flutter and the Case for React Native

The speaker criticizes the use of Flutter for applications that do not fit its strengths, such as e-commerce apps, and argues that it can lead to a subpar user experience. They praise React Native for its ability to provide a stronger connection to native features and its active community, which offers a wealth of packages to simplify development. The speaker also discusses the benefits of code push and over-the-air updates in React Native, which allow for more flexibility and less reliance on app store approval processes.

Mindmap

Keywords

๐Ÿ’กFlutter

Flutter is described in the video as a framework that enables the development of applications by using a single codebase to deploy on both iOS and Android platforms. Unlike traditional native development, Flutter tries to avoid calling native code as much as possible, instead opting to recreate native functionalities within its own environment. This approach can lead to a dissonance between the app's behavior and native platform expectations, notably in aspects like animations or the 'uncanny valley' experience with native features mimicry. The speaker argues that Flutter is best suited for applications where animations are a defining characteristic, rather than applications requiring deep integration with native features.

๐Ÿ’กReact Native

React Native is presented as a cross-platform development framework that allows developers to build mobile apps using JavaScript and React, while still leveraging native components for rendering. This means that React Native apps can access and utilize native platform features more directly compared to Flutter, leading to a more native-like user experience. The speaker highlights React Native's strength in its ecosystem, including the vast number of packages available for integrating with native functionalities, and its ability to update applications over-the-air without going through the app store's approval process.

๐Ÿ’กGame Engines

Game engines such as Unity or Unreal Engine are mentioned in the context of developing highly interactive and animated applications, like video games. These engines provide the tools and capabilities to create complex animations and graphics-intensive experiences. The speaker draws a line, the 'game engine line', to delineate when it makes sense to use game engines over app development frameworks based on the level of animation and interactivity required by the application.

๐Ÿ’กNative Features

Native features refer to the capabilities provided by a mobile platform or device, such as camera access, push notifications, and accelerometer data. The speaker discusses how the necessity of these features influences the choice of development platform, arguing that applications requiring extensive use of native features are better suited to traditional native development or frameworks like React Native that allow for closer integration with the device's hardware and software.

๐Ÿ’กAnimation

Animation is a central theme in the video, particularly in the context of choosing the appropriate development platform. The speaker suggests that applications with a heavy focus on animation might benefit from using Flutter or a game engine, depending on the complexity and nature of the animations. Flutter is seen as suitable for applications where animations are the defining feature but do not require complex interactivity like a full-fledged video game.

๐Ÿ’กNative Integration

Native integration refers to the ability of an application to utilize the native functionalities and UI components of the platform it runs on. The video contrasts Flutter's approach of recreating these elements within its own framework to React Native's strategy of leveraging actual native components, which can lead to a more authentic and performant user experience. The speaker argues that applications requiring deep native integration should avoid Flutter in favor of more native-aligned solutions.

๐Ÿ’กCross-Platform Development

Cross-platform development is the practice of building software applications that can run on multiple operating systems from a single codebase. Both Flutter and React Native are highlighted as cross-platform frameworks, but the speaker criticizes Flutter for its handling of native features and suggests React Native as a superior option due to its ability to integrate more seamlessly with native components and offer a native-like user experience.

๐Ÿ’กE-commerce Apps

E-commerce apps are mentioned as an example of applications that generally do not require the extensive animations or game-like interactivity that might justify the use of Flutter or game engines. The speaker argues that developers of e-commerce apps should prioritize native platforms or frameworks like React Native for better performance and user experience, illustrating the broader point that the choice of development platform should be guided by the specific needs and characteristics of the application.

๐Ÿ’กUncanny Valley

The term 'uncanny valley' is used to describe the discomfort or eeriness people feel when encountering an almost, but not quite, lifelike representation of a human or in this case, UI components. The speaker uses it to critique Flutter's approach of mimicking native UI elements, which can lead to experiences that feel slightly off compared to truly native applications. This concept underscores the importance of choosing the right framework based on how closely an app needs to integrate with and mimic native platform behaviors.

๐Ÿ’กExpo

Expo is mentioned as an open-source platform for making universal native apps for Android, iOS, and the web with JavaScript and React. It's highlighted for its rich set of libraries that simplify access to native functionalities for React Native applications. The speaker praises Expo for its contribution to the React Native ecosystem, particularly for enabling developers to leverage native features more easily and for facilitating the over-the-air updates of apps, showcasing the advantages of React Native for cross-platform development.

Highlights

The speaker discusses the misconceptions about using Flutter for app development and emphasizes understanding what problems it solves.

A spectrum is introduced to categorize applications based on their need for native features versus their level of animation and interactivity.

The speaker argues that for apps requiring minimal native features, like a checkout for an Amazon grocery app, using a game engine or Flutter may not be necessary.

The concept of the 'game engine line' is introduced, which delineates when an application's animation needs are best served by a game engine like Unity.

Pokemon Go is used as an example of an app that is both highly animated and requires many native features, necessitating a balance between game engine and native platform usage.

Flutter is described as a 'game engine for apps' that avoids rendering native components, leading to an 'uncanny valley' experience for users.

The speaker identifies a 'sweet spot' for Flutter where its animation capabilities are most useful for certain types of applications, like those focused on graphics and minimal interactions.

React Native is positioned as a strong alternative to Flutter, offering better integration with native platforms and a large ecosystem of packages.

The speaker criticizes Flutter for its lack of native platform integration, which can lead to subpar user experiences and technical limitations.

The potential use of Flutter for animation libraries is acknowledged as a valid application of the technology.

The speaker advocates for responsible technology selection, cautioning against choosing a technology just because it's popular without considering its suitability for the project.

The limitations of Flutter for iOS development are discussed, including issues with the animation layer and the technology's maturity.

React Native's ability to push code updates directly to users without going through app stores is highlighted as a significant advantage.

The speaker expresses frustration with the Flutter community's lack of acknowledgment of the technology's limitations and their insistence on its superiority.

A call for more responsible discussions around technology choices is made, urging developers to consider the impact of their decisions on users and the community.

The speaker shares a positive experience with a member of the Flutter community who recognizes the technology's current state and potential improvements.

The video concludes with an invitation for the Flutter community to provide insights and counterarguments to the points made.

Transcripts

play00:00

you triggered me

play00:04

people keep asking me about building

play00:05

apps in video game engines I said I

play00:07

wouldn't talk about flutter anymore but

play00:09

I want to put this one down for good

play00:11

stop writing your apps and game engines

play00:13

let's talk about what I mean here and

play00:15

think through what an app even is

play00:16

because I feel like most of the time

play00:18

people talk about flutter they're

play00:19

failing to understand what flutter is

play00:21

what problems it solves and what an

play00:23

application even is in the first place

play00:24

I'm trying to Define this as a spectrum

play00:26

the way I think about this is left to

play00:28

right here we have doesn't need native

play00:30

stuff and on the right we have does the

play00:31

native stuff think cameras

play00:33

accelerometers push notifications all

play00:35

the native features that your phone or

play00:37

whatever platform offers to the

play00:38

developer so if you're just making a

play00:40

checkout for your Amazon grocery app if

play00:43

I don't need many of these native

play00:43

features if any at all but if you are

play00:45

making a camera app or an AR app

play00:47

probably need a lot more of these

play00:49

features from bottom to top we have the

play00:52

video game Spectrum where on the bottom

play00:54

here it's no animation everything's

play00:55

static but on the top here everything is

play00:57

animated you're writing custom animation

play00:59

Logic for individual details to make a

play01:02

really good interactive experience

play01:03

probably video game one interesting

play01:05

project that to start with the project

play01:06

yeah every application can be put

play01:08

somewhere on this chart if we take

play01:10

something like Pokemon go for example

play01:12

it's an interesting spot because Pokemon

play01:13

go is very animated interactive it's a

play01:16

literal video game but it also needs a

play01:18

lot of native stuff because it has so

play01:20

many Native features built in like using

play01:22

the accelerometer for figuring out what

play01:25

Pokemon you're looking at all the fancy

play01:26

AR stuff the GPS stuff the push

play01:28

notifications there's a lot going on in

play01:30

Pokemon go that is native

play01:32

characteristics that are necessary for

play01:33

the application to be a good experience

play01:35

as such there's a lot of work that has

play01:37

to be done for the developers to build

play01:38

good Integrations with that native layer

play01:40

but they also have to build in a game

play01:42

engine if they want the animations and

play01:44

overall experience to be good at all as

play01:46

such I'm going to define a line here to

play01:48

make it a little easier to reason about

play01:49

these things I'm going to call this the

play01:51

game engine Line This is the line where

play01:53

the thing you're making is animated

play01:54

enough that using an engine like Unity

play01:56

makes sense there's between something

play01:58

like unity in a native platform like

play02:00

kotlin or Swift or even react native

play02:02

itself use the native Primitives that

play02:04

the phone or whatever device is already

play02:05

providing Apple provides a button in iOS

play02:08

that handles all the accessibility all

play02:09

of the screen reading stuff all of the

play02:11

weird behaviors and touchability from

play02:13

different ways you can use an iPhone app

play02:15

and their buttons are pretty good I know

play02:16

I click them all the time every day

play02:18

Apple's button primitive is probably

play02:19

something we should use when we're

play02:21

building a phone app that has buttons

play02:23

and interactive features but if we're

play02:25

mostly focused on the environment itself

play02:27

the animated 3D experience then Apple's

play02:30

stuff doesn't help us a whole lot we

play02:32

don't get much benefit from Apple having

play02:34

a really good screen readable button if

play02:36

I need to render that button on a sign

play02:37

in a 3D world that I can walk up to and

play02:39

click and that difference of the

play02:42

platform and the the place the user

play02:43

experience lives being fundamentally

play02:45

different from the platform Apple built

play02:47

that is where game engines come in they

play02:49

say screw all of your native stuff we're

play02:51

not using any of that we're going to use

play02:52

the processor though and we're going to

play02:53

build our own rendering layer our own

play02:56

engine for making things appear and

play02:58

disappear it means it takes longer for

play02:59

these things to spin up but it also

play03:01

means you can do much more just why a

play03:02

game like fortnite could never be

play03:04

written in react native or native code

play03:06

and it's why unity and Unreal Engine

play03:08

have found the success they found by

play03:10

being a really good way for any

play03:12

developer to build a video game

play03:13

experience in an engine that could run

play03:15

against many different platforms

play03:17

somebody thought that was a good idea

play03:18

for applications and this is where

play03:20

flutter gets interesting the thing I

play03:22

feel like many people miss about flutter

play03:24

is that it's not a native platform react

play03:26

native renders native button it renders

play03:28

a native video player if you're under a

play03:30

video player it renders native things

play03:31

and calls native code flutter avoids

play03:34

doing that as much as it possibly can

play03:36

flutter is kind of like a web browser or

play03:38

game engine for your apps which means if

play03:41

you want one of those little toast

play03:42

notifications like the pop-up that iOS

play03:43

gives you that says hey are you sure

play03:45

about this yes or no flutter can't let

play03:47

you do that so instead of giving you an

play03:49

actual iOS feature they literally take

play03:50

screenshots and stills of all of the

play03:53

different iOS features and bake them

play03:54

into the app bundle so that when you

play03:56

render on iOS it will take that

play03:57

screenshot and overlay text on it and

play03:59

the result is that every flutter app has

play04:01

this terrible uncanny valley experience

play04:04

you you can feel it when you use a

play04:05

flutter app there are lots of simple

play04:07

Silly Ways to check like if you use two

play04:08

fingers to scroll and flutter it Scrolls

play04:11

twice as fast because they didn't

play04:12

Implement their scroll layer correctly

play04:14

just stupid like that it is the

play04:16

defining characteristic of flutter

play04:18

you're throwing away the entire native

play04:20

platform in the Decades of hard work

play04:22

hundreds of thousands of developers have

play04:24

put into improving that native platform

play04:26

because you think your game engine is a

play04:27

better experience so who is flutter

play04:30

actually for I am going to show you guys

play04:32

where I think flutter's sweet spot is I

play04:35

think there's a very thin space in this

play04:38

area here where if the application

play04:40

You're Building isn't quite a game but

play04:43

it's defining characteristics are the

play04:45

animations like an animation framework

play04:47

flutter can make a lot of sense revive

play04:50

is the new animation platform built with

play04:51

the goal of making performant animations

play04:53

easy to build and because they're trying

play04:56

to make an animation layer that runs on

play04:58

every platform for these like cute

play05:00

graphic type animations with minimal

play05:02

interactions flutter makes a lot lot of

play05:04

sense for these types of cute things if

play05:06

you want to add a quick animation to an

play05:08

existing thing funny enough they're not

play05:09

actually using flutter in the runtime

play05:10

that you ship if you use it but they're

play05:12

like a stripped down Dart based

play05:13

alternative that they're working on but

play05:15

their actual editor experience is all

play05:17

based on flutter and I think this is

play05:18

that rare sweet spot where flutter

play05:20

actually makes sense because the

play05:22

defining characteristic of this app

play05:23

isn't the interface it's the interop

play05:26

between the interface and this animation

play05:28

framework I was actually really

play05:29

surprised when I saw this project it

play05:31

shocked me as though like oh wow

play05:32

somebody found a real use for flutter

play05:33

finally but I cannot imagine anything

play05:35

above this line that isn't better suited

play05:37

to use a real game engine and I

play05:40

certainly cannot imagine anything below

play05:41

this line that is better suited to not

play05:43

or that isn't better suited to use

play05:44

something like react native and if we

play05:46

Define this like more split or like here

play05:49

we'll say at this point and I don't want

play05:51

to define the specific features where

play05:53

these lines get crossed but let's say

play05:55

from here at any point past this is web

play05:57

is fine but let's say you have a mobile

play06:00

website it's pretty good it's doing

play06:01

everything you need but now you need

play06:03

push notifications or you have users

play06:06

that specifically have the habit of

play06:07

checking an application you want to

play06:09

quickly build an app for them I don't

play06:11

think rushing to react native and

play06:13

certainly not rushing to flutter is the

play06:14

right call here I think there's a lot of

play06:16

space I'd argue almost to like here

play06:18

where web rappers are fine we can argue

play06:22

where this line goes it's all subjective

play06:24

and I don't really care to argue it the

play06:25

goal of this line is specifically to

play06:27

highlight that there's an area here

play06:29

where you have one or two features that

play06:31

aren't capable that aren't possible from

play06:33

the web that you need to have a good

play06:34

experience for your users I think this

play06:36

sweet spot here especially if you're not

play06:38

going too crazy with the animation stuff

play06:39

like this area here is very compelling

play06:42

for a platform like ionic the benefit of

play06:43

ionic is you get to write a website

play06:45

effectively using react opponents all

play06:47

the stuff you normally do and it is

play06:48

rendering in a web shell but it gives

play06:50

you access to certain native features

play06:51

like push notifications like the camera

play06:53

without leaving the web platform so you

play06:55

still get all your usual CSS all the

play06:57

usual things it's not a native app like

play06:58

anything before this line is really

play07:01

isn't going going to be a native app if

play07:03

it's ideal but at a certain point You're

play07:05

Building enough native stuff that it

play07:06

becomes irresponsible to not make the

play07:08

move thankfully the vast vast majority

play07:11

of what is doable on Native platforms is

play07:14

doable through react native so I'll call

play07:16

this the react native line the goal of

play07:19

this line is to highlight that there's a

play07:21

huge area here where your functionality

play07:22

for your application might be more

play07:24

complex than what I put this the needs

play07:27

of your application might require things

play07:29

that aren't part of ionic's layer or web

play07:31

wrappers let's say you're building an

play07:33

alternative Spotify or apple music

play07:35

listening experience on Native you need

play07:37

to call the native sdks to play those

play07:39

things ionic might have some bindings

play07:40

for that but it's way easier to work

play07:42

with a platform like react native that

play07:44

gives you a much stronger binding layer

play07:46

and also as a community with hundreds

play07:48

upon hundreds of packages that interrupt

play07:50

with those native layers so powerfully

play07:52

one of the biggest things that one of

play07:54

the biggest things I feel like doesn't

play07:55

get enough attention in the react native

play07:58

world is not quite react native it's the

play08:00

insane amount of packages that Expo has

play08:02

published to make reacting native

play08:04

development easier all of these are

play08:06

native bindings to both IOS and Android

play08:07

and often other platforms as well where

play08:10

here like Expo font lets you load

play08:12

third-party fonts in your native app

play08:13

using the native platform Expo file

play08:15

system lets you access the native file

play08:16

system directly Expo Dev menu is more

play08:19

for like Dev stuff Expo crypto lets you

play08:21

do encryption using the native

play08:23

encryption and cryptography layers on

play08:25

both platforms Expo context gives you

play08:26

direct access to contacts these aren't

play08:28

things that are rendering in JavaScript

play08:30

these are very specifically native

play08:33

Bindings that you call in JavaScript and

play08:35

then you use to call things JavaScript

play08:38

isn't used JavaScript isn't used to

play08:40

render things or do things in react

play08:42

native it's used to tell the native

play08:43

Parts what to do so the Expo image

play08:46

picker would tell or the actual image

play08:48

picker for example will tell the native

play08:50

layer hey open the native image picker

play08:52

and then when the native image picker is

play08:53

done picking it sends the JavaScript

play08:55

that says oh hey we have images now we

play08:57

should do something with them we're

play08:58

going to send this to the native render

play09:00

layer to show you the images all react

play09:02

native really does is tells the native

play09:04

layer what to put where it's not that

play09:06

big of an abstraction and more and more

play09:08

calling things from native in react

play09:10

native is getting easier they're doing

play09:11

some really crazy work with the bridge

play09:13

between the two to effectively let you

play09:15

write Swift Code and then call it in

play09:16

JavaScript with almost no latency if you

play09:19

do the same thing in flutter you're

play09:21

going to be Reinventing a lot of the

play09:22

patterns like the equivalent image

play09:24

picker in flutter doesn't use the native

play09:25

image picker it renders its own chaotic

play09:28

like weird flutter thing that is side

play09:30

loading the images that it read from FS

play09:32

to try and render its own alternative

play09:34

view whatever flutter offers UI that is

play09:38

similar to the native platform it is

play09:40

explicitly not using the native platform

play09:41

they are effectively and it says before

play09:43

screenshotting the native features

play09:45

ripping out the identifiable elements

play09:47

and then running text like generation on

play09:49

top to make it look close enough to real

play09:51

it's not a real application platform and

play09:54

it is not a native platform the most

play09:56

insulting thing for me is that the

play09:58

people who complain about react native

play09:59

and chill flutter complain about react

play10:01

native for problems that only exist in

play10:03

flutter flutter is not a native platform

play10:05

people are mad at react native because

play10:07

it's running code that isn't native on

play10:08

the platform so they just abstract the

play10:10

whole platform away entirely makes no

play10:12

sense the fast vast majority of people

play10:14

who regularly shill flutter in my

play10:16

replies and in my community are just

play10:18

doing it because it's the thing they

play10:19

picked and when I ask them to justify it

play10:21

they say well it's cross-platform like

play10:23

okay and one of those platforms barely

play10:25

even works do you know the state of iOS

play10:27

flutter right now do y'all understand

play10:29

how awful the animation layer currently

play10:31

is in flutter for iOS did you see the

play10:34

Jank there are you joking this has been

play10:36

the case since iOS moved to metal as the

play10:39

default engine and the issue for this as

play10:41

far as I know is still open Yep this is

play10:44

still broken and we have been promised a

play10:46

solution now you have to use flutter's

play10:48

engine if you're using flutter if there

play10:49

was a bug like this in react native you

play10:51

can just drop react native and write it

play10:53

in Native and just call the native thing

play10:55

Slaughter makes that nearly impossible

play10:56

because they're so far abstracted from

play10:58

the platform it's Insanity we're not

play11:00

even talking about the website we

play11:01

haven't even talked about code push like

play11:02

two of the biggest features features

play11:04

that make react native powerful which is

play11:06

the interop of mindset between web and

play11:08

mobile and theoretically the entrop of

play11:09

code as well not the biggest fan of

play11:11

react data for web but it's a decent

play11:12

enough solution people have shipped

play11:13

really cool things with it but also when

play11:15

you're trying to actually ship updates

play11:16

to your application the abstraction that

play11:18

react native gives you lets you ship a

play11:20

fresh JavaScript bundle that triggers

play11:22

different native code without having to

play11:24

go through the App Store obviously if

play11:25

you ship new features this way Apple's

play11:27

going to block you but if you use this

play11:28

for bug fixes and small changes they

play11:30

don't matter that much you are no longer

play11:31

blocked by the App Store on every single

play11:34

small thing you need to do for your

play11:35

users and dumb stuff like having a an

play11:37

April Fool's Day theme or like a random

play11:40

like 4th of July type theme or whatever

play11:42

the hell you want to do for a one-off

play11:44

feature you book this event and you want

play11:45

to pin it to the top of your app you can

play11:47

now do that with code push and with

play11:49

over-the-air updates trivially in react

play11:52

native land it is such a huge advantage

play11:54

to just throw away I don't know why you

play11:56

would do it the reason I hate talking

play11:58

about flutter is all of these things are

play12:00

objectively true and every time I argue

play12:02

about flutter somebody picks a random

play12:04

one of these things to get really Huffy

play12:06

about and find some Edge case about and

play12:08

I'm like okay but what about the other

play12:09

two and they say oh no those don't

play12:11

matter we're just talking about this

play12:12

thing all three of these things make

play12:14

flutter basically unusable unless you

play12:16

have very very specific requirements

play12:19

that both aren't affected by these

play12:21

negatives and also benefit from having a

play12:24

game engine that your application runs

play12:26

in realistically speaking if you weren't

play12:28

considering Unity at some point you

play12:30

shouldn't be considering flutter at all

play12:31

and this is what kills me with flutter

play12:34

is people building like e-commerce apps

play12:36

and flutter you're hurting your users

play12:38

you're hurting your engineers you're

play12:39

hurting yourself please stop doing it

play12:41

yeah I just I think react native with

play12:43

Expo is as good as you can get for

play12:45

multi-platform mobile right now it's

play12:46

really hard to beat I've said everything

play12:48

I have had to say about flutter I'm

play12:49

tired of people picking Tech because

play12:51

it's the thing they like and use and

play12:52

they haven't thought through what the

play12:53

impact would be there are times I would

play12:55

use flutter if I was working on an

play12:57

animation library and there are times I

play12:58

would write Swift if I was working on a

play13:00

camera app I feel like the flutter

play13:01

people feel like flutter should be this

play13:02

entire chart and when I challenge them

play13:04

on that they just themselves

play13:06

constantly it is genuinely really really

play13:08

hard to have conversations about flutter

play13:10

because the average flutter Fanboy is a

play13:12

new developer which is probably my least

play13:14

favorite part is the people who are

play13:15

getting hurt the most by flutter are new

play13:16

devs just looking for the first horse to

play13:18

bet on and it really really sucks for

play13:20

them because they're betting on a horse

play13:21

that's effectively gimped from the start

play13:23

it really really sucks and I hope that

play13:25

we can be more responsible as we talk

play13:27

about these Technologies because I just

play13:30

don't think there's much room here and

play13:32

that there's much being built in this

play13:33

space and again to this day I have seen

play13:36

a singular application that fluttermate

play13:37

sounds for but when I talk to flutter

play13:39

Engineers their response is there is no

play13:41

application react native makes sense for

play13:42

as such I think there's a conversation

play13:44

to be had here shout out to Luke the one

play13:46

person from the flutter side that's

play13:48

actually been Pleasant to engage with

play13:49

and recognizes the state of the market

play13:51

and all of these failures it has also

play13:53

been embracing new web platform stuff to

play13:55

take advantage of these cool new tools

play13:56

sadly that is not the experience I've

play13:58

had with most people from the flutter

play13:59

side feel free to prove me wrong in the

play14:00

comments and reply with actual Insight

play14:02

on things I might not be understanding

play14:04

of a flutter as well as where react

play14:06

native makes sense in your flutter

play14:07

mindset but I have a feeling when we

play14:09

scroll down the comment section in this

play14:10

video is going to be a bunch of flutter

play14:11

Fanboys themselves saying I

play14:13

don't understand anything about

play14:14

applications so prove me wrong guys I'd

play14:16

love to see it this was fun as always

play14:17

appreciate each and every one of you

play14:19

even the ones who are here to post

play14:20

because yeah it helps the algorithm

play14:21

thank you guys as always stop putting

play14:23

your apps in game engines peace nerds

Rate This
โ˜…
โ˜…
โ˜…
โ˜…
โ˜…

5.0 / 5 (0 votes)

Related Tags
AppDevelopmentFlutterVsReactGameEnginesCrossPlatformNativeFeaturesAnimationFrameworksTechChoicesDeveloperInsightsMobileOptimizationPlatformCapabilities