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