美文网首页
2023-02-02关于flutter生命周期的几个方法 ini

2023-02-02关于flutter生命周期的几个方法 ini

作者: 我是小胡胡123 | 来源:发表于2023-02-01 16:57 被阅读0次

关于flutter生命周期的几个方法 initState、didChangeDependencies、dispose、didUpdateWidget

didChangeDependencies和dispose是配对的。
didChangeDependencies 会在不仅仅是initState后会调用,
修改widget key会删除和创建新的widget,调用dispose和didChangeDependencies。
不修改key则调用didUpdateWidget

测试代码:


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

  @override
  State<TitleWidget> createState() => _TitleWidgetState();
}

class _TitleWidgetState extends State<TitleWidget> {
  @override
  Widget build(BuildContext context) {
    return Container(
      height: 44,
      child: Stack(
        children: <Widget>[
     
          Align(
            alignment: Alignment.center,
            child: GestureDetector(
              onTap: () {
                setState(() {}); //
              },
              child: TestWidget(
                key: GlobalKey(),
              ),
            ),
          ),
          Container(),
        ],
      ),
    );
  }

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

  @override
  void didUpdateWidget(covariant TitleWidget oldWidget) {
    // TODO: implement didUpdateWidget
    super.didUpdateWidget(oldWidget);
    print('didUpdateWidget');
  }

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    print('initstate');
  }
}
class TestWidget extends StatefulWidget {
  const TestWidget({Key? key}) : super(key: key);

  @override
  State<TestWidget> createState() => _TestWidgetState();
}

class _TestWidgetState extends State<TestWidget> {
  @override
  void initState() {
    // TODO: implement initState
    super.initState();
  }

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

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

  @override
  void didUpdateWidget(covariant TestWidget oldWidget) {
    // TODO: implement didUpdateWidget
    super.didUpdateWidget(oldWidget);
    print('didUpdateWidget');
  }

  @override
  Widget build(BuildContext context) {
    return Text(
      '1234',
      textAlign: TextAlign.center,
      maxLines: 1,
      overflow: TextOverflow.ellipsis,
      style: TextStyle(
 
          fontSize: 18,
          fontWeight: FontWeight.bold),
    );
  }
}

相关文章

网友评论

      本文标题:2023-02-02关于flutter生命周期的几个方法 ini

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