Flutter

Flutter on Google loodud avatud lähtekoodiga kasutajaliidese tarkvaraarenduskomplekt.

Flutter on kirjutatud C, C++ ja Darti keeltes ning kasutab Darti programmeerimiskeelt.

Ajalugu 
Flutterit tutvustati nimega Sky 2015. aastal Dart Developer Summitil, kus avalikustati, et Flutter baseerub Darti programmeerimiskeelel ning oli mõeldud ainult Androidi operatsioonisüsteemile. Lisaks väideti, et Flutter suudab renderdada püsivalt kaadrisagedusega 120. Esimene versioon, Flutter 1.0 tuli välja 4. detsembril 2018. aastal ning see versioon sisaldas juba ka tuge iOS-ile.

11. detsembril 2019 tulid välja Dart 2.7 ja Flutter 1.12, mis lisasid macOS-i ja veebi beetatoed ning olemasolevate rakenduste Flutterile üleviimise võimaluse.

8. mail 2020 uuendati Dart 2.8-le ja Flutter 1.17-le, mis lisas toese Metal API-le parandades iOS-i jõudlust märgatavalt.

8. juulil 2020 ilmus Google'i ja Canonicali koostöös Flutteri tugi Linuxile.

5. oktoobril 2020 uuendati Flutter 1.22-le, mis lisas iOS 14 ja Android 11 toed.

3. märtsil 2021 tuli Google välja suurima uuendusega – saabus Flutter 2.0. Nüüd sai Flutteri laiendust kasutada ka populaarsemates integreeritud programmeerimiskeskkondades nagu IntelliJ, Android Studio ja Visual Studio Code.

8. septembril 2021 uuendati Flutter 2.5 peale. Uuendus parandas Androidi täisekraani režiimis kasutamist ning keskendus enamjaolt jõudluse parandamisele.

12. mail 2022 tuli välja teine suurem uuendus, millega saabus Flutter 3. See uuendus kasvatas toetavate platvormide arvu kuuele, lisades stabiilse toe Linuxile ja MacOS-ile nii Inteli kui ka Apple Siliconi protsessoritel.

30. augustil 2022 uuendati Flutter 3.3 peale. Uuendusega kaasnes uus graafikamootor Impeller, mis võimendas Flutter renderdamist märgatavalt.

Arhitektuur 
Flutter on laiendatav kihtidega süsteem, kus iga eraldi olev teek sõltub eelnevast kihist ning iga raamistiku tase on valikuline ja välja vahetatav.

Flutteri arhitektuuri suured osad on järgmised:

 Flutteri mootor
 Flutteri teek
 Darti platvorm
 Widgets
 Flutteri arendusinstrumendid

Flutteri mootor 
Flutteri tuumas asub tema mootor, mis sisaldab kõiki vajalikke primitiive Flutteri rakenduste toetamiseks.

See on enamjaolt kirjutatud C++ keeles ning pakub madalatasemelist Flutteri tuuma API rakendamist, mille hulgas on ka graafika, tekstipaigutus, faili ning võrgu sisend-väljund ja palju muud.

Flutteri teek 
Flutteri teek on kirjutatud Darti keeles ning olemas on põhilised klassid ja funktsioonid, mida kasutatakse rakendustes mootoriga suhtlemiseks.

Dart 
Dart on programmeerimiskeel, mis loodi 2011. aastal Google'i poolt. Dart sarnaneb oma süntaksilt C# ja Javaga, mistõttu on seda arendajatel lihtne õppida ning  kasutusele võtta. Flutteri valis Darti oma programmeerimiskeeleks, kuna taheti kasutada keelt, mis oleks sarnane juba populaarsete keeltega nagu JavaScript, Java ja C# ning Dart oli selleks parim variant. Dart kasutab lisaks just-in-time kompileerimisele ka ahead-of-time kompileerimist, mis muudab Flutteri kiireks ja täielikult kohandatavaks.

Darti keele koodijupp, mis väljastab sõne "hello" 5 korda, näeb välja järgmine:void main() {  
  for (int i = 0; i < 5; i++) {  
    print('hello ${i + 1}');  
  }  
}

Widget 
Kõige tähtsamat komponenti Flutteri rakenduses kutsutakse widgetiks. Widgetid on loodud kasutades raamistiku, mis sai oma inspiratsiooni Reactilt. 

Üks widget võib koosneda mitmest teisest widgetist, mis kõik kokku moodustavad hierarhilise struktuuri. Iga kasutajaliidese element Flutteris on widget ning ta saab olla kas staatiline (ingl stateless) või dünaamiline (ingl stateful). Staatilised widgetid uuenevad ainult siis, kui nende sisend muutub, dünaamilised widgetid jälgivad muutuseid ning uuendavad ennast vastavalt. Staatilised widgetid on näiteks tekst ja ikoon. Dünaamilised widgetid on näiteks slaider ja vorm.

Näide widgetitest Flutteris:import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('My Home Page'),
        ),
        body: Center(
          child: Builder(
            builder: (context) {
              return Column(
                children: [
                  const Text('Hello World'),
                  const SizedBox(height: 20),
                  ElevatedButton(
                    onPressed: () {
                      print('Click!');
                    },
                    child: const Text('A button'),
                  ),
                ],
              );
            },
          ),
        ),
      ),
    );
  }
}Koodijupis iga implementeeritav klass on widget.

Hello World näide 
Hello worldi koodijupp Flutteris näeb välja järgmine:import 'package:flutter/material.dart';

void main() => runApp(HelloWorldApp());

class HelloWorldApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Hello World App',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Hello World App'),
        ),
        body: Center(
          child: Text('Hello World'),
        ),
      ),
    );
  }
}

IDE tugi 
Flutterit ja tema pistikprogramme (plugin) ametlikult toetavad IDE-d on:

 Visual Studio Code
 Android Studio
 IntelliJ IDEA
 Emacs

Viited 

Tarkvaraarendus