GardenMobile & interfaces

Observing Flutter widget updates in lifecycle logs

An earlier parent-property experiment around initState, didUpdateWidget, build, and disposal.

A widget receiving another configuration is different from a completely new state object being created. The original experiment logged lifecycle methods while a parent changed the child’s properties:

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


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


class _HomeScreenBodyState extends State<HomeScreenBody> {
  int value = 1;

  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        FlatButton(
          onPressed: () async {
            setState(() {
              value++;
            });
          },
          child: const Text('Press me!'),
        ),
        TestWidget(value: value),
      ],
    );
  }
}

class TestWidget extends StatefulWidget {
  final int value;


  const TestWidget({Key key, this.value}) : super(key: key);


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


class _TestWidgetState extends State<TestWidget> {
  @override
  Widget build(BuildContext context) {
    print('_TestWidgetState build');
    return Text('${widget.value}');
  }


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


  @override
  void didUpdateWidget(TestWidget oldWidget) {
    super.didUpdateWidget(oldWidget);
    print('_TestWidgetState didUpdateWidget');
  }


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

The recorded sequence was:

- First run:
flutter: [D]  _HomePageState onActive /
flutter: _TestWidgetState initState
flutter: _TestWidgetState didChangeDependencies
flutter: _TestWidgetState build
flutter: _TestWidgetState didUpdateWidget
flutter: _TestWidgetState build

- When press call api to setState
flutter: _TestWidgetState didUpdateWidget
flutter: _TestWidgetState build

- In the next setState
flutter: _TestWidgetState didUpdateWidget
flutter: _TestWidgetState build

didUpdateWidget is relevant when the framework updates an existing state with a matching new widget configuration. A different identity or removal can produce another lifecycle path, so the trace is not a universal sequence for every parent change.

The source’s application-specific base classes and route logs remain historical. No Flutter lifecycle run was repeated for this revision.

← Back to the garden