Sobes.tech
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 State obyekti 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),
    );
  }
}