Junior
Flutterda qanday turdagi vidjetlar mavjud?
sobes.tech AI
AIdan javob
Flutter'da widgetler iki əsas kateqoriyaya bölünür:
- StatelessWidget: Vəziyyəti ilkin qurulduqdan sonra dəyişməyən widgetlər. Onlar istifadəçi interfeysinin bir hissəsini təsvir edir və işləmə zamanı verilənlərdən asılı deyil.
- StatefulWidget: Dəyişən vəziyyətə malik widgetlər. Onların əlaqəli
Stateobyekti var, bu obyekt dəyişkən məlumatları saxlayır və vəziyyət dəyişdikdə widgetın yenidən qurulması mexanizmini təmin edir.
Bundan əlavə, widgetlər məqsədinə görə təsnif edilə bilər:
- Layout widgetləri: Ekranda digər widgetlərin yerləşdirilməsini idarə edir (məsələn,
Row,Column,Stack). - Material komponentləri / Cupertino widgetləri: Material Design (Android) və ya Cupertino (iOS) təlimatlarına uyğun hazır UI elementləri təmin edir (məsələn,
AppBar,Button,TextField). - Input widgetləri: İstifadəçinin tətbiq ilə qarşılıqlı əlaqəsini təmin edir (məsələn,
TextField,Checkbox,Slider). - Interaktiv widgetlər: İstifadəçi hərəkətlərinə cavab verir (məsələn,
GestureDetector,InkWell). - Rəsm və effekt widgetləri: Qrafik effektlər tətbiq edir (məsələn,
Opacity,ClipRRect). - Scroll widgetləri: Məzmunun sürüşməsini təmin edir (məsələn,
ListView,GridView).
Yaradılsı üsuluna görə, widgetlər aşağıdakı kimi ola bilər:
- Primitivlər: Əsas tikinti blokları (məsələn,
Container,Text,Icon). - Kompozitlər: Digər widgetlərdən ibarətdir.
// StatefulWidget nümunəsi
class CounterWidget extends StatefulWidget {
@override
_CounterWidgetState createState() => _CounterWidgetState();
}
class _CounterWidgetState extends State<CounterWidget> {
int _counter = 0;
void _incrementCounter() {
setState(() {
// Vəziyyəti dəyiş və yenidən çək
_counter++;
});
}
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Sayğac:'),
Text(
'$_counter',
style: Theme.of(context).textTheme.headline4,
),
FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Artır',
child: Icon(Icons.add),
),
],
);
}
}
// StatelessWidget nümunəsi
class TitleWidget extends StatelessWidget {
final String title;
TitleWidget({required this.title});
@override
Widget build(BuildContext context) {
return Text(
title,
style: TextStyle(fontSize: 24),
);
}
}