A Class, vagyis osztály szoros összefüggésben van azzal, hogy a Dart egy objektum-orientált nyelv. A Dart-ban minden objektum. Még az olyan primitív értékek, mint a számok vagy a szövegek is objektumok.
Az objektumok pedig memóriában tárolt adatok, adatszerkezetek. Ezek az adatok pedig változók, paraméterek, függvények, metódusok.
Az objektumok segítenek szervezni, ugyanakkor elválasztani egymástól az adatot és a logikát.
A Class egy objektum sablon. Vagyis az objektumokat az osztályokból származtatjuk. Egy objektum az osztálynak egy példánya.
Az osztályokban tároljuk az objektumok által használt tulajdonságokat és metódusokat.
Az összes beépített („gyári”) widget (pl: Scaffold), csakúgy mint a konfigurációs objektumok (más néven konstruktorok, pl: LinearGradient) gyakorlatilag tehát osztályok, amik objektumokká válnak azáltal, hogy függvényként meghívjuk őket, vagyis egészen pontosan meghívjuk a konstruktor függvényét az adott osztálynak. Ez egyébként az osztályok példányosítása.
Class létrehozása
Az osztály létrehozása a class kulcsszóval történik, melyet az osztály neve követ. Ez után pedig meg kell adni egy { } kapcsosszárójel párt, amin belül az osztály „tartalma” lesz.
class Expense {
}
Osztályunkhoz például négy darab tulajdonságot hozunk létre:
class Expense {
final String id; // egyedi id
final String title;
final double amount;
final DateTime date;
}
Ezen kívül kell egy konstruktor is, aminek ugyanaz a neve, mint magának az osztálynak. A konstruktoron belül a this kulcsszóval minden egyes tulajdonságot felsorolunk. A tulajdonságok itt, mint paraméterek jelentkeznek, amik lehetnek név alapján elérhetőek és pozíció alapján elérhetőek. Ennek pontos magyarázatát ez a bejegyzés tartalmazza.
class Expense {
Expense({
required this.title,
required this.amount,
required this.date,
});
final String id; // egyedi id
final String title;
final double amount;
final DateTime date;
}
A required kulcsszóval azt jelezzük a paraméterek felsorolása előtt, hogy az adott paramétert kötelezően meg kell adni.
Inicializáló listák
Látható, hogy a konstruktor nem tartalmazza az id-t, mint paramétert. Az id-t egyébként egyedi azonosítóként használjuk.
Nos, a Dart-ban az ún. inicializáló listákat lehet arra használni, hogy azok az osztály tulajdonságok is értéket kapjanak, amiket nem tartalmaz a konstruktor.
Az inicializáló listát a konstruktor metódus ) zárójele után kell kettősponttal elválasztva megadni:
Expense({
required this.title,
required this.amount,
required this.date,
}) : id = uuid.v4();
A példában az id tulajdonság kapott egy kezdőértéket, ahogyan a kódrészlet is mutatja. Magyarul elvégeztük az inicializálását, azaz kezdőértéket adtunk neki. Jelen pillanatban az uuid objektum v4() metódusának meghívásával egyedi azonosítót generáltunk. Ez az id kezdőértéke.
Osztály használata
Először is importálni kell azon a fájlon belül, ahol használni szeretnénk:
import 'package:expense_tracker/models/expense.dart';
A használathoz létrehozunk egy myExpenses nevű lista változót. Generikus típus megadással megmondjuk neki, hogy Expense típusú listát hozunk létre ( List<Expense> ). Aztán a listán belül veszünk fel néhány értéket az Expense() konstruktorral:
final List<Expense> myExpenses = [
Expense(
title: 'Flutter',
amount: 19.99,
date: DateTime.now(),
),
Expense(
title: 'Cimema',
amount: 15.69,
date: DateTime.now(),
),
];