美文网首页
Flutter生命周期

Flutter生命周期

作者: cj小牛 | 来源:发表于2021-07-12 14:37 被阅读0次

生命周期

  • 就是一连串的回掉方法(函数)。

作用

  • 监听widget 的事件
  • 初始化数据
    ** 创建数据
    ** 发送网络请求
  • 内存管理
    ** 销毁数据,监听者,Timer 等

Widget的生命周期

  • Stateless
    ** 1. 构造方法
    ** 2. bulid 方法
    *Stateful(包含widget ,和state)
    ** Widget 的构造方法
    ** Widget 的CreateState
    ** State 的构造放过
    ** State 的initState 方法
    ** State 的build 方法
    ** void deactivate() { } 将要销毁的时候
    ** Dispose 方法(Widget 消失的时候)
    ** didChangeDependencies(){}改变数据用的 下面是代码的例子。

class MyData extends InheritedWidget 相当于是iOS NSUserDefault 的数据存储。但是这个会在 children: <Widget>[
MyData(data: _counter ,child: Test1()),
],
在这个节点的时候会销毁

  import 'package:flutter/material.dart';
    void main() {
      runApp(MyApp());
  }
  class MyData extends InheritedWidget{
  int? data;
  MyData({this.data,required Widget child}) : super(child: child);
  static MyData? of(BuildContext context){
 return context.dependOnInheritedWidgetOfExactType();
}

@override
bool updateShouldNotify(MyData oldWidget) {
// TODO: implement updateShouldNotify

return oldWidget.data != data;
}


}

class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
  return MaterialApp(
  title: 'Flutter Demo',
  theme: ThemeData(
    primarySwatch: Colors.blue,
  ),
  home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}

class MyHomePage extends StatefulWidget {
MyHomePage({Key? key, required this.title}) : super(key: key);


final String title;

@override
_MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;

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

@override
Widget build(BuildContext context) {
  return Scaffold(
  appBar: AppBar(
    title: Text(widget.title),
  ),
  body: Center(
    child: Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[

        MyData(data: _counter ,child: Test1()),


      ],
    ),
  ),
  floatingActionButton: FloatingActionButton(
    onPressed: _incrementCounter,
    tooltip: 'Increment',
    child: Icon(Icons.add),
  ), // This trailing comma makes auto-formatting nicer for build methods.
);
}
}

class Test1 extends StatelessWidget {
@override
Widget build(BuildContext context) {
  return Test2();
}
}
class Test2 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Test3();
}
}

class Test3 extends StatefulWidget {
@override
_Test3State createState() => _Test3State();
}

class _Test3State extends State<Test3> {
@override
Widget build(BuildContext context) {
return Container(
  child: Text(MyData.of(context)!.data.toString()),
);
}
@override
void didChangeDependencies() {
// TODO: implement didChangeDependencies
  super.didChangeDependencies();
}
}

Widget 的渲染

  • 并不是所有的Widget 都会被独立渲染,只有继承RenderObjectWidget 的才会创建RanderObject 对象。
  • Widget 树 Element 树 render树
  • 没有一个Widget 都会创建一个element 隐式调用creatElement 方法,Element 加入Element 树(三种Element,renderElement ,stateLess ,statefull)

renderElement
** renderelement 主要创建RenderObjcet对象
** Flutter 调用mount 方法,creatRenderObjdect 方法

stateLess
** 继承CommponentElement 方法。
** CommponentElement 会调state 用build() 方法来将element 作为参数刷新数据。
statefull
** 继承CommponentElement 方法。
** 调用createState 方法 将Wiget 复制给state
** CommponentElement 会调state 用build() 方法来将element 作为参数刷新数据。

相关文章

网友评论

      本文标题:Flutter生命周期

      本文链接:https://www.haomeiwen.com/subject/hzrrpltx.html