I'm going to be the moron here and say that you should totally try Flutter, which is another cross-platform app framework, but it uses Dart instead of JS and avoids several of the pitfalls mentioned here (in particular, it compiles Dart to native code, so there's no odd platform behavior differences).
Not knowing what Flutter was...
> Flutter is Google's mobile UI framework for crafting high-quality native interfaces on iOS and Android in record time. Flutter works with existing code, is used by developers and organizations around the world, and is free and open source. Learn more at https://flutter.io
looks promising!
> I only care about how well it conserves battery life.
That's equivalent to caring about performance. The more work a CPU is doing, the faster it's draining battery.
> So that would mean native compilation with a strong async ecosystem.
I'm on the Dart team. Our native compilation story isn't quite there yet, but we're working very hard on it. We have a type system now that gives you many more of the static guarantees you need for good native compilation.
Dart's concurrency story has always been based around asynchrony. Futures and streams are part of the core library, and yield, async, and await are in the language itself.
> the best experience I've had making a complex dynamic GUI was with React, which is purely(ish) functional.
Yeah you might have to do some extra work. Flutter does has packages https://flutter.io/using-packages/ which can be private or published to the Pub package repository https://pub.dartlang.org/flutter/packages
> is there anything that traditional static-typed languages can still do that JavaScript can't?
You get better tooling with types. You can auto-complete more, you get more meaningful call-tips, simple errors are immediately caught, breaking changes in APIs are identified right away, and so on. It makes working on larger projects much easier.
If you want that kind of thing with JavaScript, you can use TypeScript instead.
If you're primarily interested in mobile stuff, you should also take a look at Kotlin and Flutter.
Flutter PM here. It's not my place to make claims on this front, but we'd love you to give it a try, obviously. We've released our second beta so far and are now in the stabilization phase. Some resources that might be helpful for you:
Drop me a DM if there's anything we can do to help you on that front.
It's used by AdWords and Greentea (the latter is an internal tool): https://flutter.io/showcase/
Google is also using it with Fuchsia: https://www.google.de/amp/s/9to5google.com/2018/03/02/fuchsia-friday-first-fuchsia-app/amp/
It does indeed sound like a good solution for your app. There are libraries for local database (sqlite) and of course Firebase. The flutter_blue BLE library is very good with lots of support for Android and iOS.
https://pub.dartlang.org/packages/sqflite https://pub.dartlang.org/packages/flutter_blue
I'd check out the usage of flutter_blue because it'll probably be better than wrapping your old BLE code with Platform Channels. But if you want to try you can read more info here: https://flutter.io/platform-channels/
The article mentioned previously is just using Bluetooth as an example of where platform code and work is needed, normally by the developer (unless a library exists) Which in this instance it does.
If you want more help and advise there is a Gitter and Discord chats.
Slightly off topic, but I hope the devs are aware of Google's Flutter https://flutter.io/
There is a very good chance Google will be pushing Fuchsia OS instead of Android in the next two to three years and Flutter development is cross platform between the two OSes.
Stolen from another comment of mine:
There are 61 people with google.com addresses (65 if you also include chromium.org addresses, as I believe most of those are also Google employees) who have committed to the Magenta repository, which is just the core kernel. 22 of them have done so in the past week.
I've checked out a number of the more active repositories on https://fuchsia.googlesource.com/ (excluding third party repos), and combined, have counted 98 contributors with google.com or chromium.org email addresses, 45 within the past week, 63 within the past month. That's not a small project.
And that's not counting Flutter, which is the cross-platform mobile UI toolkit that seems to also be the native UI toolkit for Fuchsia; it's not Fuchsia specific, but it seems like a large part of the story for writing applications on Fuchsia. If you add that in, you get a total of 162 unique contributors. If you check how many contributions they have, 73 have more than 50 contributions, or 69 in just pure Fuchsia projects without counting Flutter.
And remember, so far we're only counting committers. Add in project managers, QA, and so on, and this is a pretty big effort from Google.
Swift has a larger ecosystem than Dart, and mobile developers already use it. If there was a framework that could make code portable from iOS to Android (think something like Xamarin) they could attract iOS developers.
Swift is also open-source now and can run on the desktop on OS X, most flavours of Linux, and now thanks to the new Ubuntu subsystem for Windows 10, it runs on Windows 10 (previous versions of Windows are out of luck), so it's by no means limited to mobile devs.
Also there's already a Dart stack in development for portable iOS and Android apps called Flutter. It's still very early stages and not at all ready for live apps though.
If you want to test your "Apple" style on Android emulator it's good to force the platform in the Theme.
new MaterialApp(
theme: new ThemeData(
primarySwatch: Colors.blue,
platform: TargetPlatform.iOS,
),
);
Check out: * https://flutter.io/widgets/cupertino/ * https://pub.dartlang.org/packages/flutter_cupertino_settings
One of the cool Flutter features is the stateful hot reloading for dev builds, which is possible due to Dart's VM. If that's important in a Kotlin Flutter then you would need a new/updated VM for dev builds.
Some tidbits
"Hot Reload works by injecting updated source code files into the running Dart VM (Virtual Machine). This includes not only adding new classes, but also adding methods and fields to existing classes, and changing existing functions." https://flutter.io/faq/#how-is-hot-reload-different-from-full-restart
In Fuchsia the current UI layer is Flutter, the Xi editor is written in Rust with a Flutter UI. https://github.com/fuchsia-mirror/third_party-xi-editor
I don't know if Kotlin has Flutter's sub second Hot Reload feature, for dev builds, they got by going with Dart. For production Flutter builds, the Dart code is compiled to native Arm code.
"Hot reload works by injecting updated source code files into the running Dart Virtual Machine (VM)"
Google uses Dart for their own products. Here's what can be found on Dart lang's page:
>For example, the next generation of AdWords (Google’s foremost money-making app) runs on Dart.
There's already an SDK in Alpha called Flutter for Android/iOS cross platform development that uses Dart. Here's their explanation for the choice: https://flutter.io/faq/#why-did-flutter-choose-to-use-dart
Hey congowarrior, i'll try and answer some of these!
Firstly, so you can see what we built in RN (we use some native components that we wrote ourselves and that are open source but the majority is RN): https://itunes.apple.com/us/app/bunch-group-video-chat-games/id1294869021?mt=8
This has been in production for 6+ months now thousands of monthly users. So I would say it is ready for production :p I show people it and they are surprised it's not native. It's smoother than a lot of other native apps I used (we do have some issues though, but I believe they can be solved)
So as much as I love RN, I think it's a pretty poorly maintained software. In the last year or so I have been using it it has gotten better but still: updates will introduce random bugs and the issues will be ignored until enough people complain. Some days things just won't seem to build and then suddenly it will work (use yarn). There may be times you need to drop down to native depending on what you are doing - that is a bit hard but once you do it once it's fine. Those are some that come to mind, I am sure there are more. Airbnb has a long blog post where they talk about moving off of RN after a few years so maybe check that out too!
I love RN. I've been in the JS world for awhile so it feels like home vs Swift etc. I love instantly being able to see my changes, redux, the way you build UIs with React. Especially if you are a startup in the experimentation and exploration phase proving out ideas it's great to let you iterate super quickly.
What do you mean by this point? Depending on what you are doing you could stay completely in RN land.
Another thing you could look into is https://flutter.io/. I have heard some great things, it's a different architecture (and language), but still worth evaluating I would say.
Apparently that's something that they want to add in the future:
https://flutter.io/faq/#can-i-build-3d-opengl-apps-with-flutter
As you pointed out there are lots of cross-platform options. If cross-platform is a requirement then evaluate them, otherwise just go straight Android and pick either Java or Kotlin, but know that Java experience will help significantly with the latter.
It's completely reasonable in the modem age, imo. I'm fully self taught, running a startup, and just hired another self taught programmer whos doing great so far.
It'll be a lot of work, and time, but that sounds like it's not a big issue for you. There's tons of free tutorials on getting started in app development out there, and with services like firebase, you don't need to know web development to make a connected app.
The best first step would be to pick iOS or Android to start with. Learning the basics of native app development is important, whether you want to end up using something like Flutter or stick to fully native apps for each platform. The easiest deciding factor is, do you have a Mac and iPhone? You can only do iOS development on a Mac, and you'll need and iPhone to test on, the simulator is a bit lacking.
The best place to start is just building something though. Find a tutorial for the platform you want to try first, and just follow it. Install Android studio or Xcode, and see what you can figure out.
Since most people on here are not actually React Native developers, this link isn't very useful. This is more interesting for Android developers:
https://flutter.io/flutter-for-android/
Still not sold on Flutter though.
From the flutter FAQ says "out-of-the-box access to some platform-specific services and APIs" check what's in https://pub.dartlang.org/flutter/packages https://flutter.io/faq/#can-i-access-platform-services-and-apis-like-sensors-and-local-storage
Platform support - Android Jelly Bean, v16, 4.1.x or newer, and iOS 8 or newer. Mobile hardware: 64-bit iOS devices and ARM Android devices https://flutter.io/faq/#what-devices-and-os-versions-does-flutter-run-on
There are 61 people with google.com addresses (65 if you also include chromium.org addresses, as I believe most of those are also Google employees) who have committed to the Magenta repository, which is just the core kernel. 22 of them have done so in the past week.
I've checked out a number of the more active repositories on https://fuchsia.googlesource.com/ (excluding third party repos), and combined, have counted 98 contributors with google.com or chromium.org email addresses, 45 within the past week, 63 within the past month. That's not a small project.
And that's not counting Flutter, which is the cross-platform mobile UI toolkit that seems to also be the native UI toolkit for Fuchsia; it's not Fuchsia specific, but it seems like a large part of the story for writing applications on Fuchsia. If you add that in, you get a total of 162 unique contributors. If you check how many contributions they have, 73 have more than 50 contributions, or 69 in just pure Fuchsia projects without counting Flutter.
And remember, so far we're only counting committers. Add in project managers, QA, and so on, and this is a pretty big effort from Google.
A good place to start is with the 'Get Started' section on the flutter.io web site. The docs and tutorials on there are pretty good - so download the software and take it for a spin! :)
Productivity > Native Android and iOS (because native Android is a lot of lots of complications (a lot of unneeded classes and abstractions), while native iOS has manual memory management, threading and other error prone things (errors = more work))
Hot reloading = more productivity
Single threaded = less to no bugs and beginner friendly, the most thing to convince your manager is that you don't need an engineer, you can teach even a kid to use Flutter.
Performance > React Native (but still less than native iOS apps)
Also you can tell him you need less developers, you don't need a dedicated Android and iOS developers.
You can tell him that the upcoming Fucshia operating system by Google has Flutter as its only UI SDK (till now), and that Fucshia could replace Android in the not very far future.
Tell him that a lot of modern concepts are emphasized in Flutter, like single-threadedness, Reactive Functional Programming, Immutability, Asynchronous I/O, etc...
If you are already using React Native till him React Native = JavaScript = you give your end-user your code as it is, and the performance is not high like Flutter
​
Tell him that it is backed by Google, it is not a hobby project, and it is gaining a lot of focus from Google now, see the lots of redoing that happened to the https://flutter.io site.
Sure you can execute your MOE logic and Flutter UI together from the same projects. I don't see a problem with that. How you link between them might be tough if you have lots of back-and-forth. Dart is very similar to Java and I don't see why you should be able to easily port your MOE classes over to Dart. That would mean you have no bridge to the native. Another alternative being worked on is dynamically linking other compiled native code into Dart/Flutter. Similar to the current Dart Extensions, but this is a ways off.
I'm not sure how set you are on pure Android development but have you considered something like Flutter? It should handle the most basic use cases. Unless you're doing something special with native APIs, Flutter could probably meet your needs. It's complete cross platform, even letting you change the theme on Android and iOS devices to match the platform without the need to change the underlying code. There would be a slight learning curve because it uses Dart, but I've read that a lot of developers picked it up in a couple of days.
If you're not feeling comfortable taking on iOS fully at this point, this might be a good segue. Hope this helps!
Yes! You can either use flutter_blue (android only) or implement your own android/ios plugin to handle the bluetooth module. Plugins are simple to make as long as you already know the platform you're working with (IE: android on Kotlin/Java or iOS on Swift/Objective C)
If you're going to pretend to be Remi Rousselet at least try to know what you're talking about.
The Flutter UI is completely platform-independent, sure--but to say that "everything" is reimplemented from scratch is completely untrue. If you want to access GPS on Android, after you lift up all the Dart stuff, you're going to be looking at the native Android location APIs. The same is true for iOS. That's because "Flutter’s platform-specific API support does not rely on code generation, but rather on a flexible message passing style."
Look at any of the GPS libraries and you'll see that there's Java/Objective-C code in them:
As an aside, I think that Google's new Flutter framework give you all the advantages of React Native, while eliminating many of the drawbacks. Personally, I like Flutter's approach to native, cross-platform mobile apps better. Dart is a hell of a lot nicer than JavaScript, too.
Flutter is written in Dart.
I was new to Dart when i first got into Flutter 6 months ago.
I think any one that 'codes' can figure out Flutter's framework.
It can be an elegant language to design UI with that 'just works'.
And it has that cool "hot reload" feature that makes development so nice and easy.
As all the others have already said, 5 months is nothing. You could even see this as an opportunity for development of your skills to be a better developer.
You could learn Kotlin, which you definitely won't regret, because it is much more fun to develop with (and easier!).
You could start to use the MVVM (Model-View-ViewModel) Pattern introduced some time ago.
Or if you really want to go fancy, you could try to do some UI development with Flutter. (But definitely do the other stuff first!)
Whatever you do, don't lose hope, because if you can't come back from a 5 month break, how would a dev supposed to learn having no prior experience?
Good luck!
On the newly redesigned website you can view different BLoC talks at the bottom of the page at https://flutter.io/docs/development/data-and-backend/state-mgmt[State Management ](https://flutter.io/docs/development/data-and-backend/state-mgmt)
>Why do you feel that way? The only use case I see is "I'm a Flutter dev who wants to write server side code." That's a pretty niche use case.
I feel that way because of the experiences I've had exploring Dart for the last couple of months. Having worked with JavaScript for 8+ years, the tooling here is simpler and straightforward when it comes to setting up a project, writing code and bundling for prod. There are very powerful utilities and classes that come with the SDK, which I find made me productive in a short amount of time. I've been writing on my learnings at dev.to/graphicbeacon. Read through some of them and let me know your thoughts.
Thanks for the FYI caveat. Flutter dev wanting to write server-side code may be a common case from a mobile dev POV, but it's not the only use case. My knowledge is limited on Flutter, but your Kotlin/Swift knowledge is not thrown out the window. If you look at some of the DartConf videos on YouTube, you'll see other use cases leading to solutions from IoT, gaming to music streaming applications. Here are also some of the companies using Dart.
​
>tl;dr: Flutter doesn't have enough dominance on mobile yet (or frontend web) to become popular server side
Flutter is currently at release preview, so hasn't reached v1 yet. That may be why that's the case. Flutter is also not for frontend web development, just native mobile apps.
Thanks for your response and questions. I'm definitely not saying that Dart is a silver bullet, but experience tells me that it's worth keeping an eye on it. Would love to get your feedback also on building a mobile app with Flutter if you can :)
>The DartVM is bundled into the package built for the platform, along with your Dart code in bytecode form. Your Dart code runs on the DartVM on the mobile device.
Nope; Flutter apps are AOT-compiled, especially since iOS doesn't even allow JITs.
You can use the library that you did in yours proyects with Amazon SDK of the following form https://flutter.io/platform-channels/ and so use Flutter for yours new proyects with Amazon SDK, i hope i've been helpful.
So many? What companies are using it? I only found this. They are just like you saying "many companies" but only provide... one example of one app? I don't know if this is just bad marketing or there is really no realiable info on the matter.
From https://flutter.io/faq/#run-ios "The engine’s C/C++ code is compiled with LLVM, and any Dart code is AOT-compiled into native code. The app runs using the native instruction set (no interpreter is involved)."
> Armadillo is currently the default system UI for Fuchsia. Armadillo is written in Flutter and is split into two separate apps: Armadillo and Armadillo User Shell. > > Armadillo is a Flutter app that can run on Android and iOS and any other platforms Flutter supports. It contains a majority of the code. > > Armadillo User Shell is a thin wrapper around Armadillo that obtains its data from the Fuchsia system and interacts with the Fuchsia system's services via FIDL interfaces. Thus, Armadillo User Shell only runs on Fuchsia while Armadillo runs anywhere Flutter runs.
Angular (with TypeScript) is probably still the most prevalent framework in use by enterprises, and of course React has been on the rise for some time. With the 1.0 release of Google's new Flutter framework, there is some renewed interest in using the Dart language for web development, as well, since most of that code can be shared with native Flutter mobile apps.
If mobile development is what you want to do, I would personally recommend looking at Google's new framework, Flutter. It allows you to write one app that runs on Android and iOS, and through this year, Flutter will also target Windows, Mac, Linux, and the web. The language it uses, Dart, is similar to both Java and Swift, but simpler and less verbose in many ways.
As a professional mobile apps developer I'd recommend taking a look at Flutter, a portable UI toolkit from Google. It allows to write most of the code once for both iOS and Android (with the possibility to include platform-specific code).
Another option could be to a progressive web-app, which could allow you to cover the mobile platforms and desktop (but with less platform-specific/lower level functionality available), depending on your needs.
Well, flutter can talk platform specific code, see https://flutter.io/docs/development/platform-integration/platform-channels
I like the flutter approach better then android or iOS sdk, and the dev UX is better. I just prefer Kotlin to dart though.
If Java in Android Studio seems way too complicated you could try things like flutter.io
​
To be honest though - I would not recommend getting serious about Developing (doesn't matter for what) if you are not willing to learn "complicated" stuff.
Hey! I've just summited SpaceX GO! to https://itsallwidgets.com/. Thanks for the suggestion. I wanted to be listed on https://flutter.io/showcase/ too, but it would be a little bit more complicated.
EDIT: here is the link: https://itsallwidgets.com/flutter-app/spacex-go.
Have you checked out Flutter? https://flutter.io/ It might be better suited for your needs.
I would sing up in Xamarin University. The courses for the basic certification are free. Take them, and if I were you I would ask your company to pay you the exam, which is not expensive anyway.
I printed and studied the book Creating Mobile Apps with Xamarin.Forms, but I already had knowledge on Windows Phone development.
Cheers!
They use Flutter for what I believe you are referring to.
https://flutter.io/showcase/ Showcase - Flutter
They needed it to support all platforms and did not want to develop for each is why. Lowers your cost a ton and easier to secure. The only places I have heard Google use Flutter for production is ad related stuff.
Great podcast with the Google flutter guy on software engineer daily. Also an awesome podcast and Jeff a really nice guy.
There are other language they could have used besides Go. Flutter is different as there is nothing really like it. Well guess technically there is nothing exactly like Go. But I have used Go and like it a lot but there are other choices. Flutter is much more unique. I talk Flutter because that means Dart. Flutter is successful then Dart is successful.
What is missing? Been using and been able to find a llibrary already for what I need.
The whole point of flutter was to create a unified codebase so there wouldn't be a need to port apps. You can read about it here https://flutter.io/. Basically, you just write your code once and you can deploy it on either OS. The official documentation covers all of these topics without getting too technical so it might be a neat read.
Learn React Native or Flutter.
Why buy a new PC when you can write both android and ios apps in javascript?
It's just the use of the standard Hero class from the Flutter framework. I guess the hero contains the Image of the beer in this case. Still pretty neat :-)
The best way I know of is Google's new Flutter framework. It has a lot of advantages over the more established cross-platform approaches and has a lot of buzz at the moment.
Flutter on Reddit: /r/FlutterDev
I don't think a specific plugin exists to do this within Dart, but you can do this quite easily using MethodChannels. Here's how to do it on Android:
> 1. Faster apps NOPE. Native is still faster.
> Any proofs? like real measurements?
I don't have any, so that's a fair point. However this is mostly just personal experience. I've used multiple Flutter applications, and none of those feel like they can keep a consistent 60 fps. And these are applications in release mode like the Hamilton app and the Flutter gallery (which I just noticed got a nice makeover). This effect is also always noticeable (at least on my phone) when opening/closing screens in the app.
> However where I'm currently at we're using Cordova (for one reason or >another) and we keep having to write new native plugins for custom >functionality.
> That's Cordova experience, not Flutter
Not really. This is also an issue with Flutter. If you need to write extensive new functionality that really uses things like background services, sticky services, et cetera, you really need to tailor these to their respective platforms to guarantee the best performance (see also the 'background' question on the FAQ).
> Wat.
> Since Flutter doesn't depend on platform(Skia renders all the widgets) that's true. And it's totally different from AppCompat. It is more Unity way
I get what you mean. Technically they're exactly the same on all versions. However would there be a functional difference to the users on Android when you're using the proper Android libraries (also the design one) that backport all this functionality? They're also just talking about 'looking the same'.
But please keep in mind that I'm not opposed to Flutter. I like the idea and I've been playing around with it myself. I'm just not a fan of blogs like these.
> but very few Android and iOS devs care about flutter right now
With there being six livestreamed Flutter talks, half are tagged Design, maybe the designers at google are big flutter fans. https://events.google.com/io/schedule/?section=may-8&livestream=true&topic=flutter
> I really liked the hot reload though.
Some tidbits about Flutter's hot reload
in debug builds, it "works by injecting updated source code files into the running Dart Virtual Machine (VM)."
It's stateful (i.e. persists static variables, can recompute finals, etc) https://flutter.io/hot-reload/
The dart team asked the Flutter guys if they wanted the hot reload feature, flutter guys gave the go ahead and were amazed.
This is the Polymer project I'm talking about: https://www.polymer-project.org/
If all you care is mobile applications, you may want to try https://flutter.io or https://ionicframework.com/. I think they are still Android and iOS only, but the advantage is that the components they provide will have the look-and-feel of the OS you are running on, which is a better user experience.
We didn't use them because they didn't have support for desktop applications at the time.
Disclaimer: I work on the Flutter team
Bindings Flutter lets you 'bind' and invoke native SDK code more or less the same way as RN does https://flutter.io/platform-channels/.
It doesn't use the native SDK for its core UI rendering. We chose that philosophical approach because it lets developers write more declarative, immutable UI code which scales better and lets us shape our APIs in a more modular, consistent and performant way.
Reloading Android instant run takes your code delta, compiles Kotlin/Java to new bytecode and injects a new .dex into your running .apk and then tweaks the classloading mechanism to load from the new .dex after the app restarts.
Flutter runs with a Dart VM in JIT mode in debug (it compiles directly to ARM instructions like iOS apps or Android games using NDK in production mode). The running code is always the latest code. There isn't any particular cost to reloading new code besides transmitting the new source to your device via USB.
RN and Flutter are also fundamentally different from Android instant run in that Android instant run is an optimized way of building, installing and running your application. RN and Flutter alters the runtime state. And it's possible because RN and Flutter uses a react style declarative UI building pattern where the framework handles state mutations, so you don't have to write the code to transition from your currently running state and the newly loaded state.
Comparability RN is rather more similar to Xamarin in that they wrap OEM widgets with another layer for unifying the API. Flutter is more like Unity but for app building rather than for games in that it's more bare to the metal while offering you all the tools in between to use high level UI building patterns.
As you're looking at doing custom stuff, flutter might be worth a look. https://medium.com/@xster/why-flutter-doesnt-use-oem-widgets-94746e812510 For someone from webdev, have a look at https://flutter.io/web-analogs/
There are some efforts from the community to bring Flutter to other platforms, for example there is this project to make Flutter apps run in the browser:
https://github.com/jban332/flur
The Flutter FAQ also has this slightly weird answer to using Flutter to create desktop applications:
> We are focused on mobile-first use cases. However, Flutter is open source and we encourage the community to use Flutter in a variety of interesting ways.
> do they have a way to extend the system, with native code
You can do pretty much anything you want.
https://flutter.io/platform-channels/
> I have something I can use on my own site?
It's mobile-only. Web and desktop aren't supported.
Here is the list of publish packages https://pub.dartlang.org/flutter/packages If something you need is not there you could use/create a private plugin that my only have android support working. https://flutter.io/using-packages/
Howdy, I'm the author of this project. keys.dart is missing because it contains my client id and client secret, which I didn't want to commit to the public. If you'd like to build and run this project, you'll need to create a keys.dart file and define two string constants (CLIENT_ID and CLIENT_SECRET) inside it. You can get a client id and client secret by creating a github oauth project here: https://github.com/settings/applications/new. (You're the second person to raise this in one form or another, so I'll be adding this to the readme)
It's currently in a really early stage, which is why there isn't any documentation. I'll be adding more in the coming weeks and (hopefully) be blogging about it. Most of my intuition around building the app comes from my background in android and react.
For working with a screen that involves rest calls, generally I'm working with futures:
// inside some widget that displays a user from the network void initState() { super.initState(); _loadUser(); }
void _loadUser() async { var user = await api.getUser(); setState(() { _user = user; }); }
Widget build(...) { if (_user != null) { // show the user ui } else { // show a loading spinner } }
A fancier approach to this is to use async widgets, which more or less do the same thing. You can find a more advanced use of the StreamBuilder async widget to build a paginated list view widget here.
Edit: formatting
From the faq "Flutter is built with C, C++, Dart, and Skia (a 2D rendering engine)" https://flutter.io/faq/#"what-technology-is-flutter-built-with So there is no "web portion".
More from the FAQ "What language is Flutter written in? We looked at a lot of languages and runtimes, and ultimately adopted Dart for the framework and widgets. The underlying graphics framework and the Dart virtual machine are implemented in C/C++."
I'm very curious about this as well.
From my, admittedly non-exhaustive, searching, it looks like you'll have to build a plugin in the "native" code and then call it from Dart. Much like Cordova's system.
One of the reasons I use Cordova is because of the large number of plugins for things like Facebook, in-app purchasing and the like.
*Edit: Here's the docs I looked at.
Checkout out Flutter: https://flutter.io/
It's a cross-platform UI framework based on the lowest levels of Chromium and Dart. Here's a video on it's design from Ian Hickson (author of the HTML5 spec): https://www.youtube.com/watch?v=dkyY9WCGMi0
If you're implying web devs have more to learn, I wouldn't say that's a fair statement.
So, backend, for starters, is the same for both web apps and mobile apps, and it is not really part of the app itself. It's a separate system that lies on a server, and doesn't care if a web app or a mobile app will be using its services. You don't necessarily have to write your own backend, or even develop an app that needs a backend in the first place, so that entirely depends on what specifically you're developing.
Frameworks on the other hand there's a million of in web development, that is true, and that is a problem that you would never have in mobile app development... or, not to that degree at least. But you aren't supposed to learn all of them, you don't even have to learn 2. If you find a good comparison of frameworks, and then pick the one that seems most suited to what you want to do, then you can continue your entire career working in only that one framework.
As for JS, that just happens to be the language used in web apps. You always have to learn SOME language. If you went into iOS development, then you wouldn't have to know JS, but you'd have to learn Objective-C instead.
Also, while you're at it, give Flutter.io a look, see what you think about that one.
To elaborate and from https://flutter.io/flutter-for-android/
> ...The important thing to note here is at the core both Stateless and Stateful widgets behave the same. They rebuild every frame, the difference is the StatefulWidget has a State object which stores state data across frames and restores it.
> If you are in doubt, then always remember this rule: If a widget changes (the user interacts with it, for example) it’s stateful. However, if a child is reacting to change, the containing parent can still be a Stateless widget if the parent doesn’t react to change.
I believe I just copied from the firebase_admob package site.
MobileAdTargetingInfo targetingInfo = MobileAdTargetingInfo(
keywords: <String>['flutterio', 'beautiful apps'], contentUrl: 'https://flutter.io', birthday: DateTime.now(), childDirected: false, designedForFamilies: false, gender: MobileAdGender.male, // or MobileAdGender.female, MobileAdGender.unknown testDevices: <String>[], // Android emulators are considered test devices );
I'm currently still on bed, but I can check the exact targeting info later
That course looks like it would be good, I started with the udemy course samanzamani mentioned, but once you get started and have a sense of how it works, you can learn a lot just by diving into flutter packages, flutter.io, searches for specific problems will usually bring up some good blogs/medium articles, and there is a lot of flutter info on stack overflow as well.
Avoid HTML/JS/CSS, it's easy to get started but very hard to get right so users and clients are secure.
Instead, try to learn https://flutter.io or some other easy means of App development. Alternatively, if you are somewhat inclined, you could try 3D modelling, animation, Unity3D ...
This is not the "official" flutter slack group. This is something someone else has created.
​
The flutter.io Slack group is
​
​
The domain for the URL in OP is registered in Canada.
Seems your objection comes down to the traction it has/hasn't got. Dart has gained a lot of traction in the area of mobile development (https://flutter.io) and is experiencing growth in the Reddit, StackOverflow and Gitter communities. Are you reaching this conclusion from reading the full article?
Just passing by to suggest you taking a look at Flutter, it has a very different structure to React (or any other imperative framework) but the developer experience is so amazing that after a year I just can't look back to native Android.
Also, if you like to chat with us - we are on discord available "all the time" basically. And we would LOVE to have more people join us - for example, we have had people in Venezuela help out with translating a lot of stuff from our website - and also making movies showing how to use Canoe etc, and all this material we would like to put in a special Venezuela section or something on the website. Thus... if you happen to be a great web designer :) you could surely help us out, it doesn't have to be programming. Also, if you are interested in Flutter (flutter.io) that's what we are betting on for the future, then join up :)
Haha... Funny you should say that, because it's currently an AngularDart web application, but it's written in such a way that I can easily recreate it as a Flutter mobile application, which I will do eventually.
Out of curiosity, what makes you wish it were native mobile? The web app works pretty well on mobile (I think), so what features are you missing? Offline use, maybe? Not sure I can think of any other highly desirable differences...
> I'm starting from zero, currently going through HTML + CSS, planning to get into js a bit then dart all the way. I'll delve into web design first because I was told it's a good way to start but my goal is ultimately to code for mobile.
You do not need to know any HTML or CSS to program for mobile when using flutter. If your goal is to ultimately code for mobile, then forget about web development.
You might have been confused because dart is can both be used for flutter and for web development. You don't need AngulartDart or DartSass.
If you want to learn dart just enough for flutter, just read through this. Then move on to learn flutter here.
There's also a course on Udacity you can take.
Not to confuse you, but these is a scenario where you need HTML+CSS, etc to program for mobile, and that is react-native. But that has nothing to do with flutter.
Yeah Google uses it in multiple products. The 2 most well known are their Google Ads mobile app and their GreenTea mobile app. Might point out also that the GreenTea web app is written using AngularDart.
Google Ads is responsible for something like 75% of Google's total profit and GreenTea is their internal customer management app used by their sales dept.
Yes it will, I'm actually doing like literally the exact same thing right now and it's working fine. You'll need to use some plugins though, but I'm guessing you knew that.
The biggest professional app I know of using Flutter is the Hamilton app. There is a official showcase of apps you can see here. And also an unofficial showcase here.
If you are a beginner and want to write something quickly, I recommend spending time on Flutter: https://flutter.io/
You'll still work on Android Studio with Flutter/Dart plugin installed.
That's a great idea! Get the weapons in on it...
I almost exclusively use AngularDart to do web apps, and I write them so that all their logic can be shared with a Flutter mobile app. So far, I've only spent a few hours on this app.
I was more talking about App Store and not iOS itself
https://flutter.io/docs/resources/faq#will-apple-reject-my-flutter-app
It's a mobile framework by Google that works on iOS, Android and it's the primary way of making apps on Fuchsia. Some people are trying to bring it to desktop.
It's a native framework that uses its own rendering engine to draw widgets instead of using the platform's ones.
It works with Dart, which is based on JavaScript. The result is beautiful and looks good on any display. Responsiveness at its best, honestly.
I think you might enjoy using Flutter. The UI and logic are all one language, and what you produce is an app that runs on iOS and Android (and soon it will run on Windows, Mac, Linux, and the web).
Glad you asked! We're currently considering two options for platforms:
At this point we're leaning more toward a web version, but of course nothing is set in stone yet. We'll keep this sub updated once we have something close to a workable prototype.
Yup! The original app was created using native Android, hence the Android exclusivity. However, for the new app we're strongly considering using Flutter, which would allow the app to run on iOS, Android, and possibly even desktop Windows + Mac. The other likely option is to make it a web app, which would allow access from any device with a web browser -- including iOS devices.
Of course, nothing's set in stone yet, but catering to you iOS users this time around is definitely near the top of our priorities :)
If you want something like "an alternative App Store" where they can download the app, no. That's not possible.
You can install a MacOS virtual machine on your PC. After installing Android Studio, XCode, homebrew and cocoapods on the VM, you can setup Flutter and deploy your app to iOS devices using the Flutter install instructions for MacOS.
This is how I compile and deploy my app on iOS devices from an HP laptop.
In my years of training programming so far, the best approach I've seen is:
​
1) First, make yourself familiar or comfortable with the programming language first. Flutter is based on Dart, so take your time to get Dart enough for Flutter. Something like: structure, flow control, OOP, asynchronous programming, handling exception...
​
2) Make yourself super-excellent at HelloWorld and Todo projects. Doesn't it sound easy? ...Hmmm I don't think so. Try to turn off Internet, open IDE, write a ToDo from scratch without Googling, no Internet, no documentation, in 1 hour, or 30 mins or 15 mins or 10 mins.
​
3) Go further by learning some Flutter widgets, checkout Flutter official documentation https://flutter.io/docs . Don't forget to read Cookbook and Tutorials sections.
​
4) Start a lot of practices by cloning many apps like Snapchat, Facebook, AirBnb, Youtube, Instagram, ...
​
5) Think of small app ideas, build it gradually based on what you've already learned and experiences. Grow from here...After several apps, you definitely know where to go next :)
​
Along the way, don't forget that there are many communities that can help you learning: StackOverflow, Reddit, Medium, Twitter ...
​
Cheers :D
Have you considered using a cross-platform framework like flutter?
If you do, I'd happily contribute to getting a DadGuide replacement up and running, but I don't know anything about native iOS development and don't have an iPhone.
Also just a suggestion, I'm no sure if the Apple Store supports this, but Google Play has a feature where they host an 'expansion pack' containing data your app needs at runtime. DadGuide/PadGuide use this to pre-seed the app with icons which makes for a better user experience and saves you bandwidth.
If there is no dart package available on pub.dartlang.org, you can write some plattform specific code for both, iOS and Android to integrate the specific library in your project. Check https://flutter.io/docs/development/platform-integration/platform-channels for a good example.
I've just stumbled upon this while searching for a note-taking app.
I too use macOS (at home and at work), android (am android dev) and syncthing.
What do you think of the idea, to implement this nvalt clone in https://flutter.io/ ?
I am a big fan of flutter, and am looking for a worthwhile project to use it in.
​
​
> Do you know any examples of well-known apps (IOS and Android) that use flutter?
Check out https://flutter.io/showcase
It links to some well-known apps like Hamilton, Google Ads app and Alibaba Xianyu.
From what I understand, mind you I haven't used Android studio (only vscode) that should be fine to start. Also, side note java or JavaScript? I imagine your going to do something with flutter or maybe build a pwa (progressive web application) and again yeah go for it. Google developers has a good amount of information on those topics.
If you actually reach the limits of your ram, you can more than likely purchase more memory for you laptop.
Links to check out...
As an intern and there is a task that I have to accomplish for my internship. I have an idea but first let me explain what is the task:
- Create an Android application that shows questions given by company then collect the answers.
- Get datas from the application and store it in your computer for now.
- Android application must have simple and clear interface.
- Use Python if you can.
I am aware that some of the conditions above can seem stupid like the last condition but for future projects, lets say Python must be used.
​
Examples of questions:
- "Did you wear your safety equipments before working?" -Yes, -No
- "Did you face any problem while working?" -Yes: "<manuel_input_as_text>", -No
​
My idea is simple:
- Create a Flask-RESTful API that gets and sends datas with json type
- Create an Android application with flutter
- Setup the connections and test it
​
Question: Can I use my idea to accomplish my task? If I can't, why?
​
Note: I can work with Python and little bit of these languages: JavaScript, HTML, CSS. However I don't know java, kotlin and flutter. I would like to choose to learn flutter if I can.
Just wanted to add to the things said by others - https://flutter.io/docs/resources/faq#does-flutter-run-on-the-web
There's Flutter which uses Dart to develop near native performance apps for android/iOS and Hummingbird which should help you run the same codebase on the web.
As for the 2 different codebases when using React [Native] - you could reuse some parts by creating two sets of components - one for web and one for mobile, but still it's a hassle.
Thanks for sharing!
It seems like there are a couple of apps listed under showcase: https://flutter.io/showcase
But non of them is actually using the iOS-style Cupertino widgets.
Was anyone found an app looking (almost) like a native iOS app but developed with Flutter?
I'll try to give the Getting Started documentation a go this weekend. Out of curiosity, what other GUI development frameworks have you used in the past? Thumbing quickly through the UI layout docs, it looks like widgets/controls are defined through declaration rather than markup - maybe I've been stuck in a different world for too long, but that's a red (or at least yellow) flag to me...
(Small disclaimer: I work at MS currently, but was at Google before) My personal favorite is Microsoft's XAML+MVVM framework. You define your layout and behavior in markup (resulting in good human-readability, which declarative GUI definition severely lacks) and data-binding rules in a viewmodel that sits behind the GUI. This means you set up your rules for how everything (both UI and data) relates to each other, then everything just goes. No dealing with redundant reflow logic, no constant manual checking of side cases, near-free conversion between model and UI layers...
Using native code on each platform is entirely possible and probably the best way to achieve what you are after here. What you want to use is Method Channels. This allows you to trigger methods from dart on the native side and vice versa. The docs can be a bit sparse at time, but you want to start here
>Lemme ask you what do you use for completion and linting, while coding w/ swift?
Uhh...nothing? I usually don't use IDEs anyway, and I don't think the state of Swift tooling on Linux is really, well, existent yet.
>you mean this one: https://github.com/flutter/flutter ?
Yup! Main page is: https://flutter.io/