在Flutter中initState之后立即调用didUpdateWidget

时间:2020-03-07 22:20:53

标签: flutter statefulwidget

根据Flutter Documentation

只要小部件配置发生更改,就会调用

didUpdateWidget

但是,在下面的代码中,didUpdateWidget首次在initState之后被调用。

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Test(),
    );
  }
}

class Test extends StatefulWidget {
  @override
  _TestState createState() => _TestState();
}

class _TestState extends State<Test> {

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

  @override
  void didUpdateWidget(Test oldWidget) {
    print("didUpdateWidget called");
    super.didUpdateWidget(oldWidget);
  }

  @override
  Widget build(BuildContext context) {
    return Container();
  }
}


// output
//
// initState called
// didUpdateWidget called

有人可以描述为什么会这样吗?以及如何比较整个oldWidgetwidget

谢谢

更新
正如@pskink所提到的,didUpdateWidget不是在initState之后立即调用,而是在第一次构建之后

另一个问题是,为什么在第一次构建后使用以下代码调用它:

    print("didUpdateWidget called");   <--
    super.didUpdateWidget(oldWidget);  <--

但是如果我在super.didUpdateWidget(oldWidget);之后打出print,它就可以正常工作。

0 个答案:

没有答案