Dart: mi ez, a Flutter nyelv jellemzői és programozás

Szerző: IT Sectr Megjelenés: 2026-02-10 Olvasási idő: 12 perc

Dart — a Google programozási nyelve, amelyet kifejezetten a cross-platform Flutter keretrendszerhez hoztak létre. Kombinálja a JIT-fordítást a villámgyors hot reloadhoz és az AOT-fordítást a natív teljesítményhez release buildekben. A Dart nemcsak mobilfejlesztésben használatos, hanem webalkalmazásokhoz (AngularDart) és szerveroldali megoldásokhoz is. A nyelv képességeiről bővebben olvasson a hivatalos Dart dokumentációban.

Főbb pontok

  • Dart — a Google által készített Flutter nyelv, JIT/AOT fordítással
  • Null safety — a Dart 2.12-től sound null safety garantálja a null hibák hiányát
  • Isolate — párhuzamosság izolált szálakon keresztül, megosztott memória nélkül
  • Flutter — UI keretrendszer, amely widgeteket renderel Skia/Impeller segítségével
  • Pub.dev — csomagkezelő 45 000+ könyvtárral Dart és Flutter számára

Mi az a Dart?

Dart — C-szerű szintaxisú programozási nyelv, amelyet a Google fejlesztett Lars Bak (az Eclipse alkotója) vezetésével. Az első kiadás 2011-ben történt, de a Dart igazi népszerűségét 2018-ban érte el a Flutter 1.0 megjelenésével. A nyelvet felhasználói felületek létrehozására tervezték: beépített támogatással rendelkezik streamekhez, future-ökhöz és reaktív mintákhoz.

A Dart filozófiája — "a teljesítmény és termelékenység egyensúlya". A nyelv két fordítási stratégiát támogat: JIT (Just-In-Time) a hot reloados fejlesztéshez és AOT (Ahead-Of-Time) a natív teljesítményű release buildekhez. A JIT fordító ezredmásodpercek alatt injektálja a módosított kódot a futó alkalmazásba anélkül, hogy az APK újrafordítását igényelné — ez a Dart kulcsfontosságú előnye más nyelvekkel szemben a mobilfejlesztés kontextusában.

A Dart kulcsfontosságú jellemzője — a sound null safety, amely a Dart 2.12-ben (2021) került bevezetésre. A típusrendszer garantálja, hogy egy változó nem lehet null explicit megjelölés nélkül (int?). Ez kiküszöböli a NullPointerException-t a fordítási fázisban. A Google adatai szerint a null safety bevezetése 30%-kal csökkentette a Flutter alkalmazások összeomlásainak számát a termelési környezetben.

Dart ökoszisztéma

A Dart ökoszisztéma három fő irányt foglal magában: Flutter (mobil és asztali alkalmazások), AngularDart (webalkalmazások) és Dart Server (szerveroldali megoldások). Flutter — a domináns platform: a Statista (2025) adatai szerint a Flutter a cross-platform mobil projektek 46%-ában használatos, megelőzve a React Native-t (38%) és a Xamarint (8%).

Dart szintaxis: típusok, függvények és osztályok

A Dart szintaxisa a Java-ra és JavaScript-re emlékeztet, de saját egyedi szerkezetekkel rendelkezik. A Dartban minden objektum — még az int, double és bool is az Object-ből származik. A típusozás opcionális: a var-ként deklarált változó automatikusan következtet a típusra, de az olvashatóság és teljesítmény érdekében ajánlott a típusokat explicit megadni.

Alapvető típusok és deklarációk

A Dart támogatja az int, double, String, bool, List, Set, Map, Record, Symbol és Runes típusokat. Nullable típus — bármely típus ? toldalékkal (int?, String?). A ?? operátor (null-aware) a jobb oldali értéket adja vissza, ha a bal oldali null. A kaszkád jelölés (..) lehetővé teszi több metódus meghívását ugyanazon az objektumon a referencia ismétlése nélkül.

dart
// Alapvető típusok és deklarációk Dartban
void main() {
  // Explicit típusozás
  int age = 25;
  double price = 19.99;
  String name = 'Dart';
  bool isValid = true;

  // Null safety — a változó lehet null
  int? nullableAge = null;
  int result = nullableAge ?? 0; // Null-aware operátor

  // Gyűjtemények generikusokkal
  List<String> items = ['Dart', 'Flutter', 'Mobile'];
  Map<String, dynamic> config = {
    'version': '3.0',
    'mode': 'debug',
  };

  // Kaszkád jelölés
  final list = <String>[]
    ..add('one')
    ..add('two')
    ..sort();
}

// Record — névtelen megváltoztathatatlan típus
(String, int) user = ('Alice', 30);
print(user.$1); // 'Alice'

A dynamic típus kikapcsolja a típusellenőrzést — csak JSON vagy dinamikus adatokkal való munka során használja. A Record — új típus a Dart 3.0-ban, amely lehetővé teszi értékek csoportosítását külön osztály létrehozása nélkül. A null-aware operátor ?? — a nullable értékekkel való munka szabványos módja, hosszú if-else ellenőrzéseket helyettesítve.

Osztályok és mixinek

Osztályok Dartban — egyszeres öröklés (extends), többszörös mixineken keresztül (mixin). A Dart nem támogatja az interfészeket különálló koncepcióként — bármely osztály implementálható (implements). Mixin — konstruktor nélküli osztály, amelynek metódusai és mezői a with kulcsszóval bármely osztályhoz hozzáadhatók.

dart
// Osztályok, öröklés és mixinek Dartban
abstract class Animal {
  void sound(); // absztrakt metódus
}

mixin Swimmer {
  void swim() => print('Swimming...');
}

mixin Flyer {
  void fly() => print('Flying...');
}

class Duck extends Animal with Swimmer, Flyer {
  @override
  void sound() => print('Quack!');
}

void main() {
  final duck = Duck();
  duck.sound(); // Quack!
  duck.swim();  // Swimming...
  duck.fly();   // Flying...
}

// Nevesített konstruktor
class Config {
  final String env;

  Config.development() : env = 'dev';
  Config.production()  : env = 'prod';
}

A Duck osztály az Animal-ból származik és két mixint használ — Swimmer és Flyer. Ez a többszörös öröklést demonstrálja a rombuszszerkezet problémái nélkül: a mixinek lineárisan oldódnak fel (super chain). A nevesített konstruktorok (Config.development) — alternatívák a statikus gyári metódusokhoz objektumok létrehozásához előre beállított paraméterekkel.

Aszinkronitás Dartban: Future, Stream és async/await

Aszinkronitás Dartban Future (egyetlen érték), Stream (értékek sorozata) és async/await segítségével valósul meg. A Dart egyszálú event loop modellt használ, hasonlóan a JavaScript-hez, de fontos különbséggel: a hosszú számítások nem blokkolják a UI-t, mivel a Dart kód Isolate-ben — megosztott memória nélküli külön szálon fut.

A Future egy aszinkron műveletet reprezentál, amely egy idő után befejeződik. A Future lehet pending (várakozó), completed with value (sikeres) vagy completed with error (hibás) állapotban. A .then().catchError() lánc — alternatíva az async/await helyett, de az olvashatóság érdekében az await használata ajánlott.

dart
// Aszinkron adatbetöltés Future és Stream segítségével
import 'dart:convert';
import 'package:http/http.dart' as http;

class ApiService {
  final String baseUrl;

  ApiService(this.baseUrl);

  // Future egyetlen kéréshez
  Future<Map<String, dynamic>> fetchUser(int id) async {
    final response = await http.get(
      Uri.parse('$baseUrl/users/$id'),
    );

    if (response.statusCode == 200) {
      return jsonDecode(response.body);
    } else {
      throw Exception('Failed to load user: ${response.statusCode}');
    }
  }

  // Stream adatsorozathoz
  Stream<int> countStream(int max) async* {
    for (var i = 1; i <= max; i++) {
      await Future.delayed(Duration(seconds: 1));
      yield i;
    }
  }
}

void main() async {
  final api = ApiService('https://api.example.com');

  // Az await használata
  final user = await api.fetchUser(1);
  print('User: ${user['name']}');

  // Stream feldolgozása await for segítségével
  await for (final count in api.countStream(5)) {
    print('Count: $count');
  }
}

Az ApiService osztály kétféle aszinkronitást demonstrál: Future egy HTTP kéréshez (egy válasz) és Stream egy szekvenciális számlálóhoz (generátor async* és yield segítségével). A Stream hatékony az érzékelőkkel, geolokációval, Firebase Realtime Database-val való munkához — mindenhol, ahol az adatok folyamatosan érkeznek. Az Isolate külön memóriát használ — az adatok SendPort/ReceivePort-on keresztül kerülnek továbbításra.

Dart és Flutter: alkalmazásarchitektúra

Dart és Flutter egyetlen stack-et alkot: Flutter — UI keretrendszer, Dart — a UI leírásának nyelve. Flutterben minden widget (Widget) — a gombtól a teljes alkalmazásig. A widgetek lehetnek stateful (változtatható állapotúak) és stateless (változatlanok). A Dart deklaratív UI-t ír le: a build() egy widgetfát ad vissza, amelyet a Flutter a Skia (vagy iOS-en Impeller) segítségével renderel.

Flutter alkalmazás szerkezete

A Flutter alkalmazás Dartban a main() → runApp(MyApp()) → MaterialApp részből áll. A MaterialApp tartalmazza az útválasztást (routes), témát (theme) és lokalizációt. Minden képernyő egy Scaffold, amely AppBar-t, Body-t (általában Column/ListView) és BottomNavigationBar-t tartalmaz. Navigáció a Navigator.push/pop vagy nevesített útvonalak segítségével.

dart
// Egyszerű Flutter alkalmazás Dartban
import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Dart Demo',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  int _counter = 0;

  void _increment() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Dart + Flutter')),
      body: Center(
        child: Text('Counter: $_counter'),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _increment,
        child: Icon(Icons.add),
      ),
    );
  }
}

A HomeScreen widget — StatefulWidget belső _counter állapottal. A setState() hívás értesíti a Flutter-t a UI újraépítésének szükségességéről — a Dart kód újraindítja a build()-et, új widgetfát hozva létre. A Flutter hatékonyan összehasonlítja (diff) a régi és új fát, csak a képernyő megváltozott részeit frissítve. A Hot Reload lecseréli a build()-et a _counter állapotának visszaállítása nélkül.

Dart fordítás: JIT vs AOT

A Dart fordítás — hibrid: JIT a fejlesztéshez és AOT a termeléshez. Debug módban a Dart VM elindítja a JIT fordítót, amely a bájtkódot értelmezi a kód forró cseréjének lehetőségével. Release-ben a dart compile exe vagy flutter build natív AOT binárist hoz létre egy adott architektúrához (arm64, x86_64, armv7).

MódFordításVégrehajtási sebességBináris méretHot Reload
DebugJIT (VM)Közepes~50 MBIgen
ReleaseAOT (Native)Maximális~15-20 MBNem
Webdart2jsBöngészőtől függVáltozóDev szerver

A Dart JIT fordítása debug módban ~1 másodperces hot reload-ot biztosít — a fejlesztő az alkalmazás állapotának elvesztése nélkül látja a UI változásokat. Az AOT fordítás a natív Swift/Kotlin alkalmazásokhoz közeli teljesítményt nyújt. A Google adatai szerint a Flutter Dart AOT-on akár 60 FPS animációt is elér középkategóriás eszközökön.

Dart fejlesztő eszközei

A Dart fejlesztő eszközei magukban foglalják a Dart SDK-t (dart fordító, dartanalyzer, dartfmt, pub), a Flutter SDK-t és IDE bővítményeket. A Dart SDK a Flutter SDK-val együtt kerül telepítésre a flutter/bin/cache/dart-sdk mappában. Pub — csomagkezelő, amely a pubspec.yaml fájlt olvassa és a függőségeket a pub.dev-ről tölti le.

Kulcsfontosságú eszközök

dart analyze — statikus elemző, amely ellenőrzi a típusokat, nem használt importokat és potenciális hibákat. dart format — formázó, amely automatikusan egységes stílusba hozza a kódot. dart doc — dokumentációgenerátor /// megjegyzésekből. Flutter DevTools — profilozó a widgetfa, naplók, memória és hálózat megtekintésével. Dart VM Service — futó alkalmazás hibakeresése WebSocketen keresztül.

yaml
# pubspec.yaml — Dart projekt konfigurációja
name: my_flutter_app
description: A new Flutter project.
version: 1.0.0

environment:
  sdk: '>=3.0.0 <4.0.0'

dependencies:
  flutter:
    sdk: flutter
  http: ^1.2.0
  provider: ^6.1.0
  shared_preferences: ^2.2.0
  json_annotation: ^4.8.0

dev_dependencies:
  flutter_test:
    sdk: flutter
  build_runner: ^2.4.0
  json_serializable: ^6.7.0
  flutter_lints: ^3.0.0

A pubspec.yaml fájl írja le a Dart projekt függőségeit. Az environment:sdk mező a Dart verzióját határozza meg — jelenlegi stabil 3.x. Dependencies — fő könyvtárak, dev_dependencies — teszteléshez és kódgeneráláshoz. A json_annotation + json_serializable kódot generál a JSON szerializációhoz a build_runner segítségével. flutter_lints — szabálykészlet az elemző számára.

Gyakran Ismételt Kérdések

Mi az a Dart?

Dart — a Google programozási nyelve (2011), amelyet a Flutter-en történő cross-platform fejlesztésre terveztek. C-szerű szintaxist, szigorú típusozást, JIT és AOT fordítást támogat. Sound null safety (Dart 2.12-től) és aszinkronitás Future és Stream segítségével jellemzi. Mobil, web és asztali alkalmazásokhoz használható.

Miben különbözik a Dart a JavaScript-től?

Dart natív kódba (AOT) vagy JS-be (dart2js) fordul, a JavaScript értelmezésre kerül. A Dart szigorú típusozással rendelkezik sound null safety-vel, beépített osztályokkal és mixinekkel. A Dart aszinkronitása az Isolate-en alapul (külön szálak megosztott memória nélkül), a JS — az event loop-on Web Workers-szel. A Dart AOT teljesítménye 30-50%-kal magasabb, mint a V8 JIT mobil forgatókönyvekben.

Hogyan fordul a Dart mobilalkalmazássá?

Dart AOT-val natív ARM kódba fordul a Dart Native segítségével. Debug módban a Dart VM JIT-t használ hot reload-dal. A Flutter Engine (C++) a UI-t Skia/Impeller segítségével rendereli. Androidhoz — flutter build apk, iOS-hez — flutter build ios. Webes fordítás dart2js-t vagy dart2wasm-t használ. A release APK mérete — 15-20 MB (AAB felosztás nélkül).

Milyen adattípusokat támogat a Dart?

Dart primitív típusokat támogat: int, double, String, bool. Gyűjtemények: List, Set, Map, Record. Speciális: Symbol, Runes, Null. Minden objektum, beleértve a primitíveket is. Null safety: az int? típus engedi a null-t, az int — soha nem null. ??, ??= operátorok a biztonságos null kezeléshez. Generikusok: List<String>, Map<String, dynamic>.

Milyen eszközök szükségesek a Dart fejlesztéshez?

Flutter SDK tartalmazza a Dart SDK-t, a Flutter Engine-t és a widget könyvtárat. IDE — Android Studio vagy VS Code Flutter bővítménnyel. DevTools — profilozó widget inspektorral. Pub.dev — csomagkezelő 45 000+ könyvtárral. dart analyze elemző és dart format formázó — a kód minőségéhez. Build_runner — JSON modellek generálásához.

Összegzés

  • Dart — a Google nyelve a Flutterhez, amely egyesíti a JIT fejlesztést és az AOT teljesítményt
  • Sound null safety a Dart 2.12-től (+3.0) — kötelező védelem a null ellen típus szinten
  • Aszinkronitás Future (egyetlen eredmény), Stream (sorozat), Isolate (párhuzamosság) segítségével
  • Flutter — deklaratív UI keretrendszer, ahol minden widget (StatelessWidget / StatefulWidget)
  • Hot Reload — JIT újratöltés ~1 másodperc alatt az alkalmazás állapotának elvesztése nélkül
  • Pub.dev — csomagökoszisztéma (45 000+), pubspec.yaml-en keresztül kezelve
  • Flutter DevTools — profilozó widget, memória és hálózat inspektorral

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is