Gyakori feladat különféle adatok átadása widgetnek, osztálynak. Ahhoz, hogy egy widget adatot tudjon fogadni, két dolgot kell tenni.
Osztály változó, tulajdonság
Először is létre kell hozni egy helyi (lokális) változót, vagyis osztály tulajdonságot ennek az adatnak.
final List<String> chosenAnswers;
A példából látszik, hogy a chosenAnswers tulajdonság List típusú, ami azt jelenti, hogy lista elemeket tartalmaz. Ráadásul generikus típust adtunk meg neki. Egy olyan lista típus, ami String típusú elemeket vár.
Konstruktornak paraméter
A másik teendő az, hogy a konstruktorban fel kell venni azt a paramétert, amiben az adat megérkezik majd kívülről. Az, hogy ez a paraméter nevesített, vagy pozicionális paraméter, az elsősorban egyéni ízléstől függ.
Tehát az első lépés, hogy felvesszük a paramétert, ami most legyen egy nevesített paraméter, tehát a konstruktoron belül a kötelező super.key mellé kerül a { }-en belül:
const ResultsScreen({super.key, chosenAnswers});
Ez még nem elég, mert össze is kell kötni az előzőleg felvett osztálytulajdonsággal. Erre alkalmas a this kulcsszó:
const ResultsScreen({super.key, this.chosenAnswers});
Sőt itt még mindig nem tudunk megállni, mert a nevesített paraméterek alapból nem kötelezőek. Tehát null értéket is felvehetnek, amire a VSCode fel is hívja a figyelmünket:
Ezért a required kulcsszóval kötelezővé kell tenni a paraméter használatát:
const ResultsScreen({super.key, required this.chosenAnswers});
Adat átadása
Végül nem maradt más hátra, mint az adat átadása.
Valahol akár egy másik widgetben előállt egy lista (selectedAnswers), amit át akarunk adni ennek a widgetnek.
screenWidget = ResultsScreen(
chosenAnswers: selectedAnswers,
);
Mivel nevesített paramétert hoztunk létre a nevével (chosenAnswers) adjuk át, és nem csak az értéket. Tehát „név: érték” formában.