Dart & Flutter 相关

flutter-State的生命周期

2021-03-30  本文已影响0人  浮华_du
image.gif
class LifeCyclePage extends StatefulWidget {
  @override
  _LifeCyclePageState createState() => _LifeCyclePageState();

  @override
  StatefulElement createElement() {
    // print("page1--createElement");
    return super.createElement();
  }
}

class _LifeCyclePageState extends State<LifeCyclePage>
    with WidgetsBindingObserver {
  String title = "点击我";

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    print('page1--initState');
    WidgetsBinding.instance.addObserver(this);
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    print(state.toString());
  }

  @override
  void didChangeDependencies() {
    print('page1--didChangeDependencies');
    super.didChangeDependencies();
  }

  @override
  void didUpdateWidget(LifeCyclePage oldWidget) {
    print('page1--didUpdateWidget');
    super.didUpdateWidget(oldWidget);
  }

  @override
  Widget build(BuildContext context) {
    print('page1--build');
    return Scaffold(
      appBar: AppBar(
        // Here we take the value from the MyHomePage object that was created by
        // the App.build method, and use it to set our appbar title.
        title: Text("生命周期示例"),
      ),
      body: Column(
        children: <Widget>[
          GestureDetector(
            child: new Text(title ?? ""),
            onTap: () {
              setState(() {
                title = "我变化了";
              });
            },
          ),
         ChildStatefulWidget(),
          FlatButton(
              color: Colors.grey,
              onPressed: () {
                Navigator.of(context)
                    .push(new MaterialPageRoute(builder: (BuildContext c) {
                  return new LifeCyclePage2();
                }));
              },
              child: Text("跳转页面")),
        ],
      ),
    );
  }

  @override
  void reassemble() {
    // TODO: implement reassemble
    super.reassemble();
    print('page1--reassemble');
  }

  @override
  void deactivate() {
    // TODO: implement deactivate
    super.deactivate();
    print('page1--deactivate');
  }

  @override
  void dispose() {
    // TODO: implement dispose
    super.dispose();
    //WidgetsBinding.instance.addObserver(this);
    print('page1--dispose');
  }
}

class ChildStatefulWidget extends StatefulWidget {
//  当这个 Widget 首次插入到树中时,框架会调用其 createState 函数以创建一个新的_ChildStatefulWidgetState实例来与该树中的相应位置关联
//  当这个widget的父级重建时,父级将创建一个新的ChildStatefulWidget实例,但是Flutter框架将重用已经在树中的_ChildStatefulWidgetState实例,
//  而不是再次调用createState创建一个新的State。
  @override
  _ChildStatefulWidgetState createState() {
    print("child--createState");
    return _ChildStatefulWidgetState();
  }
}

class _ChildStatefulWidgetState extends State<ChildStatefulWidget> {
  String title = "点击我";

  @override
  Widget build(BuildContext context) {
    print('child--build');
    return GestureDetector(
      child: new Text(title ?? ""),
      onTap: () {
        setState(() {
          title = "我变化了";
        });
      },
    );
  }

  @override
  void initState() {
    print('child--initState');
    super.initState();
  }

  @override
  void didChangeDependencies() {
    print('child--didChangeDependencies');
    super.didChangeDependencies();
  }

  @override
  void didUpdateWidget(ChildStatefulWidget oldWidget) {
    print('child--didUpdateWidget');
    super.didUpdateWidget(oldWidget);
  }

  @override
  void reassemble() {
    print('child--reassemble');
    super.reassemble();
  }

  @override
  void deactivate() {
    print('child--deactivate');
    super.deactivate();
  }

  @override
  void dispose() {
    print('child--dispose');
    super.dispose();
    //WidgetsBinding.instance.addObserver(this);
  }
}

class LifeCyclePage2 extends StatefulWidget {
  @override
  _LifeCyclePageState createState(){
    return new _LifeCyclePageState();
  }

  @override
  StatefulElement createElement() {
    // TODO: implement createElement
//    print("page2--createElement");
    return super.createElement();
  }
}

class _LifeCyclePageState extends State<LifeCyclePage2> with WidgetsBindingObserver {
  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    print('page2---initState');
    WidgetsBinding.instance.addObserver(this);
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    print(state.toString());
  }

  @override
  void didChangeDependencies() {
    // TODO: implement didChangeDependencies
    super.didChangeDependencies();
    print('page2---didChangeDependencies');
  }

  @override
  void didUpdateWidget(LifeCyclePage2 oldWidget) {
    // TODO: implement didUpdateWidget
    super.didUpdateWidget(oldWidget);
    print('page2---didUpdateWidget');
  }

  @override
  Widget build(BuildContext context) {
    print('page2---build');
    // TODO: implement build
    return Scaffold(
      appBar: AppBar(
        // Here we take the value from the MyHomePage object that was created by
        // the App.build method, and use it to set our appbar title.
        title: Text("生命周期示例2"),
      ),
    );
  }

  @override
  void reassemble() {
    // TODO: implement reassemble
    super.reassemble();
    print('page2---reassemble');
  }

  @override
  void deactivate() {
    // TODO: implement deactivate
    super.deactivate();
    print('page2---deactivate');
  }

  @override
  void dispose() {
    // TODO: implement dispose
    super.dispose();
    //WidgetsBinding.instance.addObserver(this);
    print('page2---dispose');
  }
}


进入页面1:
I/flutter (26059): page1--initState
I/flutter (26059): page1--didChangeDependencies
I/flutter (26059): page1--build
I/flutter (26059): child--createState
I/flutter (26059): child--initState
I/flutter (26059): child--didChangeDependencies
I/flutter (26059): child--build

点击 第一个"点击我": setState
I/flutter (26059): page1--build
I/flutter (26059): child--didUpdateWidget
I/flutter (26059): child--build

点击 第二个"点击我":
I/flutter (26059): child--build

跳转页面2:
I/flutter (26059): page2---initState
I/flutter (26059): page2---didChangeDependencies
I/flutter (26059): page2---build

返回页面1:
I/flutter (26059): page2---deactivate
I/flutter (26059): page2---dispose

退出页面1:
I/flutter (26059): page1--deactivate
I/flutter (26059): child--deactivate
I/flutter (26059): child--dispose
I/flutter (26059): page1--dispose

上一篇 下一篇

猜你喜欢

热点阅读