Junior
Ի՞նչ տեսակների վիդջեթներ կան Flutter-ում։
sobes.tech AI
Պատասխան AI-ից
Flutter-ում վիդջեթները բաժանվում են երկու հիմնական կատեգորիաների՝
- StatelessWidget: Վիդջեթներ, որոնց վիճակը չի փոխվում նախնական հավաքումից հետո։ Նրանք նկարագրում են UI-ի մաս, որը կախված չէ ռեալ-թայմ տվյալներից։
- StatefulWidget: Վիդջեթներ փոփոխական վիճակով։ Նրանք ունեն կապված
Stateօբյեկտ, որը պարունակում է փոփոխական տվյալներ և ապահովում է մեխանիզմ՝ վիդջեթի վերականգնում վիճակի փոփոխության դեպքում։
Բացի այդ, վիդջեթները կարելի է դասակարգել ըստ դրանց նշանակության:
- Layout վիդջեթներ: Կառավարում են այլ վիդջեթների տեղադրությունը էկրանին (օրինակ,
Row,Column,Stack)։ - Material Components / Cupertino վիդջեթներ: Առաջարկում են պատրաստ UI տարրեր, որոնք համապատասխան են Material Design (Android) կամ Cupertino (iOS) ուղեցույցներին (օրինակ,
AppBar,Button,TextField)։ - Input վիդջեթներ: Позволяют пользователю взаимодействовать с приложением (օրինակ,
TextField,Checkbox,Slider)։ - Interactive վիդջեթներ: Գործում են օգտագործողի շարժումների վրա (օրինակ,
GestureDetector,InkWell)։ - Painting & Effects վիդջեթներ: Կիրառում են գրաֆիկական էֆեկտներ (օրինակ,
Opacity,ClipRRect)։ - Scrolling վիդջեթներ: ապահովում են բովանդակության սքրոլինգ (օրինակ,
ListView,GridView)։
Ստեղծման եղանակով, վիդջեթները կարող են լինել՝
- Պրիմիտիվ: Հիմնական շինարարական տարրեր (օրինակ,
Container,Text,Icon)։ - Կոմպոզիցիոն: կազմված այլ վիդջեթներից։
// Օրինակ StatefulWidget
class CounterWidget extends StatefulWidget {
@override
_CounterWidgetState createState() => _CounterWidgetState();
}
class _CounterWidgetState extends State<CounterWidget> {
int _counter = 0;
void _incrementCounter() {
setState(() {
// Փոխում ենք վիճակը և սկսում նորից նկարել
_counter++;
});
}
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Հաշվիչ:'),
Text(
'$_counter',
style: Theme.of(context).textTheme.headline4,
),
FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Ավելացնել',
child: Icon(Icons.add),
),
],
);
}
}
// Օրինակ StatelessWidget
class TitleWidget extends StatelessWidget {
final String title;
TitleWidget({required this.title});
@override
Widget build(BuildContext context) {
return Text(
title,
style: TextStyle(fontSize: 24),
);
}
}