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
Stateobjektu, 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),
);
}
}