Flutter生命周期详解

发布时间:2023-05-23

一、生命周期概述

Flutter生命周期可以分为三个阶段:启动阶段、运行阶段和销毁阶段。

  • 启动阶段:创建应用程序并初始化应用程序需要的所有资源。
  • 运行阶段:应用程序已经被启动,可以与用户进行互动。
  • 销毁阶段:应用程序被销毁,释放所有资源。

二、启动阶段

1、main函数执行

当应用程序启动时,Flutter首先执行main函数。在这个函数中,我们通常初始化自定义组件和数据模型,以及注册应用程序的根部件。例如:

void main() {
   runApp(MyApp());
}

2、runApp函数执行

runApp函数被称为根部件,在这个函数中,我们可以创建一个根部件,并将它放在应用程序的底层。这个根部件将由框架负责创建和维护。例如:

class MyApp extends StatelessWidget {
   const MyApp({Key? key}) : super(key: key);
   @override
   Widget build(BuildContext context) {
       return MaterialApp(
           title: 'My App',
           home: Scaffold(
               appBar: AppBar(
                   title: Text('My App'),
               ),
               body: MyWidget(),
           ),
       );
   }
}

3、调用StatefulWidget的createState方法

当我们创建StatefulWidget时,框架会调用其createState方法。在这个函数中,我们可以初始化组件状态,并创建一个维护组件状态的State对象。例如:

class MyWidget extends StatefulWidget {
   const MyWidget({Key? key}) : super(key: key);
   @override
   _MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
   int _counter = 0;
   void _incrementCounter() {
       setState(() {
           _counter++;
       });
   }
   @override
   Widget build(BuildContext context) {
       return Center(
           child: Column(
               mainAxisAlignment: MainAxisAlignment.center,
               children: <Widget>[
                   Text('You have clicked the button $_counter times.'),
                   ElevatedButton(
                       onPressed: _incrementCounter,
                       child: Text('Click me!'),
                   ),
               ],
           ),
       );
   }
}

三、运行阶段

1、调用build方法

在Flutter生命周期的运行阶段,框架会调用每个组件的build方法来构建UI界面。在build方法中,我们可以根据组件状态来动态构建UI界面。例如:

@override
Widget build(BuildContext context) {
   return Center(
       child: Column(
           mainAxisAlignment: MainAxisAlignment.center,
           children: <Widget>[
               Text('You have clicked the button $_counter times.'),
               ElevatedButton(
                   onPressed: _incrementCounter,
                   child: Text('Click me!'),
               ),
           ],
       ),
   );
}

2、调用StatefulWidget的setState方法

当我们需要更新组件状态时,我们可以调用StatefulWidget的setState方法。调用这个方法将会触发build方法被调用。例如:

void _incrementCounter() {
   setState(() {
       _counter++;
   });
}

四、销毁阶段

1、调用State的dispose方法

在销毁阶段,框架会调用每个State对象的dispose方法。在这个方法中,我们可以释放所有资源,例如:取消订阅事件、释放控制器等。例如:

@override
void dispose() {
   _controller.dispose();
   super.dispose();
}

五、总结

本文介绍了Flutter生命周期的各个阶段,以及每个阶段的作用。同时,我们提供了代码示例帮助您更好地理解Flutter生命周期。我们希望这篇文章对您学习Flutter开发有所帮助。