Her kommer Flutter - Googles nye mobil-system fra Aarhus

Nu skal det blive nemmere at skabe Android-apps, som oven i købet kan afvikles på iPhones.

Google er på vej med en nyskabelse til firmaets mobile udviklingsmiljøer. Ud over Java og Kotlin skal man nu også kunne skrive apps med sproget Dart, som er opfundet af danske Lars Bak sammen med amerikanske Gilad Bracha.

Dart er Googles bud på en kandidat i genren med web-sprog, der kompileres til Javascript, men nu får sproget en helt ny og central rolle i Googles kommende mobilmiljø, der har fået det spøjse navn Flutter.

Her kompileres Dart til ‘født’ ARM-kode, oven på Androids Linux-lag. Derudover kan Flutter-apps også krydskompileres til iOS ved hjælp af Xcode, Apples udviklingsværktøj. Det skulle nedsætte udviklingstiden for apps, der går efter begge de to store platforme med kun én kodebase, samtidig med at der er tale om kompileret og ikke fortolket kode.

Sådan fortalte Kasper Lund fra Google på den netop afholdte Goto-konference i Bella Center i København. Han har tidligere været en del af det hold, der under Lars Baks ledelse skabte Googles Javascript-motor V8, som er kodeknuser i Chrome-browseren. Og nu er han på Flutter-holdet, som geografisk spænder fra Aarhus til flere amerikanske delstater.

Der er nok ikke tale om, at Flutter skal overtage Android-Java og Kotlins rolle, da Google ofte satser på flere sideløbende teknologier, ligesom det er set med Chrome OS og Android. I stedet er der er tale om et nyt bud på mobiludvikling fra it-kæmpen.

API’er som føles rare at arbejde med

Bedømt ud fra den kode, som Kasper Lund demonstrerer på Goto-konferencen, ser det nemmere ud at have med at gøre end Androids Java- og Kotlin-miljø, synes Version2's udsendte medarbejder.

»Kan du ikke li’ XML-filer?« spørger Kasper Lund for sjov og fortsætter:

»Vi har gået efter at lave API’er, som føles rare at arbejde med, også når det skaleres op til rigtige apps. Det har været et stort fokus-område med udviklingen af Dart, at det skulle være lettere at gå til. Hvis vi skal lave noget nyt går det ikke, at det er svært tilgængeligt.«

Kasper Lund forestiller sig også, at Flutter på den lange bane kan opdatere platformen, lidt ligesom den udvikling, webbrowsere og Javascript har været igennem – i modsætning til Android-Java, der i stil med almindelig Java lægger stor vægt på bagudkompatibilitet.

Det betyder også, at Flutter kommer med sin egen runtime, der fylder seks megabyte.

»Når appen er sendt ud af døren, har du det hele med dig. Din app bliver ikke ødelagt af en eller anden operativsystem-opdatering.«

Google: Bedre end andre miljøer til krydsplatform-udvikling

Kasper Lund tør godt sige, at Flutter er et bedre miljø til udvikling af krydsplatform-apps end andre muligheder.

»Det er meget forskellige systemer. Men når man skal lave et ‘custom ui’ kan det være svært på de andre platforme.«

Et ‘custom ui’ er når appudviklerne skaber en brugerflade, som ikke benytter de komponenter og konventioner, der findes på den fødte platform, men i stedet skaber en unik brugeroplevelse.

»Der har vi den store fordel, at fordi vi er gået helt over i den anden grøft, så kan vi kan tegne det hele. Vi er ikke et lag oven på det eksisterende ‘fødte’ lag. Så et custom ui er meget simplere at have med at gøre for os. Jeg vil ikke påstå, at for alle apps er Flutter en bedre løsning, end eksempelvis Xamarin eller Cordova, men der er færre kompromiser ved en Flutter-stak,« lyder Kasper Lunds argument, med henvisning til to andre populære miljøer til mobiludvikling på tværs af platforme.

Hvis der skal være et problem med Flutter, skulle det handle om at integrere med platformens fødte komponenter – et klassisk problem for grafiske brugerflademiljøer, der skal afvikles på tværs af platforme.

Bedre ydelse på gammel hardware

Flutter praler af at kunne levere højtydende animationer med de eftertragtede 60 frames pr. sekund, som får brugerflader til at virke friktionsløse i brugerens øjne.

»Vi tester på gammel hardware, som der masser af, især på Android-siden. Vi har et framework der tillader os at køre en helt ny kode, og ny brugerflade, på gammel hardware.«

Det betyder også, at Flutter ikke er afhængig af Androids mange API-versioner.

For en del år siden var der megen snak om mobile webapps. Selvom Kasper Lund har sit udspring i browser-verdenen, mener han ikke at det mobile web har kunnet indfri behovene.

»Langt hen ad vejen synes jeg det er skønt at vi har en browser, som kan en masse, og hvorfor skulle den ikke være bud på en platform? Der har været mange udfordringer – fra det ordinære, som at få adgang fra browseren til de underliggende tjenester, platformen tilbyder.«

Der er kommet flere API’er til browseren til det formål, men det føles altid som om at de er en lille smule bagud.

»Men det reelle problem er, at browseren kan for meget – den er som en schweizisk lommekniv, der skal kunne det hele. Vi har ikke så mange resurser at give af på en mobiltelefon, i forhold til ydelse. Vi har set at det har været sværere end antaget at få web-stakken til at være en god platform for apps. En browser er et komplekst stykke software, som skal kunne mange forskellige ting, og det skal en mobil-stak som Flutter ikke.«

Flutter har ikke noget med webbet at gøre, om end en stump kode til tekstlayout er lånt fra Chrome. Men der er altså ikke tale om et såkaldt ‘webview’, hvor en webside integreres med et ‘født’ brugerfladekomponent, fastslår Kasper Lund.

Flutter er stadig i en tidlig alfa-fase, men indtil videre findes der en plugin til IDE’et Intellij Idea, og i denne måned kommer der en udgave af Googles IDE Android Studio med understøttelse af miljøet.

class MyScaffold extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // Material is a conceptual piece of 
    // paper on which the UI appears.
    return new Material(
      // Column is a vertical, linear layout.
      child: new Column(
        children: <Widget>[
          new MyAppBar(
            title: new Text(
              'Example title',
              style: Theme.of(context).primaryTextTheme.title,
            ),
          ),
          new Expanded(
            child: new Center(
              child: new Text('Hello, world!'),
            ),
          ),
        ],
      ),
    );
  }
}
 
void main() {
  runApp(new MaterialApp(
    title: 'My app', // used by the OS task switcher
    home: new MyScaffold(),
  ));
}

Et eksempel på Dart til Flutter, taget fra Flutters hjemmeside.

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Følg forløbet
Kommentarer (3)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
Casper Bang

1) ...hvorfor man ikke ønsker at en app følger platformen mht. opførsel, dvs. burger-menu på Android, knapper i toppen på iOS og så fremdeles. Her ender man med et kompromis hvor en app ikke rigtig kan følge telefonens UX/UI hverken på den ene eller anden platform - lidt ligesom det "lowest common denominator" problem Java Swing aldrig nåede at overvinde. Måske kunne jeg se en fordel hvis man fik en 3 tier med, web - for progressive web apps kan jo netop det hele især nu hvor Apple er hoppet med på service-worker!

2) ...fordelen ved at tilføje endnu et niveau af indirection. Man kan ikke ret meget i Android på NDK laget hvor Flutter åbentbart primært befinder sig, så nu skal man altså til at lave adapters til Java-laget - eller også kommer Flutter med en masse af disse bygget ind under motorhjelmen. Det lyder ret skræmmende fra et maintenance og debugging synspunkt at have kæden Host layer (SDK) > Flutter layer (NDK) -> Adaptor layer (SDK) -> Native layer (SDK).

3) ...hvorfor man divagerer fra mange års lærdom og fravælger templating/markup som en "by design" måde at undgå at blande UI og logik. Udover at være god til at overskue nesting helvede (det lille skole-eksempel ovenover har 7 niveauer) så virker det som om man også skal passe meget på med hvor man placerer sine ting.

The devil is in the details og der er bestemt spændende aspekter i Flutter, men jeg synes nu først det havde været RIGTIG interesant hvis sprog-motoren kunne udskiftes med f.eks. Kotlin og man kunne ramme web også. For med Flutter p.t. kan relativ få web-udviklere være interesserede i at hoppe på mobile, og få mobil-udviklere være interesseret i alternativer til native der alligevel afskærer sig fra en web-løsning.

  • 4
  • 0
Michael Thomsen

Hej Casper, jeg arbejder på Flutter teamet og skal se om jeg kan komme med lidt yderligere detaljer.

Vedr. 1, så er det bestemt vores intention, at Flutter apps skal respektere og opfylde de gængse UI kriterier vedr. systemkontroller (såsom ‘hamburger’ menu knappen) og navigation. Vi gør det faktisk helt automatisk, så hvis du fx laver en AppBar, så venstrestiller vi titlen og bruger en ‘back arrow’ på Android, mens vi centrerer titlen og har en ‘back button’ på iOS. Samme mht. fonte, scrolling, og lign.

Når vi siger, at vi er gode to tilpasset (custom) UI, så er det de enkelte skærmbilleder vi tænker på, som kan tilpasses den enkelte app eller brand. Se fx dette eksempel, som en af udviklerne i vores økosystem har lavet: http://sergiandreplace.com/2017/09/planets-flutter-from-design-to-app/

Vedr. 2. så er det svært at spænde to mobiloperativsystemer uden en eller anden form for indirektion. Men vi har faktisk også en del kunder, som har brugt Flutter på kun iOS eller Android, og har fundet det fordelagtigt, at bruge vores UI abstraktioner. Mht. at kalde system API’er (fx for at tilgå gyroskopet) så har vi et plugin-system, så at disse “adaptere” kan skrives en gang og deles i økosystemet på vores pakkemanager https://pub.dartlang.org.

Vedr. 3. så har vi ganske rigtigt en noget anden model. Men det er netop baseret på vores mangeårige erfaringer med templates i fx html, at vi har ønsket at lave et alternativ. Vedr. de 7 niveauer, så er det let at refaktorisere koden til at opbygge UI’et via mindre metoder med en mere naturlig nestning/indlejring.

Dart, Flutter’s programmeringssprog, er faktisk allerede rigtigt godt til Web applikationer via AngularDart frameworket. Internt i Google bruger vi AngularDart til nogle af Google’s allermest forretningskritiske og komplekse web apps, fx AdWords og AdSense. For et eksempel på deling af kode via anvendelse af Dart til både mobil og web, se evt. https://www.youtube.com/watch?v=IMNUiC2O9M8.

Jeg håber, at du har lyst til at tage endnu et kig på Flutter, og vi ser meget gerne yderligere feedback!

Vh, Michael Thomsen

  • 8
  • 0
Tim Ahrentløv

Jeg må give Eric Seidel ret i denne video https://www.youtube.com/watch?v=Mx-AllVZ1VY når han siger at de apps der vinder priser mestendelens er dem der tænker ud af platform boksen - så hvorfor ikke bare emulere platformsfølelsen med skia og sætte krydsplatformsudvikleren fri?

Som Xamarin Forms udvikler igennem mange år ved jeg et eller andet om, at basere sig på den underliggende platforms kontroller og paradigmer. Det er blevet bedre med tiden, men jeg sidder alligevel tilbage med en følelse af, at ha' været med til at bygge huse på en gletcher og finde sprækker som ikke var der i går.

Så jeg byder flutter velkommen. Dejligt med et paradigme skift. Jeg håber at nogen tager handsken op og porterer flutter's underliggende c++ engine til Xamarin så vi er flere der kan levere i træk i den retning :o)

  • 1
  • 0
Log ind eller Opret konto for at kommentere
IT Company Rank
maximize minimize