Sobes.tech
Junior

Kādi ir „Flutter“ widgetu veidi?

sobes.tech AI

Atbilde no AI

Flutter vidžeti ir sadalīti divās galvenajās kategorijās:

  • StatelessWidget: Vidžeti, kuru stāvoklis pēc sākotnējās būves nemainās. Tie apraksta UI daļu, kas nav atkarīga no reāllaika datiem.
  • StatefulWidget: Vidžeti ar maināmu stāvokli. Tie ir saistīti ar State objektu, kas satur maināmus datus un nodrošina mehānismu, lai pārbūvētu vidžetu, mainoties stāvoklim.

Papildus, vidžeti var klasificēt pēc to paredzētā mērķa:

  • Layout vidžeti: Kontrolē citu vidžetu izvietojumu ekrānā (piemēram, Row, Column, Stack).
  • Material Components / Cupertino vidžeti: Nodrošina gatavus UI elementus, kas atbilst Material Design (Android) vai Cupertino (iOS) vadlīnijām (piemēram, AppBar, Button, TextField).
  • Input vidžeti: Ļauj lietotājam ar lietotni mijiedarboties (piemēram, TextField, Checkbox, Slider).
  • Interactive vidžeti: Reaģē uz lietotāja žestiem (piemēram, GestureDetector, InkWell).
  • Painting & Effects vidžeti: Pielieto grafiskus efektus (piemēram, Opacity, ClipRRect).
  • Scrolling vidžeti: Nodrošina satura ritināšanu (piemēram, ListView, GridView).

Atkarībā no izveides veida, vidžeti var būt:

  • Primitīvi: Pamatbūvniecības blok elementi (piemēram, Container, Text, Icon).
  • Kombinēti: Sastāv no citiem vidžetiem.
// Piemērs ar StatefulWidget
class CounterWidget extends StatefulWidget {
  @override
  _CounterWidgetState createState() => _CounterWidgetState();
}

class _CounterWidgetState extends State<CounterWidget> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      // Maina stāvokli un sāk jaunu zīmēšanu
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text('Skaitītājs:'),
        Text(
          '$_counter',
          style: Theme.of(context).textTheme.headline4,
        ),
        FloatingActionButton(
          onPressed: _incrementCounter,
          tooltip: 'Palielināt',
          child: Icon(Icons.add),
        ),
      ],
    );
  }
}
// Piemērs ar StatelessWidget
class TitleWidget extends StatelessWidget {
  final String title;

  TitleWidget({required this.title});

  @override
  Widget build(BuildContext context) {
    return Text(
      title,
      style: TextStyle(fontSize: 24),
    );
  }
}