Sobes.tech
Middle

Ի՞նչ է Stateful widget-ի կյանքի ցիկլը Flutter-ում։

sobes.tech AI

Պատասխան AI-ից

  1. createState(): Ստեղծում է State օբյեկտ widget-ի համար:
  2. initState(): Կարգավորում է վիճակը, բաժանորդագրվում է stream-երին, անիմացիաներին: Կատարվում է մեկ անգամ՝ widget-ի ստեղծման ժամանակ:
  3. didChangeDependencies(): Կատարվում է initState()-ից հետո և կախվածությունների փոփոխության ժամանակ (օրինակ՝ InheritedWidget):
  4. build(): Օգտագործողի ինտերֆեյսի կառուցում: Կատարվում է սկզբնական և վիճակի փոփոխության ժամանակ (setState()).
  5. didUpdateWidget(): Կատարվում է երբ ծնող widget-ը թարմացնում է կոնֆիգուրացիան:
  6. setState(): Հաղորդում է ֆրեյմվորկին փոփոխության մասին, ինչը հանգեցնում է վերականգնման (build):
  7. deactivate(): Կատարվում է երբ State-ը հեռացվում է widget ծառից (գուցե ժամանակավոր, օրինակ՝ tabs փոխելիս):
  8. dispose(): Զարգացման ռեսուրսների ազատում՝ stream-երից բաժանորդագրության չեղարկում, անիմացիոն կոնտրոլերների հեռացում: Կատարվում է նախքան State-ի վերջնական հեռացումը հիշողությունից:
// Օրինակ `setState`-ի օգտագործման, որը ցույց է տալիս վիճակի փոփոխությունը
class MyStatefulWidget extends StatefulWidget {
  @override
  _MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}

class _MyStatefulWidgetState extends State<MyStatefulWidget> {
  int _counter = 0;

  @override
  void initState() {
    super.initState();
    // Կարգավորում
    // print('initState');
  }

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    // Զависությունները փոխվել են
    // print('didChangeDependencies');
  }

  @override
  void didUpdateWidget(MyStatefulWidget oldWidget) {
    super.didUpdateWidget(oldWidget);
    // Widget-ը թարմացվել է
    // print('didUpdateWidget');
  }

  void _incrementCounter() {
    setState(() {
      // Վիճակի փոփոխություն, որը հանգեցնում է վերականգնման
      _counter++;
      // print('setState: counter = $_counter');
    });
  }

  @override
  Widget build(BuildContext context) {
    // UI կառուցում
    // print('build');
    return Scaffold(
      appBar: AppBar(
        title: Text('Counter Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }

  @override
  void deactivate() {
    super.deactivate();
    // Widget դեակտիվացված
    // print('deactivate');
  }

  @override
  void dispose() {
    // ռեսուրսների ազատում
    // print('dispose');
    super.dispose();
  }
}