Junior
Milyen típusú widgetek léteznek a Flutterben?
sobes.tech MI
Válasz az MI-től
A Flutterben a widgetek két fő kategóriába sorolhatók:
- StatelessWidget: Olyan widgetek, amelyek állapota nem változik az első összeállítás után. Ezek az UI egy részét írják le, amely nem függ futási adatoktól.
- StatefulWidget: Változtatható állapotú widgetek. Kapcsolódó
Stateobjektumuk van, amely tartalmazza a változtatható adatokat, és mechanizmust biztosít az újrarajzoláshoz, amikor az állapot változik.
Ezen kívül, a widgeteket céljuk szerint is osztályozhatjuk:
- Elrendezés widgetek: Más widgetek elhelyezését irányítják a képernyőn (pl.
Row,Column,Stack). - Material komponensek / Cupertino widgetek: Kész UI elemeket nyújtanak, amelyek megfelelnek a Material Design (Android) vagy Cupertino (iOS) irányelveinek (pl.
AppBar,Button,TextField). - Bemeneti widgetek: Lehetővé teszik a felhasználó számára az alkalmazással való interakciót (pl.
TextField,Checkbox,Slider). - Interaktív widgetek: Reagálnak a felhasználói gesztusokra (pl.
GestureDetector,InkWell). - Festés és effektus widgetek: Grafikus effektusokat alkalmaznak (pl.
Opacity,ClipRRect). - ** Görgethető widgetek:** Tartalom görgetését biztosítják (pl.
ListView,GridView).
A létrehozás módja szerint a widgetek lehetnek:
- Primitív: Alapvető építőelemek (pl.
Container,Text,Icon). - Összetett: Más widgetekből állnak.
// Példa StatefulWidget
class CounterWidget extends StatefulWidget {
@override
_CounterWidgetState createState() => _CounterWidgetState();
}
class _CounterWidgetState extends State<CounterWidget> {
int _counter = 0;
void _incrementCounter() {
setState(() {
// Állapot módosítása és újrarajzolás
_counter++;
});
}
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Számláló:'),
Text(
'$_counter',
style: Theme.of(context).textTheme.headline4,
),
FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Növel',
child: Icon(Icons.add),
),
],
);
}
}
// Példa StatelessWidget
class TitleWidget extends StatelessWidget {
final String title;
TitleWidget({required this.title});
@override
Widget build(BuildContext context) {
return Text(
title,
style: TextStyle(fontSize: 24),
);
}
}