flutter StatefulWidget 生命周期

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';

class LifeCyclePage extends StatefulWidget {
  LifeCyclePage({Key? key}) : super(key: key);

  @override
  State<LifeCyclePage> createState() => _LifeCyclePageState();
}

class _LifeCyclePageState extends State<LifeCyclePage> {
  int _counter = 0;
  @override
  void initState() {
    super.initState();
    print("initState");
    SchedulerBinding.instance!.addPostFrameCallback((timeStamp) {
      print("timeStamp=${timeStamp.inMilliseconds}");
    });
  }

  @override
  void setState(VoidCallback fn) {
    super.setState(fn);
    print("setState");
  }

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    print("didChangeDependencies");
  }

  @override
  void didUpdateWidget(covariant LifeCyclePage oldWidget) {
    super.didUpdateWidget(oldWidget);
    print("didUpdateWidget");
  }

  @override
  void deactivate() {
    super.deactivate();
    print("deactivate");
  }

  @override
  void dispose() {
    super.dispose();
    print("dispose");
  }

  @override
  Widget build(BuildContext context) {
    print("build");
    return Scaffold(
      appBar: AppBar(
        title: Text("生命周期"),
      ),
      body: Container(
          color: Colors.white,
          alignment: Alignment.center,
          child: SubLifeCyclePage(
            counter: _counter,
            callback: () {
              setState(() {});
            },
          )),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          _counter++;
          setState(() {});
        },
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}

class SubLifeCyclePage extends StatefulWidget {
  final int counter;
  final VoidCallback? callback;
  SubLifeCyclePage({Key? key, required this.counter, this.callback})
      : super(key: key);

  @override
  State<SubLifeCyclePage> createState() => _SubLifeCyclePageState();
}

class _SubLifeCyclePageState extends State<SubLifeCyclePage> {
  int _counter = 0;
  @override
  void initState() {
    super.initState();
    print("initState");
    SchedulerBinding.instance!.addPostFrameCallback((timeStamp) {
      print("SubLifeCyclePage-timeStamp=${timeStamp.inMilliseconds}");
    });
  }

  @override
  void setState(VoidCallback fn) {
    super.setState(fn);
    print("SubLifeCyclePage-setState");
  }

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    print("SubLifeCyclePage-didChangeDependencies");
  }

  @override
  void didUpdateWidget(covariant SubLifeCyclePage oldWidget) {
    super.didUpdateWidget(oldWidget);
    print("SubLifeCyclePage-didUpdateWidget");
    _counter = widget.counter;
  }

  @override
  void deactivate() {
    super.deactivate();
    print("SubLifeCyclePage-deactivate");
  }

  @override
  void dispose() {
    super.dispose();
    print("SubLifeCyclePage-dispose");
  }

  @override
  Widget build(BuildContext context) {
    print("SubLifeCyclePage-build");
    return Column(
      children: [
        Container(
          child: Text(
            "$_counter",
            style: TextStyle(color: Colors.black, fontSize: 30),
          ),
        ),
        CupertinoButton(
            child: Text("新增"),
            onPressed: () {
              _counter++;
              setState(() {});
              if (widget.callback != null) {
                widget.callback!();
              }
            })
      ],
    );
  }
}

进入life cylcle 页面

flutter: initState
flutter: didChangeDependencies
flutter: build
flutter: initState
flutter: SubLifeCyclePage-didChangeDependencies
flutter: SubLifeCyclePage-build
flutter: timeStamp=229580
flutter: SubLifeCyclePage-timeStamp=229580

点击+号

flutter: setState
flutter: build
flutter: SubLifeCyclePage-didUpdateWidget
flutter: SubLifeCyclePage-build

点击新增

flutter: SubLifeCyclePage-setState
flutter: setState
flutter: build
flutter: SubLifeCyclePage-didUpdateWidget
flutter: SubLifeCyclePage-build

退出页面

flutter: deactivate
flutter: SubLifeCyclePage-deactivate
flutter: SubLifeCyclePage-dispose
flutter: dispose
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容